Erez Zadok and Ion Badulescu
Computer Science Department, Columbia University
{ezk,ion}@cs.columbia.edu
Linux is a popular operating system that is rapidly evolving due to being Open Source and having many developers. The Linux kernel comes with more than two dozen file systems, all of which are native: they access device drivers directly. Native file systems are harder to develop. Stackable file systems, however, are easier to develop because they use existing file systems and interfaces.
This paper describes a stackable wrapper file system we wrote for Linux, called Wrapfs. This file system requires a single small kernel change (one likely to be incorporated in future kernel releases), and can serve as a template from which other stackable file systems can be written. Wrapfs takes care of most interfacing to the kernel, freeing developers to concentrate on the core semantic issues of their new file system. As examples, we describe several file systems we wrote using Wrapfs.
We also detail the implementation of key operations in the Linux stackable vnode interface, and the change we made to the Linux kernel to support stackable file system modules. Though we have repeated this work for both Linux 2.0 and 2.1/2.2, this paper will concentrate and report results for the 2.1.129 kernel. The overhead imposed by Wrapfs is only 5-7%.