summaryrefslogtreecommitdiffstats
path: root/fs/ocfs2/dlm
diff options
context:
space:
mode:
authoralex chen <alex.chen@huawei.com>2014-06-23 13:22:07 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2014-06-23 16:47:45 -0700
commit5fb1beb069dcf616e88be9d330b86878a79aa4ff (patch)
treed14175b91979c4d64a433710f9a9e0168ef4919e /fs/ocfs2/dlm
parentd05f0cdcbe6388723f1900c549b4850360545201 (diff)
downloadlinux-5fb1beb069dcf616e88be9d330b86878a79aa4ff.tar.gz
linux-5fb1beb069dcf616e88be9d330b86878a79aa4ff.tar.bz2
linux-5fb1beb069dcf616e88be9d330b86878a79aa4ff.zip
ocfs2: should add inode into orphan dir after updating entry in ocfs2_rename()
There are two files a and b in dir /mnt/ocfs2. node A node B mv a b In ocfs2_rename(), after calling ocfs2_orphan_add(), the inode of file b will be added into orphan dir. If ocfs2_update_entry() fails, ocfs2_rename return error and mv operation fails. But file b still exists in the parent dir. ocfs2_queue_orphan_scan -> ocfs2_queue_recovery_completion -> ocfs2_complete_recovery -> ocfs2_recover_orphans The inode of the file b will be put with iput(). ocfs2_evict_inode -> ocfs2_delete_inode -> ocfs2_wipe_inode -> ocfs2_remove_inode OCFS2_VALID_FL in the inode i_flags will be cleared. The file b still can be accessed on node B. ls /mnt/ocfs2 When first read the file b with ocfs2_read_inode_block(). It will validate the inode using ocfs2_validate_inode_block(). Because OCFS2_VALID_FL not set in the inode i_flags, so the file system will be readonly. So we should add inode into orphan dir after updating entry in ocfs2_rename(). Signed-off-by: alex.chen <alex.chen@huawei.com> Reviewed-by: Mark Fasheh <mfasheh@suse.de> Cc: Joel Becker <jlbec@evilplan.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs/ocfs2/dlm')
0 files changed, 0 insertions, 0 deletions