summaryrefslogtreecommitdiff
path: root/fs/udf/inode.c
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2023-01-19 12:37:04 +0100
committerJan Kara <jack@suse.cz>2023-01-26 16:46:34 +0100
commit2d532616c768c7473b7ebcf39aa16c824c73b7fc (patch)
tree4ae0368ae2bfc81ca64308016f413d33a4aaf7cf /fs/udf/inode.c
parent6a3b37e0ea20bcb50e519c75fae3387199f35400 (diff)
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/inode.c')
-rw-r--r--fs/udf/inode.c9
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) {