free_full_branch(): don't bother modifying the block we are going to free
authorAl Viro <viro@zeniv.linux.org.uk>
Fri, 19 Jun 2015 00:14:02 +0000 (20:14 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Mon, 6 Jul 2015 21:39:50 +0000 (17:39 -0400)
Note that it's already made unreachable from the inode, so we don't have
to worry about ufs_frag_map() walking into something already freed.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/ufs/inode.c

index 26835a80f7ddd6dfb73fff1d6b605449ec8a2b79..424949f459c8cd801ce1df67cf90e4c87ecb6c7b 100644 (file)
@@ -1081,13 +1081,8 @@ static void free_full_branch(struct inode *inode, u64 ind_block, int depth)
                for (i = 0; i < uspi->s_apb; i++) {
                        void *p = ubh_get_data_ptr(uspi, ubh, i);
                        u64 block = ufs_data_ptr_to_cpu(sb, p);
-                       if (block) {
-                               write_seqlock(&UFS_I(inode)->meta_lock);
-                               ufs_data_ptr_clear(uspi, p);
-                               write_sequnlock(&UFS_I(inode)->meta_lock);
+                       if (block)
                                free_full_branch(inode, block, depth);
-                               ubh_mark_buffer_dirty(ubh);
-                       }
                }
        } else {
                struct to_free ctx = {.inode = inode};
@@ -1095,13 +1090,8 @@ static void free_full_branch(struct inode *inode, u64 ind_block, int depth)
                for (i = 0; i < uspi->s_apb; i++) {
                        void *p = ubh_get_data_ptr(uspi, ubh, i);
                        u64 block = ufs_data_ptr_to_cpu(sb, p);
-                       if (block) {
-                               write_seqlock(&UFS_I(inode)->meta_lock);
-                               ufs_data_ptr_clear(uspi, p);
-                               write_sequnlock(&UFS_I(inode)->meta_lock);
-                               ubh_mark_buffer_dirty(ubh);
+                       if (block)
                                free_data(&ctx, block, uspi->s_fpb);
-                       }
                }
                free_data(&ctx, 0, 0);
        }