]> git.baikalelectronics.ru Git - kernel.git/commit
eCryptfs: Copy up attributes of the lower target inode after rename
authorTyler Hicks <tyhicks@canonical.com>
Thu, 13 Sep 2012 19:00:56 +0000 (12:00 -0700)
committerTyler Hicks <tyhicks@canonical.com>
Fri, 14 Sep 2012 16:36:03 +0000 (09:36 -0700)
commitb8a51752ad2c30b45ce0fd06193d6b7b4b42efdd
treea551e696fdf0fb75c975d45efe0d4b8729c5671c
parente96c103e5db8a374b823e7ba89564249bc0befa8
eCryptfs: Copy up attributes of the lower target inode after rename

After calling into the lower filesystem to do a rename, the lower target
inode's attributes were not copied up to the eCryptfs target inode. This
resulted in the eCryptfs target inode staying around, rather than being
evicted, because i_nlink was not updated for the eCryptfs inode. This
also meant that eCryptfs didn't do the final iput() on the lower target
inode so it stayed around, as well. This would result in a failure to
free up space occupied by the target file in the rename() operation.
Both target inodes would eventually be evicted when the eCryptfs
filesystem was unmounted.

This patch calls fsstack_copy_attr_all() after the lower filesystem
does its ->rename() so that important inode attributes, such as i_nlink,
are updated at the eCryptfs layer. ecryptfs_evict_inode() is now called
and eCryptfs can drop its final reference on the lower inode.

http://launchpad.net/bugs/561129

Signed-off-by: Tyler Hicks <tyhicks@canonical.com>
Tested-by: Colin Ian King <colin.king@canonical.com>
Cc: <stable@vger.kernel.org> [2.6.39+]
fs/ecryptfs/inode.c