]> git.proxmox.com Git - zfs-grub.git/blob - pvepatches/zfs-Fix-disk-matching-logic.patch
cf702ab9063fdf4fe2b3ed71ac9e1a5fd8b9549d
[zfs-grub.git] / pvepatches / zfs-Fix-disk-matching-logic.patch
1 From 12a9c52e516b94888db0a4502946242e3b14709f Mon Sep 17 00:00:00 2001
2 From: Vladimir Serbinenko <phcoder@gmail.com>
3 Date: Sat, 24 Jan 2015 19:57:26 +0000
4 Subject: zfs: Fix disk-matching logic.
5
6 Reported by: Tim Chase <dweeezil>
7 ---
8 (limited to 'grub-core/fs/zfs')
9
10 diff --git a/grub-core/fs/zfs/zfs.c b/grub-core/fs/zfs/zfs.c
11 index c943b52..c8c7b97 100644
12 --- a/grub-core/fs/zfs/zfs.c
13 +++ b/grub-core/fs/zfs/zfs.c
14 @@ -252,7 +252,6 @@ struct grub_zfs_data
15
16 uberblock_t current_uberblock;
17
18 - int mounted;
19 grub_uint64_t guid;
20 };
21
22 @@ -957,7 +956,7 @@ nvpair_value (const char *nvp,char **val,
23 static grub_err_t
24 check_pool_label (struct grub_zfs_data *data,
25 struct grub_zfs_device_desc *diskdesc,
26 - int *inserted)
27 + int *inserted, int original)
28 {
29 grub_uint64_t pool_state, txg = 0;
30 char *nvlist,*features;
31 @@ -1081,11 +1080,12 @@ check_pool_label (struct grub_zfs_data *data,
32
33 grub_dprintf ("zfs", "check 11 passed\n");
34
35 - if (data->mounted && data->guid != poolguid)
36 - return grub_error (GRUB_ERR_BAD_FS, "another zpool");
37 - else
38 + if (original)
39 data->guid = poolguid;
40
41 + if (data->guid != poolguid)
42 + return grub_error (GRUB_ERR_BAD_FS, "another zpool");
43 +
44 {
45 char *nv;
46 nv = grub_zfs_nvlist_lookup_nvlist (nvlist, ZPOOL_CONFIG_VDEV_TREE);
47 @@ -1186,7 +1186,7 @@ scan_disk (grub_device_t dev, struct grub_zfs_data *data,
48 }
49 grub_dprintf ("zfs", "label ok %d\n", label);
50
51 - err = check_pool_label (data, &desc, inserted);
52 + err = check_pool_label (data, &desc, inserted, original);
53 if (err || !*inserted)
54 {
55 grub_errno = GRUB_ERR_NONE;
56 @@ -3612,8 +3612,6 @@ zfs_mount (grub_device_t dev)
57 ub_endian) >> 63) & 1;
58 grub_free (osp);
59
60 - data->mounted = 1;
61 -
62 return data;
63 }
64
65 --
66 cgit v0.9.0.2