udf: Fix deadlock between writeback and udf_setsize()
[sfrench/cifs-2.6.git] / fs / udf / inode.c
index 98c510e172032df27a92b296507a3c1cb3017cdb..18fdb9d90812a2849376de612ac2a52bc487324e 100644 (file)
@@ -1222,8 +1222,8 @@ int udf_setsize(struct inode *inode, loff_t newsize)
                        return err;
                }
 set_size:
-               truncate_setsize(inode, newsize);
                up_write(&iinfo->i_data_sem);
+               truncate_setsize(inode, newsize);
        } else {
                if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) {
                        down_write(&iinfo->i_data_sem);
@@ -1240,9 +1240,9 @@ set_size:
                                          udf_get_block);
                if (err)
                        return err;
+               truncate_setsize(inode, newsize);
                down_write(&iinfo->i_data_sem);
                udf_clear_extent_cache(inode);
-               truncate_setsize(inode, newsize);
                udf_truncate_extents(inode);
                up_write(&iinfo->i_data_sem);
        }