Btrfs: reset force_compress on btrfs_file_defrag failure
PATCH 1/1 Btrfs: reset force_compress on btrfs_file_defrag failure
After we set force_compress with a new value (which was not being done while holding the inode mutex), if an error happens and we jump to the label out_ra, the force_compress property of the inode is not set to BTRFS_COMPRESS_NONE (unlike in the case where no errors happen).
Signed-off-by Filipe David Borba Manana <[email protected]>
--- fs/btrfs/ioctl.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)
fs/btrfs/ioctl.c +7 -7
@@ -1272,9 +1272,6 @@ int btrfs_defrag_file(struct inode *inode, struct file *file, cluster = max_cluster; } -if (range->flags &BTRFS_DEFRAG_RANGE_COMPRESS ) -BTRFS_I (inode)->force_compress = compress_type; -if (i + cluster > ra_index) { ra_index =max (i, ra_index); btrfs_force_ra(inode->i_mapping, ra, file, ra_index,
@@ -1283,6 +1280,8 @@ int btrfs_defrag_file(struct inode *inode, struct file *file, }mutex_lock (&inode->i_mutex); +if (range->flags &BTRFS_DEFRAG_RANGE_COMPRESS ) +BTRFS_I (inode)->force_compress = compress_type; ret =cluster_pages_for_defrag (inode, pages, i, cluster);if (ret <0 ) {mutex_unlock (&inode->i_mutex);
@@ -1339,10 +1338,6 @@ int btrfs_defrag_file(struct inode *inode, struct file *file, atomic_read(&root->fs_info->async_delalloc_pages) == 0)); }atomic_dec (&root->fs_info->async_submit_draining); - -mutex_lock (&inode->i_mutex); -BTRFS_I (inode)->force_compress =BTRFS_COMPRESS_NONE ; -mutex_unlock (&inode->i_mutex); }if (range->compress_type ==BTRFS_COMPRESS_LZO ) {
@@ -1352,6 +1347,11 @@ int btrfs_defrag_file(struct inode *inode, struct file *file, ret = defrag_count; out_ra: +if (range->flags &BTRFS_DEFRAG_RANGE_COMPRESS ) { +mutex_lock (&inode->i_mutex); +BTRFS_I (inode)->force_compress =BTRFS_COMPRESS_NONE ; +mutex_unlock (&inode->i_mutex); + }if (!file)kfree (ra);kfree (pages);
Signature · 1 line
1.7.9.5