Abstract

Although ubiquitous, modern filesystems have rather complex behaviours that are hardly understood by programmers and lead to severe software bugs such as data corruption. As a first step to ensure correctness of software performing file I/O, we formalize the semantics of the Linux ext4 filesystem, which we integrate with the weak memory consistency semantics of C/C++. We further develop an effective model checking approach for verifying programs that use the filesystem. In doing so, we discover and report bugs in commonly-used text editors such as vim, emacs and nano.

Highlights

  • File I/O is one of the most fundamental concepts in computer science

  • This assumption is violated by all modern filesystems, and programmers must insert system calls such as sync/fsync to ensure that updates on one file complete before those to another

  • Apart from being greatly beneficial for performance, the Virtual File System (VFS) and the page cache largely determine ext4’s consistency semantics, as we describe in ğ2.3

Read more

Summary

Introduction

File I/O is one of the most fundamental concepts in computer science. Almost all applications interact with filesystems to store their configurations, while others (e.g., document editors) crucially depend on them for their core functionality. If an application writes ‘A’ to file a.txt and ‘B’ to b.txt, they would assume that if the computer were to crash at some point, it would not be possible for the ‘B’ update to have persisted without ‘A’ having persisted. This assumption is violated by all modern filesystems, and programmers must insert system calls such as sync/fsync to ensure that updates on one file complete before those to another

Objectives
Methods
Results
Full Text
Published version (Free)

Talk to us

Join us for a 30 min session where you can share your feedback and ask us any queries you have

Schedule a call