FSX

File System Exerciser

History.

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.

Whilst 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 a 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. That site seems to now be on autopilot, with no new commits to the fs tools. The svn/git servers stopped responding a while ago. Who knows how much longer the archives will be around. Just in case, I put a copy of the last public version of fsx sent there here.

Variants:

Web www.codemonkey.org.uk




back to Dave Jones home page..