JFFS

Home | JFFS | UBIFS | YAFFS

Abstract

JFFS is a log-structured file system designed by Axis Communications AB in Sweden specifically for use on flash devices in embedded systems, which is aware of the restrictions imposed by flash technology and which operates directly on the flash chips, thereby avoiding the inefficiency of having two journalling file systems on top of each other.

The design goals of JFFS are largely determined by the characteristics of flash technology and of the devices in which it is expected to be used — as embedded and battery-powered devices are often treated by users as simple appliances, we must ensure reliable operation when the system is uncleanly shut down.

The original JFFS is a purely log-structured file system [LFS]. Nodes containing data and metadata are stored on the flash chips sequentially, progressing strictly linearly through the storage space available.

The original version of JFFS was used by Axis in their embedded devices in a relatively limited fashion, on 2.0 version of the Linux kernel. After the code was released, it was ported to the 2.3 development kernels by a developer in Sweden. Subsequently, Red Hat, Inc. were asked to port it to the 2.2 series and provide commercial support for a contract customer. Although the design of the file system was impressive, certain parts of the implementation appeared not to have been tested by its use in Axis’ products. Writing data anywhere other than at the end of a file did not work, and deleting a file while a process had a valid file descriptor for it would cause a kernel oops. After some weeks of reliability and compliance testing, JFFS reached stability. It is a credit to the clarity and quality of the original code that it was possible to become familiar with it and bring it to the current state in a relatively short space of time. However, during this time it became apparent that there were a few serious flaws in the original implementation of the filesystem.

In January of 2001, another customer required compression support in JFFS to be provided as part of a contract undertaken. After a period of discussion on the mailing list, it was concluded that the most appropriate course of action would be a complete reimplementation, allowing all of the above-mentioned deficiencies in the original implementation to be addressed. The JFFS2 code was intended to be portable, in particular to eCos, Red Hat’s embedded operating system targeted at consumer devices[eCos]. For this reason, JFFS2 is released under a dual license — both under GPL and the MPL-style “Red Hat eCos Public License”, to be compatible with the license of the remainder of the eCos source.

References

[1] "JFFS : The Journalling Flash File System" by David Woodhouse (presentation) [PDF]

[2] "The Journalling Flash File System" by David Woodhouse (presentation) [PDF]

[3] "The Journalling Flash File System" by David Woodhouse (paper) [PDF]

[4] "JFFS3 design issues" by Artem B. Bityuckiy [PDF]

[5] "JFFS : The Journalling Flash File System" by David Woodhouse [HTML]

Home | JFFS | UBIFS | YAFFS

© 2004 - 2011 [Vyacheslav Dubeyko | Äóáåéêî Âÿ÷åñëàâ] slava@dubeyko.com