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.
6 Reported by: Tim Chase <dweeezil>
8 (limited to 'grub-core/fs/zfs')
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
16 uberblock_t current_uberblock;
22 @@ -957,7 +956,7 @@ nvpair_value (const char *nvp,char **val,
24 check_pool_label (struct grub_zfs_data *data,
25 struct grub_zfs_device_desc *diskdesc,
27 + int *inserted, int original)
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,
33 grub_dprintf ("zfs", "check 11 passed\n");
35 - if (data->mounted && data->guid != poolguid)
36 - return grub_error (GRUB_ERR_BAD_FS, "another zpool");
39 data->guid = poolguid;
41 + if (data->guid != poolguid)
42 + return grub_error (GRUB_ERR_BAD_FS, "another zpool");
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,
49 grub_dprintf ("zfs", "label ok %d\n", label);
51 - err = check_pool_label (data, &desc, inserted);
52 + err = check_pool_label (data, &desc, inserted, original);
53 if (err || !*inserted)
55 grub_errno = GRUB_ERR_NONE;
56 @@ -3612,8 +3612,6 @@ zfs_mount (grub_device_t dev)
57 ub_endian) >> 63) & 1;