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: Jan Kara <jack@suse.cz>
This commit is contained in:
parent
ed313489ba
commit
52b19ac993
@ -878,6 +878,7 @@ void invalidate_inode_buffers(struct inode *inode)
|
||||
spin_unlock(&buffer_mapping->private_lock);
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(invalidate_inode_buffers);
|
||||
|
||||
/*
|
||||
* Remove any clean buffers from the inode's buffer list. This is called
|
||||
|
@ -106,6 +106,7 @@ void udf_clear_inode(struct inode *inode)
|
||||
udf_truncate_tail_extent(inode);
|
||||
unlock_kernel();
|
||||
write_inode_now(inode, 0);
|
||||
invalidate_inode_buffers(inode);
|
||||
}
|
||||
iinfo = UDF_I(inode);
|
||||
kfree(iinfo->i_ext.i_data);
|
||||
|
Loading…
Reference in New Issue
Block a user