diff options
author | Giuseppe Di Natale <[email protected]> | 2017-04-12 15:49:31 -0700 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2017-04-13 09:13:51 -0700 |
commit | a167aa7cd45b045047a75c07e06f3697bed8440c (patch) | |
tree | d8d82d60b253ad0445dc6c1292368ef4b5a28d5c /cmd/zpool | |
parent | 00481e7dad1d5608ae244eb053517e2c36d9a6de (diff) |
Invalidate cache during a zpool labelclear
Be sure to invalidate a vdev's cache before performing
a zpool labelclear. There are cases where the cache is
stale because we did some operation that bypassed it,
and since we are doing an open with only O_RDWR, we
should invalidate it to be safe.
Reviewed-by: Brian Behlendorf <[email protected]>
Signed-off-by: Giuseppe Di Natale <[email protected]>
Closes #6009
Diffstat (limited to 'cmd/zpool')
-rw-r--r-- | cmd/zpool/zpool_main.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/cmd/zpool/zpool_main.c b/cmd/zpool/zpool_main.c index ebadccf19..cc6c18eed 100644 --- a/cmd/zpool/zpool_main.c +++ b/cmd/zpool/zpool_main.c @@ -865,6 +865,10 @@ zpool_do_labelclear(int argc, char **argv) return (1); } + if (ioctl(fd, BLKFLSBUF) != 0) + (void) fprintf(stderr, gettext("failed to invalidate " + "cache for %s: %s\n"), vdev, strerror(errno)); + if (zpool_read_label(fd, &config, NULL) != 0 || config == NULL) { (void) fprintf(stderr, gettext("failed to check state for %s\n"), vdev); |