Add a couple btrfs patches cc'd to stable upstream
This commit is contained in:
parent
b23324436e
commit
f86650b158
|
@ -0,0 +1,119 @@
|
|||
From 259072b7a1c20f8612dcaa8e0e027004aa98f864 Mon Sep 17 00:00:00 2001
|
||||
From: Filipe Manana <fdmanana@suse.com>
|
||||
Date: Wed, 6 Jan 2016 22:42:35 +0000
|
||||
Subject: [PATCH 2/2] Btrfs: fix fitrim discarding device area reserved for
|
||||
boot loader's use
|
||||
|
||||
As of the 4.3 kernel release, the fitrim ioctl can now discard any region
|
||||
of a disk that is not allocated to any chunk/block group, including the
|
||||
first megabyte which is used for our primary superblock and by the boot
|
||||
loader (grub for example).
|
||||
|
||||
Fix this by not allowing to trim/discard any region in the device starting
|
||||
with an offset not greater than min(alloc_start_mount_option, 1Mb), just
|
||||
as it was not possible before 4.3.
|
||||
|
||||
A reproducer test case for xfstests follows.
|
||||
|
||||
seq=`basename $0`
|
||||
seqres=$RESULT_DIR/$seq
|
||||
echo "QA output created by $seq"
|
||||
tmp=/tmp/$$
|
||||
status=1 # failure is the default!
|
||||
trap "_cleanup; exit \$status" 0 1 2 3 15
|
||||
|
||||
_cleanup()
|
||||
{
|
||||
cd /
|
||||
rm -f $tmp.*
|
||||
}
|
||||
|
||||
# get standard environment, filters and checks
|
||||
. ./common/rc
|
||||
. ./common/filter
|
||||
|
||||
# real QA test starts here
|
||||
_need_to_be_root
|
||||
_supported_fs btrfs
|
||||
_supported_os Linux
|
||||
_require_scratch
|
||||
|
||||
rm -f $seqres.full
|
||||
|
||||
_scratch_mkfs >>$seqres.full 2>&1
|
||||
|
||||
# Write to the [0, 64Kb[ and [68Kb, 1Mb[ ranges of the device. These ranges are
|
||||
# reserved for a boot loader to use (GRUB for example) and btrfs should never
|
||||
# use them - neither for allocating metadata/data nor should trim/discard them.
|
||||
# The range [64Kb, 68Kb[ is used for the primary superblock of the filesystem.
|
||||
$XFS_IO_PROG -c "pwrite -S 0xfd 0 64K" $SCRATCH_DEV | _filter_xfs_io
|
||||
$XFS_IO_PROG -c "pwrite -S 0xfd 68K 956K" $SCRATCH_DEV | _filter_xfs_io
|
||||
|
||||
# Now mount the filesystem and perform a fitrim against it.
|
||||
_scratch_mount
|
||||
_require_batched_discard $SCRATCH_MNT
|
||||
$FSTRIM_PROG $SCRATCH_MNT
|
||||
|
||||
# Now unmount the filesystem and verify the content of the ranges was not
|
||||
# modified (no trim/discard happened on them).
|
||||
_scratch_unmount
|
||||
echo "Content of the ranges [0, 64Kb] and [68Kb, 1Mb[ after fitrim:"
|
||||
od -t x1 -N $((64 * 1024)) $SCRATCH_DEV
|
||||
od -t x1 -j $((68 * 1024)) -N $((956 * 1024)) $SCRATCH_DEV
|
||||
|
||||
status=0
|
||||
exit
|
||||
|
||||
Reported-by: Vincent Petry <PVince81@yahoo.fr>
|
||||
Reported-by: Andrei Borzenkov <arvidjaar@gmail.com>
|
||||
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=109341
|
||||
Fixes: 499f377f49f0 (btrfs: iterate over unused chunk space in FITRIM)
|
||||
Cc: stable@vger.kernel.org # 4.3+
|
||||
Signed-off-by: Filipe Manana <fdmanana@suse.com>
|
||||
---
|
||||
fs/btrfs/volumes.c | 20 ++++++++++----------
|
||||
1 file changed, 10 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
|
||||
index b816b3a2e118..96f8c827d563 100644
|
||||
--- a/fs/btrfs/volumes.c
|
||||
+++ b/fs/btrfs/volumes.c
|
||||
@@ -1208,6 +1208,15 @@ int find_free_dev_extent_start(struct btrfs_transaction *transaction,
|
||||
int ret;
|
||||
int slot;
|
||||
struct extent_buffer *l;
|
||||
+ u64 min_search_start;
|
||||
+
|
||||
+ /*
|
||||
+ * We don't want to overwrite the superblock on the drive nor any area
|
||||
+ * used by the boot loader (grub for example), so we make sure to start
|
||||
+ * at an offset of at least 1MB.
|
||||
+ */
|
||||
+ min_search_start = max(root->fs_info->alloc_start, 1024ull * 1024);
|
||||
+ search_start = max(search_start, min_search_start);
|
||||
|
||||
path = btrfs_alloc_path();
|
||||
if (!path)
|
||||
@@ -1348,18 +1357,9 @@ int find_free_dev_extent(struct btrfs_trans_handle *trans,
|
||||
struct btrfs_device *device, u64 num_bytes,
|
||||
u64 *start, u64 *len)
|
||||
{
|
||||
- struct btrfs_root *root = device->dev_root;
|
||||
- u64 search_start;
|
||||
-
|
||||
/* FIXME use last free of some kind */
|
||||
-
|
||||
- /*
|
||||
- * we don't want to overwrite the superblock on the drive,
|
||||
- * so we make sure to start at an offset of at least 1MB
|
||||
- */
|
||||
- search_start = max(root->fs_info->alloc_start, 1024ull * 1024);
|
||||
return find_free_dev_extent_start(trans->transaction, device,
|
||||
- num_bytes, search_start, start, len);
|
||||
+ num_bytes, 0, start, len);
|
||||
}
|
||||
|
||||
static int btrfs_free_dev_extent(struct btrfs_trans_handle *trans,
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
From 43d10880aa4ac713cf73dbac428be9671ef1bf9d Mon Sep 17 00:00:00 2001
|
||||
From: David Sterba <dsterba@suse.com>
|
||||
Date: Mon, 30 Nov 2015 17:27:06 +0100
|
||||
Subject: [PATCH 1/2] btrfs: handle invalid num_stripes in sys_array
|
||||
|
||||
We can handle the special case of num_stripes == 0 directly inside
|
||||
btrfs_read_sys_array. The BUG_ON in btrfs_chunk_item_size is there to
|
||||
catch other unhandled cases where we fail to validate external data.
|
||||
|
||||
A crafted or corrupted image crashes at mount time:
|
||||
|
||||
BTRFS: device fsid 9006933e-2a9a-44f0-917f-514252aeec2c devid 1 transid 7 /dev/loop0
|
||||
BTRFS info (device loop0): disk space caching is enabled
|
||||
BUG: failure at fs/btrfs/ctree.h:337/btrfs_chunk_item_size()!
|
||||
Kernel panic - not syncing: BUG!
|
||||
CPU: 0 PID: 313 Comm: mount Not tainted 4.2.5-00657-ge047887-dirty #25
|
||||
Stack:
|
||||
637af890 60062489 602aeb2e 604192ba
|
||||
60387961 00000011 637af8a0 6038a835
|
||||
637af9c0 6038776b 634ef32b 00000000
|
||||
Call Trace:
|
||||
[<6001c86d>] show_stack+0xfe/0x15b
|
||||
[<6038a835>] dump_stack+0x2a/0x2c
|
||||
[<6038776b>] panic+0x13e/0x2b3
|
||||
[<6020f099>] btrfs_read_sys_array+0x25d/0x2ff
|
||||
[<601cfbbe>] open_ctree+0x192d/0x27af
|
||||
[<6019c2c1>] btrfs_mount+0x8f5/0xb9a
|
||||
[<600bc9a7>] mount_fs+0x11/0xf3
|
||||
[<600d5167>] vfs_kern_mount+0x75/0x11a
|
||||
[<6019bcb0>] btrfs_mount+0x2e4/0xb9a
|
||||
[<600bc9a7>] mount_fs+0x11/0xf3
|
||||
[<600d5167>] vfs_kern_mount+0x75/0x11a
|
||||
[<600d710b>] do_mount+0xa35/0xbc9
|
||||
[<600d7557>] SyS_mount+0x95/0xc8
|
||||
[<6001e884>] handle_syscall+0x6b/0x8e
|
||||
|
||||
Reported-by: Jiri Slaby <jslaby@suse.com>
|
||||
Reported-by: Vegard Nossum <vegard.nossum@oracle.com>
|
||||
CC: stable@vger.kernel.org # 3.19+
|
||||
Signed-off-by: David Sterba <dsterba@suse.com>
|
||||
---
|
||||
fs/btrfs/volumes.c | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
|
||||
index 6fc735869c18..b816b3a2e118 100644
|
||||
--- a/fs/btrfs/volumes.c
|
||||
+++ b/fs/btrfs/volumes.c
|
||||
@@ -6399,6 +6399,14 @@ int btrfs_read_sys_array(struct btrfs_root *root)
|
||||
goto out_short_read;
|
||||
|
||||
num_stripes = btrfs_chunk_num_stripes(sb, chunk);
|
||||
+ if (!num_stripes) {
|
||||
+ printk(KERN_ERR
|
||||
+ "BTRFS: invalid number of stripes %u in sys_array at offset %u\n",
|
||||
+ num_stripes, cur_offset);
|
||||
+ ret = -EIO;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
len = btrfs_chunk_item_size(num_stripes);
|
||||
if (cur_offset + len > array_size)
|
||||
goto out_short_read;
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -686,6 +686,9 @@ Patch628: i915-stable-backports.patch
|
|||
Patch629: SCSI-refactor-device-matching-code-in-scsi_devinfo.c.patch
|
||||
Patch630: SCSI-fix-bug-in-scsi_dev_info_list-matching.patch
|
||||
|
||||
Patch631: btrfs-handle-invalid-num_stripes-in-sys_array.patch
|
||||
Patch632: Btrfs-fix-fitrim-discarding-device-area-reserved-for.patch
|
||||
|
||||
# END OF PATCH DEFINITIONS
|
||||
|
||||
%endif
|
||||
|
@ -2130,6 +2133,7 @@ fi
|
|||
#
|
||||
%changelog
|
||||
* Tue Jan 19 2016 Josh Boyer <jwboyer@fedoraproject.org>
|
||||
- Add a couple btrfs patches cc'd to stable upstream
|
||||
- Add SCSI patches to avoid blacklist false positives (rhbz 1299810)
|
||||
|
||||
* Mon Jan 18 2016 Josh Boyer <jwboyer@fedoraproject.org> - 4.3.3-302
|
||||
|
|
Loading…
Reference in New Issue