I do atomic transactions on pure file systems using the "update" routine in my Loom::File module here:<p><a href="http://github.com/chkoreff/Loom/blob/master/code/Loom/File.pm" rel="nofollow">http://github.com/chkoreff/Loom/blob/master/code/Loom/File.p...</a><p>The stress test for that module is:<p><a href="http://github.com/chkoreff/Loom/blob/master/code/Loom/Test/File.pm" rel="nofollow">http://github.com/chkoreff/Loom/blob/master/code/Loom/Test/F...</a><p>(For example I can run 1000 processes all banging away on some files with the command "test_file 1000".  See the "bin" directory for the one-liner executable.)<p>You will note that Loom::Test::File uses Loom::DB::Trans_File, which wraps a simple (get/put/commit/cancel) layer around the core Loom::File::update routine.  The real meat of that layer is Loom::DB::Trans.<p><a href="http://github.com/chkoreff/Loom/blob/master/code/Loom/DB/Trans.pm" rel="nofollow">http://github.com/chkoreff/Loom/blob/master/code/Loom/DB/Tra...</a>