Skip to content
  • alex chen's avatar
    ocfs2: should add inode into orphan dir after updating entry in ocfs2_rename() · 5fb1beb0
    alex chen authored
    
    
    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: default avataralex.chen <alex.chen@huawei.com>
    Reviewed-by: default avatarMark Fasheh <mfasheh@suse.de>
    Cc: Joel Becker <jlbec@evilplan.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    5fb1beb0