]> git.proxmox.com Git - zfs-grub.git/blame - pvepatches/zfs-Fix-disk-matching-logic.patch
use latest packages from githup (2.02-beta2.9-ZOL11-7aa9f6)
[zfs-grub.git] / pvepatches / zfs-Fix-disk-matching-logic.patch
CommitLineData
0a671b56
DM
1From 12a9c52e516b94888db0a4502946242e3b14709f Mon Sep 17 00:00:00 2001
2From: Vladimir Serbinenko <phcoder@gmail.com>
3Date: Sat, 24 Jan 2015 19:57:26 +0000
4Subject: zfs: Fix disk-matching logic.
5
6Reported by: Tim Chase <dweeezil>
7---
8(limited to 'grub-core/fs/zfs')
9
10diff --git a/grub-core/fs/zfs/zfs.c b/grub-core/fs/zfs/zfs.c
11index 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--
66cgit v0.9.0.2