Commit 52b19ac9 authored by Jan Kara's avatar Jan Kara

udf: Fix BUG_ON() in destroy_inode()

udf_clear_inode() can leave behind buffers on mapping's i_private list (when
we truncated preallocation). Call invalidate_inode_buffers() so that the list
is properly cleaned-up before we return from udf_clear_inode(). This is ugly
and suggest that we should cleanup preallocation earlier than in clear_inode()
but currently there's no such call available since drop_inode() is called under
inode lock and thus is unusable for disk operations.
Signed-off-by: default avatarJan Kara <jack@suse.cz>
parent ed313489
...@@ -878,6 +878,7 @@ void invalidate_inode_buffers(struct inode *inode) ...@@ -878,6 +878,7 @@ void invalidate_inode_buffers(struct inode *inode)
spin_unlock(&buffer_mapping->private_lock); spin_unlock(&buffer_mapping->private_lock);
} }
} }
EXPORT_SYMBOL(invalidate_inode_buffers);
/* /*
* Remove any clean buffers from the inode's buffer list. This is called * Remove any clean buffers from the inode's buffer list. This is called
......
...@@ -106,6 +106,7 @@ void udf_clear_inode(struct inode *inode) ...@@ -106,6 +106,7 @@ void udf_clear_inode(struct inode *inode)
udf_truncate_tail_extent(inode); udf_truncate_tail_extent(inode);
unlock_kernel(); unlock_kernel();
write_inode_now(inode, 0); write_inode_now(inode, 0);
invalidate_inode_buffers(inode);
} }
iinfo = UDF_I(inode); iinfo = UDF_I(inode);
kfree(iinfo->i_ext.i_data); kfree(iinfo->i_ext.i_data);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment