• Mingming Cao's avatar
    [PATCH] ext3: remove unnecessary race then retry in ext3_get_block · fe55c452
    Mingming Cao authored
    The extra race-with-truncate-then-retry logic around
    ext3_get_block_handle(), which was inherited from ext2, becomes unecessary
    for ext3, since we have already obtained the ei->truncate_sem in
    ext3_get_block_handle() before calling ext3_alloc_branch().  The
    ei->truncate_sem is already there to block concurrent truncate and block
    allocation on the same inode.  So the inode's indirect addressing tree
    won't be changed after we grab that semaphore.
    
    We could, after get the semaphore, re-verify the branch is up-to-date or
    not.  If it has been changed, then get the updated branch.  If we still
    need block allocation, we will have a safe version of the branch to work
    with in the ext3_find_goal()/ext3_splice_branch().
    
    The code becomes more readable after remove those retry logic.  The patch
    also clean up some gotos in ext3_get_block_handle() to make it more
    readable.
    Signed-off-by: default avatarMingming Cao <cmm@us.ibm.com>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    fe55c452
inode.c 90 KB