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

Commit 0a52d108 authored by David Sterba's avatar David Sterba
Browse files

btrfs: defrag: make readahead state allocation failure non-fatal



All sorts of readahead errors are not considered fatal. We can continue
defragmentation without it, with some potential slow down, which will
last only for the current inode.

Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 63e727ec
Loading
Loading
Loading
Loading
+8 −7
Original line number Diff line number Diff line
@@ -1273,13 +1273,13 @@ int btrfs_defrag_file(struct inode *inode, struct file *file,
		extent_thresh = SZ_256K;

	/*
	 * if we were not given a file, allocate a readahead
	 * context
	 * If we were not given a file, allocate a readahead context. As
	 * readahead is just an optimization, defrag will work without it so
	 * we don't error out.
	 */
	if (!file) {
		ra = kzalloc(sizeof(*ra), GFP_KERNEL);
		if (!ra)
			return -ENOMEM;
		if (ra)
			file_ra_state_init(ra, inode->i_mapping);
	} else {
		ra = &file->f_ra;
@@ -1363,8 +1363,9 @@ int btrfs_defrag_file(struct inode *inode, struct file *file,

		if (i + cluster > ra_index) {
			ra_index = max(i, ra_index);
			btrfs_force_ra(inode->i_mapping, ra, file, ra_index,
				       cluster);
			if (ra)
				btrfs_force_ra(inode->i_mapping, ra, file,
						ra_index, cluster);
			ra_index += cluster;
		}