File System Exerciser


Way back in 1991, Avadis Tevanian wrote a 'file system exerciser'. It stayed hidden away within NeXT for many years, until it resurfaced again in 1998, after being rewritten by Conrad Minshall from Apple. It still remained somewhat unknown, until 2001, a decade after its original inception, Jordan Hubbard announced on freebsd-hackers a new tool called 'fsx', which found major NFS bugs in FreeBSD.

At the time I was working for SuSE, and didn't waste much time before I started experimenting with this on Linux. The 'porting' effort was trivial, a few missing #include's & defines iirc. Needless to say, it broke numerous Linux filesystems then, and even today, it occasionally turns up something interesting.

While it's an awesome tool, Apple really kind of dropped the ball on this project imo. I mailed back my small diffs to Conrad, and he integrated them, however there was no central place to download fsx. Everyone in the Linux community started going to my website to grab it. What happened next is something of an opensource disaster.

A copy ended up in the ext3tools, which gained O_DIRECT & AIO support. The XFS folks decided they liked it, and improved on it further, and stuck their variant in their xfstests CVS. The Samba folks didn't want to be left out of the fun, they snagged a copy, made some changes, and stuck it in with their junkcode. Finally, wouldn't it have been awesome if The Linux Test Project folks rolled up their own variant in their test-the-world katamari's ? Well, they did.

Meanwhile, back at the ranch in BSD-land.. The FreeBSD folks (Matt Dillon in particular) were going nutso fixing up NFS bugs left and right, and eventually a copy of fsx ended up in their regression testsuite. This got regularly synced with Apple's sources, and also got a few other changes. A while later, Matt gets bored, goes off and starts his DragonFly thing. Clearly every Unix needs it's own fsx variant (I was surprised to not find a openbsd/netbsd variant), and so it came to be. Dfly's changes seem to be limited to adding a segfault trap handler though.

I spent some time, and gathered up all these things (thankfully all single .c file's except for the ext3 variant which needs a header) with a view towards trying to unify them into 'the one true fsx'. After a half hour or so, I ran out of energy. The trivial diffs are easily ported, but there's a ton of changes that seem to have been done with little thought towards portability. Maybe I'll revisit it at some point.

The really sad part is what got me down this path in the first place was the fact that I was running the original first version to run on Linux, and it was pointed out tonight that it dies horribly if run on an architecture with something other than 4KB pages. Ie, it died horribly on PPC64. This is sad, because it was fixed in one of the later flavours, but with so many variants based on the original, this is busted on most of the copies out there.

There's also some fun with the license. When Conrad posted the original, it had no license. This is the one lots of people forked from. Subsequent updates came under various versions of the APSL. What a mess.

FWIW, I updated the 'reference' copy of fsx-linux on my webserver (I use the word reference loosely, it was linked to from many Linux websites, but is in no means canonical), so at least people will stop downloading the ancient version. For my sins however, I've created yet another fork by fixing up some compiler warnings. Sigh.

Update: I found a newer version from Apple from circa 2009 on the macosforge site. Sometime later, it migrated to github.

Local copies of variants:
(note, the links above may point to newer revs. These snapshots are here just in case any of the above go offline)

Web www.codemonkey.org.uk

back to Dave Jones home page..