mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-03 09:04:21 +08:00
\n
-----BEGIN PGP SIGNATURE----- iQEzBAABCAAdFiEEq1nRK9aeMoq1VSgcnJ2qBz9kQNkFAlyTUxoACgkQnJ2qBz9k QNmaQwf+Ih0uxFzuM81Z4iAD8s9GD1uCxxhG0/b6GHCH8iWMsUMQYGEacNLmWrLd zvdMRiDwVbjvVZ0hl/tG0+DnSYd8uHI0ipzGT0rv2vXLy/sgcSDytV2Bwh4S3cxk /bSGFojGdzYOvO3NI/qAg1WCfwz4a6ciA6wplmwRQw6hfNtQZL1BTSzUJKXAaeF7 wvsSh69HWYtutEre9yGRq/JXPrg+jikt6EolGQNxEU7OLvizqbYYlZS4oqFLb3Fi 68EhVVF2FvHKaZwIMp3twj/veThkoudK5giwImq8wkXN5o45gmM/358YfJqKKhiA N4fLpJx43QuOkoO9FJPgUWC8oXaQHQ== =ByFa -----END PGP SIGNATURE----- Merge tag 'fixes_for_v5.1-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs Pull udf fixes from Jan Kara: "Two udf error handling fixes" * tag 'fixes_for_v5.1-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs: udf: Propagate errors from udf_truncate_extents() udf: Fix crash on IO error during truncate
This commit is contained in:
commit
0939221e64
@ -1242,8 +1242,10 @@ set_size:
|
||||
truncate_setsize(inode, newsize);
|
||||
down_write(&iinfo->i_data_sem);
|
||||
udf_clear_extent_cache(inode);
|
||||
udf_truncate_extents(inode);
|
||||
err = udf_truncate_extents(inode);
|
||||
up_write(&iinfo->i_data_sem);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
update_time:
|
||||
inode->i_mtime = inode->i_ctime = current_time(inode);
|
||||
|
@ -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);
|
||||
@ -260,6 +260,9 @@ void udf_truncate_extents(struct inode *inode)
|
||||
epos.block = eloc;
|
||||
epos.bh = udf_tread(sb,
|
||||
udf_get_lb_pblock(sb, &eloc, 0));
|
||||
/* Error reading indirect block? */
|
||||
if (!epos.bh)
|
||||
return -EIO;
|
||||
if (elen)
|
||||
indirect_ext_len =
|
||||
(elen + sb->s_blocksize - 1) >>
|
||||
@ -283,4 +286,5 @@ void udf_truncate_extents(struct inode *inode)
|
||||
iinfo->i_lenExtents = inode->i_size;
|
||||
|
||||
brelse(epos.bh);
|
||||
return 0;
|
||||
}
|
||||
|
@ -235,7 +235,7 @@ extern struct inode *udf_new_inode(struct inode *, umode_t);
|
||||
/* truncate.c */
|
||||
extern void udf_truncate_tail_extent(struct inode *);
|
||||
extern void udf_discard_prealloc(struct inode *);
|
||||
extern void udf_truncate_extents(struct inode *);
|
||||
extern int udf_truncate_extents(struct inode *);
|
||||
|
||||
/* balloc.c */
|
||||
extern void udf_free_blocks(struct super_block *, struct inode *,
|
||||
|
Loading…
Reference in New Issue
Block a user