ext4: sync the directory inode in ext4_sync_parent()
authorCurt Wohlgemuth <curtw@google.com>
Mon, 11 Apr 2011 02:05:31 +0000 (22:05 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Mon, 11 Apr 2011 02:05:31 +0000 (22:05 -0400)
commit0893ed458b4b1d7c7667ca7ffb8b11febe7e7e6c
treea9a4e226a6bfa7a13e0cad545280e5e8ce2a80b2
parent0449641130f5652b344ef6fa39fa019d7e94660a
ext4: sync the directory inode in ext4_sync_parent()

ext4 has taken the stance that, in the absence of a journal,
when an fsync/fdatasync of an inode is done, the parent
directory should be sync'ed if this inode entry is new.
ext4_sync_parent(), which implements this, does indeed sync
the dirent pages for parent directories, but it does not
sync the directory *inode*.  This patch fixes this.

Also now return error status from ext4_sync_parent().

I tested this using a power fail test, which panics a
machine running a file server getting requests from a
client.  Without this patch, on about every other test run,
the server is missing many, many files that had been synced.
With this patch, on > 6 runs, I see zero files being lost.

Google-Bug-Id: 4179519
Signed-off-by: Curt Wohlgemuth <curtw@google.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
fs/ext4/fsync.c