diff options
| author | eschrock <none@none> | 2006-05-30 15:47:16 -0700 |
|---|---|---|
| committer | eschrock <none@none> | 2006-05-30 15:47:16 -0700 |
| commit | 99653d4ee642c6528e88224f12409a5f23060994 (patch) | |
| tree | 5cbcc540b8ed86b6a008f1084f9ca031368d926f /usr/src/cmd/zinject | |
| parent | 354a1801a85aa6b61ff4d5e290ab708ba57e56a3 (diff) | |
| download | illumos-joyent-99653d4ee642c6528e88224f12409a5f23060994.tar.gz | |
PSARC 2006/223 ZFS Hot Spares
PSARC 2006/303 ZFS Clone Promotion
6276916 support for "clone swap"
6288488 du reports misleading size on RAID-Z
6393490 libzfs should be a real library
6397148 fbufs debug code should be removed from buf_hash_insert()
6405966 Hot Spare support in ZFS
6409302 passing a non-root vdev via zpool_create() panics system
6415739 assertion failed: !(zio->io_flags & 0x00040)
6416759 ::dbufs does not find bonus buffers anymore
6417978 double parity RAID-Z a.k.a. RAID6
6424554 full block re-writes need not read data in
6425111 detaching an offline device can result in import confusion
Diffstat (limited to 'usr/src/cmd/zinject')
| -rw-r--r-- | usr/src/cmd/zinject/Makefile.com | 2 | ||||
| -rw-r--r-- | usr/src/cmd/zinject/translate.c | 20 | ||||
| -rw-r--r-- | usr/src/cmd/zinject/zinject.c | 13 | ||||
| -rw-r--r-- | usr/src/cmd/zinject/zinject.h | 2 |
4 files changed, 28 insertions, 9 deletions
diff --git a/usr/src/cmd/zinject/Makefile.com b/usr/src/cmd/zinject/Makefile.com index 14651a366c..c1ac4ac922 100644 --- a/usr/src/cmd/zinject/Makefile.com +++ b/usr/src/cmd/zinject/Makefile.com @@ -34,7 +34,7 @@ include ../../Makefile.cmd INCS += -I../../../lib/libzpool/common INCS += -I../../../uts/common/fs/zfs -LDLIBS += -lzpool -lzfs +LDLIBS += -lzpool -lzfs -lnvpair C99MODE= -xc99=%all C99LMODE= -Xc99=%all diff --git a/usr/src/cmd/zinject/translate.c b/usr/src/cmd/zinject/translate.c index 882b230930..b4f6693aa1 100644 --- a/usr/src/cmd/zinject/translate.c +++ b/usr/src/cmd/zinject/translate.c @@ -436,22 +436,28 @@ translate_device(const char *pool, const char *device, zinject_record_t *record) { char *end; zpool_handle_t *zhp; + nvlist_t *tgt; + boolean_t isspare; /* * Given a device name or GUID, create an appropriate injection record * with zi_guid set. */ - if ((zhp = zpool_open(pool)) == NULL) + if ((zhp = zpool_open(g_zfs, pool)) == NULL) return (-1); record->zi_guid = strtoull(device, &end, 16); - if (record->zi_guid == 0 || *end != '\0') - record->zi_guid = zpool_vdev_to_guid(zhp, device); + if (record->zi_guid == 0 || *end != '\0') { + tgt = zpool_find_vdev(zhp, device, &isspare); - if (record->zi_guid == 0) { - (void) fprintf(stderr, "cannot find device '%s' in pool '%s'\n", - device, pool); - return (-1); + if (tgt == NULL) { + (void) fprintf(stderr, "cannot find device '%s' in " + "pool '%s'\n", device, pool); + return (-1); + } + + verify(nvlist_lookup_uint64(tgt, ZPOOL_CONFIG_GUID, + &record->zi_guid) == 0); } return (0); diff --git a/usr/src/cmd/zinject/zinject.c b/usr/src/cmd/zinject/zinject.c index b584fb0de5..02fc6a16ef 100644 --- a/usr/src/cmd/zinject/zinject.c +++ b/usr/src/cmd/zinject/zinject.c @@ -151,6 +151,7 @@ #include "zinject.h" +libzfs_handle_t *g_zfs; int zfs_fd; #define ECKSUM EBADE @@ -479,6 +480,14 @@ main(int argc, char **argv) int ret; int flags = 0; + if ((g_zfs = libzfs_init()) == NULL) { + (void) fprintf(stderr, "internal error: failed to " + "initialize ZFS library\n"); + return (1); + } + + libzfs_print_on_error(g_zfs, B_TRUE); + if ((zfs_fd = open(ZFS_DEV, O_RDWR)) < 0) { (void) fprintf(stderr, "failed to open ZFS device\n"); return (1); @@ -721,7 +730,7 @@ main(int argc, char **argv) * time we access the pool. */ if (dataset[0] != '\0' && domount) { - if ((zhp = zfs_open(dataset, ZFS_TYPE_ANY)) == NULL) + if ((zhp = zfs_open(g_zfs, dataset, ZFS_TYPE_ANY)) == NULL) return (1); if (zfs_unmount(zhp, NULL, 0) != 0) @@ -735,5 +744,7 @@ main(int argc, char **argv) if (dataset[0] != '\0' && domount) ret = (zfs_mount(zhp, NULL, 0) != 0); + libzfs_fini(g_zfs); + return (ret); } diff --git a/usr/src/cmd/zinject/zinject.h b/usr/src/cmd/zinject/zinject.h index bdbc2454c4..8086c4bc80 100644 --- a/usr/src/cmd/zinject/zinject.h +++ b/usr/src/cmd/zinject/zinject.h @@ -57,6 +57,8 @@ int translate_device(const char *pool, const char *device, zinject_record_t *record); void usage(void); +extern libzfs_handle_t *g_zfs; + #ifdef __cplusplus } #endif |
