diff options
author | Jan Kara <jack@suse.cz> | 2019-03-11 15:27:02 +0100 |
---|---|---|
committer | Jan Kara <jack@suse.cz> | 2019-03-18 16:30:02 +0100 |
commit | 2b42be5eb24564227b15e66f54f088e5a26549c7 (patch) | |
tree | eeb32b8731b61f2ce1fb54ed52cc2a3801d2d1b7 /fs/udf/truncate.c | |
parent | udf: Fix crash on IO error during truncate (diff) | |
download | linux-2b42be5eb24564227b15e66f54f088e5a26549c7.tar.xz linux-2b42be5eb24564227b15e66f54f088e5a26549c7.zip |
udf: Propagate errors from udf_truncate_extents()
Make udf_truncate_extents() properly propagate errors to its callers and
let udf_setsize() handle the error properly as well. This lets userspace
know in case there's some error when truncating blocks.
Signed-off-by: Jan Kara <jack@suse.cz>
Diffstat (limited to 'fs/udf/truncate.c')
-rw-r--r-- | fs/udf/truncate.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/fs/udf/truncate.c b/fs/udf/truncate.c index 94220ba85628..63a47f1e1d52 100644 --- a/fs/udf/truncate.c +++ b/fs/udf/truncate.c @@ -199,7 +199,7 @@ static void udf_update_alloc_ext_desc(struct inode *inode, * for making file shorter. For making file longer, udf_extend_file() has to * be used. */ -void udf_truncate_extents(struct inode *inode) +int udf_truncate_extents(struct inode *inode) { struct extent_position epos; struct kernel_lb_addr eloc, neloc = {}; @@ -224,7 +224,7 @@ void udf_truncate_extents(struct inode *inode) if (etype == -1) { /* We should extend the file? */ WARN_ON(byte_offset); - return; + return 0; } epos.offset -= adsize; extent_trunc(inode, &epos, &eloc, etype, elen, byte_offset); @@ -262,7 +262,7 @@ void udf_truncate_extents(struct inode *inode) udf_get_lb_pblock(sb, &eloc, 0)); /* Error reading indirect block? */ if (!epos.bh) - return; + return -EIO; if (elen) indirect_ext_len = (elen + sb->s_blocksize - 1) >> @@ -286,4 +286,5 @@ void udf_truncate_extents(struct inode *inode) iinfo->i_lenExtents = inode->i_size; brelse(epos.bh); + return 0; } |