]> git.proxmox.com Git - pve-kernel-jessie.git/blob - zfs-fix-zpool-import-bug-with-nested-pools.patch
add fix for zpool import with vdev on zvol
[pve-kernel-jessie.git] / zfs-fix-zpool-import-bug-with-nested-pools.patch
1 From e02aaf17f15ad274fa1f24c9c826f1477911ea3f Mon Sep 17 00:00:00 2001
2 From: =?UTF-8?q?Hajo=20M=C3=B6ller?= <dasjoe@users.noreply.github.com>
3 Date: Wed, 26 Oct 2016 19:30:43 +0200
4 Subject: [PATCH] Fix lookup_bdev() on Ubuntu
5 MIME-Version: 1.0
6 Content-Type: text/plain; charset=UTF-8
7 Content-Transfer-Encoding: 8bit
8
9 Ubuntu added support for checking inode permissions to lookup_bdev() in kernel
10 commit 193fb6a2c94fab8eb8ce70a5da4d21c7d4023bee (merged in 4.4.0-6.21).
11 Upstream bug: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1636517
12
13 This patch adds a test for Ubuntu's variant of lookup_bdev() to configure and
14 calls the function in the correct way.
15
16 Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
17 Signed-off-by: Hajo Möller <dasjoe@gmail.com>
18 Closes #5336
19 ---
20 config/kernel-lookup-bdev.m4 | 22 +++++++++++++++++-----
21 include/linux/blkdev_compat.h | 17 +++++++++++++----
22 module/zfs/zvol.c | 2 +-
23 3 files changed, 31 insertions(+), 10 deletions(-)
24
25 diff --git a/config/kernel-lookup-bdev.m4 b/config/kernel-lookup-bdev.m4
26 index 245f95f..abbf55d 100644
27 --- a/config/kernel-lookup-bdev.m4
28 +++ b/config/kernel-lookup-bdev.m4
29 @@ -1,17 +1,29 @@
30 dnl #
31 -dnl # 2.6.27 API change
32 -dnl # lookup_bdev() was exported.
33 +dnl # 2.6.27, lookup_bdev() was exported.
34 +dnl # 4.4.0-6.21 - x.y on Ubuntu, lookup_bdev() takes 2 arguments.
35 dnl #
36 AC_DEFUN([ZFS_AC_KERNEL_LOOKUP_BDEV],
37 - [AC_MSG_CHECKING([whether lookup_bdev() is available])
38 + [AC_MSG_CHECKING([whether lookup_bdev() wants 1 arg])
39 ZFS_LINUX_TRY_COMPILE_SYMBOL([
40 #include <linux/fs.h>
41 ], [
42 lookup_bdev(NULL);
43 ], [lookup_bdev], [fs/block_dev.c], [
44 AC_MSG_RESULT(yes)
45 - AC_DEFINE(HAVE_LOOKUP_BDEV, 1, [lookup_bdev() is available])
46 + AC_DEFINE(HAVE_1ARG_LOOKUP_BDEV, 1, [lookup_bdev() wants 1 arg])
47 ], [
48 AC_MSG_RESULT(no)
49 + AC_MSG_CHECKING([whether lookup_bdev() wants 2 args])
50 + ZFS_LINUX_TRY_COMPILE_SYMBOL([
51 + #include <linux/fs.h>
52 + ], [
53 + lookup_bdev(NULL, FMODE_READ);
54 + ], [lookup_bdev], [fs/block_dev.c], [
55 + AC_MSG_RESULT(yes)
56 + AC_DEFINE(HAVE_2ARGS_LOOKUP_BDEV, 1,
57 + [lookup_bdev() wants 2 args])
58 + ], [
59 + AC_MSG_RESULT(no)
60 + ])
61 ])
62 -])
63 +])
64 \ No newline at end of file
65 diff --git a/include/linux/blkdev_compat.h b/include/linux/blkdev_compat.h
66 index bff93ff..1f90b98 100644
67 --- a/include/linux/blkdev_compat.h
68 +++ b/include/linux/blkdev_compat.h
69 @@ -263,12 +263,21 @@ bio_set_flags_failfast(struct block_device *bdev, int *flags)
70
71 /*
72 * 2.6.27 API change
73 - * The function was exported for use, prior to this it existed by the
74 + * The function was exported for use, prior to this it existed but the
75 * symbol was not exported.
76 + *
77 + * 4.4.0-6.21 API change for Ubuntu
78 + * lookup_bdev() gained a second argument, FMODE_*, to check inode permissions.
79 */
80 -#ifndef HAVE_LOOKUP_BDEV
81 -#define lookup_bdev(path) ERR_PTR(-ENOTSUP)
82 -#endif
83 +#ifdef HAVE_1ARG_LOOKUP_BDEV
84 +#define vdev_lookup_bdev(path) lookup_bdev(path)
85 +#else
86 +#ifdef HAVE_2ARGS_LOOKUP_BDEV
87 +#define vdev_lookup_bdev(path) lookup_bdev(path, 0)
88 +#else
89 +#define vdev_lookup_bdev(path) ERR_PTR(-ENOTSUP)
90 +#endif /* HAVE_2ARGS_LOOKUP_BDEV */
91 +#endif /* HAVE_1ARG_LOOKUP_BDEV */
92
93 /*
94 * 2.6.30 API change
95 diff --git a/module/zfs/zvol.c b/module/zfs/zvol.c
96 index bf6d59f..72a6bc5 100644
97 --- a/module/zfs/zvol.c
98 +++ b/module/zfs/zvol.c
99 @@ -174,7 +174,7 @@ zvol_is_zvol(const char *device)
100 struct block_device *bdev;
101 unsigned int major;
102
103 - bdev = lookup_bdev(device);
104 + bdev = vdev_lookup_bdev(device);
105 if (IS_ERR(bdev))
106 return (B_FALSE);
107