Fork Depot: A Userspace Implementation of Streams
The Windows and Macintosh operating systems have long promoted the use of files containing multiple streams, or forks, of data. With the advent of the upcoming Windows Vista (Longhorn) release, it is likely that more applications will use these multiple streams, thus forcing Linux applications that provide networked filesystem services (such as Samba) to support this feature. Unfortunately, Linux and most Unix operating systems (as well as applications written for these systems) do not support files with multiple forks, and many Linux kernel developers are actively hostile to the idea. This paper will describe a pure user-space implementation of the Solaris openat() interface, using a directory indexed by inode numbers to store the non-default named streams, and a user-space daemon to synchronize the fork depot directory after an inode containing multiple forks has been released or its permissions and/or ownership information changed. The performance limitations of this approach will be discussed, as well as optional modifications to the kernel to improve the performance of this user-space implementation. This approach, which starts in userspace, and then adds kernel assists for performance, has the advantage that the need for native multiple streams support can be proven before attempting to merge this highly contentious feature into the Linux kernel. In addition, the authors believe that with the appropriate performance assists in the ext3 filesystem, it should be possible to obtain nearly all of the performance advantages of a native implementation without touching the core VFS layer's lookup() and namei() implementations.
Theodore Ts'o is the maintainer of e2fsprogs and one of the maintainers of the ext2/3 filesystem. He organizes the annual Linux Kernel Summit, and sits on the board of the Free Standards Group and Usenix.
Dave Kleikamp works in IBM's Linux Technology Center. His expertise is in file systems, and is beginning to get involved in the VM subsystem. He is best known as the maintainer of the JFS file system.
Steve French is a Senior Engineer in IBM's Linux Technology Center responsible for Linux Filesystem/Network Filesystem design. He has been a member of the Samba team for four years and is the author and maintainer of the cifs Linux kernel filesystem, and is a coauthor of the CIFS network protocol specification.