ceph: preserve I_COMPLETE across rename
authorSage Weil <sage@newdream.net>
Sat, 5 Feb 2011 05:38:47 +0000 (21:38 -0800)
committerSage Weil <sage@newdream.net>
Tue, 15 Mar 2011 16:14:03 +0000 (09:14 -0700)
commit09adc80c611bb8902daa8ccfe34dbbc009d6befe
tree56d6096d2c4983a47acd7bb0a0f5d6e9c7fae331
parentb09734b1f4abd86e046777f0f268215b4ef1b523
ceph: preserve I_COMPLETE across rename

d_move puts the renamed dentry at the end of d_subdirs, screwing with our
cached dentry directory offsets.  We were just clearing I_COMPLETE to avoid
any possibility of trouble.  However, assigning the renamed dentry an
offset at the end of the directory (to match it's new d_subdirs position)
is sufficient to maintain correct behavior and hold onto I_COMPLETE.

This is especially important for workloads like rsync, which renames files
into place.  Before, we would lose I_COMPLETE and do MDS lookups for each
file.  With this patch we only talk to the MDS on create and rename.

Signed-off-by: Sage Weil <sage@newdream.net>
fs/ceph/inode.c