Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cc7231e3 authored by Al Viro's avatar Al Viro
Browse files

free_full_branch(): don't bother modifying the block we are going to free



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: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent b6eede0e
Loading
Loading
Loading
Loading
+2 −12
Original line number Diff line number Diff line
@@ -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,14 +1090,9 @@ 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);
	}