diff options
author | Jan Kara <jack@suse.cz> | 2023-01-19 12:37:04 +0100 |
---|---|---|
committer | Jan Kara <jack@suse.cz> | 2023-01-26 16:46:34 +0100 |
commit | 2d532616c768c7473b7ebcf39aa16c824c73b7fc (patch) | |
tree | 4ae0368ae2bfc81ca64308016f413d33a4aaf7cf /fs/udf | |
parent | udf: Push i_data_sem locking into udf_expand_file_adinicb() (diff) | |
download | linux-2d532616c768c7473b7ebcf39aa16c824c73b7fc.tar.xz linux-2d532616c768c7473b7ebcf39aa16c824c73b7fc.zip |
udf: Push i_data_sem locking into udf_extend_file()
Push i_data_sem locking into udf_extend_file(). It somewhat simplifies
the code around it.
Signed-off-by: Jan Kara <jack@suse.cz>
Diffstat (limited to 'fs/udf')
-rw-r--r-- | fs/udf/inode.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/fs/udf/inode.c b/fs/udf/inode.c index 627cdcb2f456..b4e4aacdaabc 100644 --- a/fs/udf/inode.c +++ b/fs/udf/inode.c @@ -555,6 +555,7 @@ static int udf_extend_file(struct inode *inode, loff_t newsize) else BUG(); + down_write(&iinfo->i_data_sem); /* * When creating hole in file, just don't bother with preserving * preallocation. It likely won't be very useful anyway. @@ -599,6 +600,7 @@ static int udf_extend_file(struct inode *inode, loff_t newsize) err = 0; out: brelse(epos.bh); + up_write(&iinfo->i_data_sem); return err; } @@ -1160,20 +1162,17 @@ int udf_setsize(struct inode *inode, loff_t newsize) (udf_file_entry_alloc_offset(inode) + newsize)) { down_write(&iinfo->i_data_sem); iinfo->i_lenAlloc = newsize; + up_write(&iinfo->i_data_sem); goto set_size; } err = udf_expand_file_adinicb(inode); if (err) return err; } - down_write(&iinfo->i_data_sem); err = udf_extend_file(inode, newsize); - if (err) { - up_write(&iinfo->i_data_sem); + if (err) return err; - } set_size: - up_write(&iinfo->i_data_sem); truncate_setsize(inode, newsize); } else { if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) { |