Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4e41b1c5 authored by Jan Kara's avatar Jan Kara Committed by Greg Kroah-Hartman
Browse files

udf: Truncate added extents on failed expansion



commit 70bfb3a8d661d4fdc742afc061b88a7f3fc9f500 upstream.

When a file expansion failed because we didn't have enough space for
indirect extents make sure we truncate extents created so far so that we
don't leave extents beyond EOF.

CC: stable@vger.kernel.org
Signed-off-by: default avatarJan Kara <jack@suse.cz>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent dee96928
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -528,8 +528,10 @@ static int udf_do_extend_file(struct inode *inode,
	}

	if (fake) {
		udf_add_aext(inode, last_pos, &last_ext->extLocation,
		err = udf_add_aext(inode, last_pos, &last_ext->extLocation,
				   last_ext->extLength, 1);
		if (err < 0)
			goto out_err;
		count++;
	} else {
		struct kernel_lb_addr tmploc;
@@ -563,7 +565,7 @@ static int udf_do_extend_file(struct inode *inode,
		err = udf_add_aext(inode, last_pos, &last_ext->extLocation,
				   last_ext->extLength, 1);
		if (err)
			return err;
			goto out_err;
		count++;
	}
	if (new_block_bytes) {
@@ -572,7 +574,7 @@ static int udf_do_extend_file(struct inode *inode,
		err = udf_add_aext(inode, last_pos, &last_ext->extLocation,
				   last_ext->extLength, 1);
		if (err)
			return err;
			goto out_err;
		count++;
	}

@@ -586,6 +588,11 @@ static int udf_do_extend_file(struct inode *inode,
		return -EIO;

	return count;
out_err:
	/* Remove extents we've created so far */
	udf_clear_extent_cache(inode);
	udf_truncate_extents(inode);
	return err;
}

/* Extend the final block of the file to final_block_len bytes */