diff options
author | Matthew Macy <[email protected]> | 2019-10-28 09:53:39 -0700 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2019-10-28 09:53:39 -0700 |
commit | d46f0deb035bd26840dc6284fc6e1bb392097c92 (patch) | |
tree | 35cb36d78d2e4b67a14c43a30c739453ea37888b | |
parent | 4a22ba5be0aab1480aeac4581025ce6d7ce4b4a1 (diff) |
Add wrapper for Linux BLKFLSBUF ioctl
FreeBSD has no analog. Buffered block devices were removed a decade
plus ago.
Reviewed-by: Igor Kozhukhov <[email protected]>
Reviewed-by: Jorgen Lundman <[email protected]>
Reviewed-by: Brian Behlendorf <[email protected]>
Signed-off-by: Matt Macy <[email protected]>
Closes #9508
-rw-r--r-- | cmd/zdb/zdb.c | 2 | ||||
-rw-r--r-- | cmd/zpool/zpool_main.c | 2 | ||||
-rw-r--r-- | include/libzutil.h | 1 | ||||
-rw-r--r-- | lib/libzutil/os/linux/zutil_import_os.c | 6 |
4 files changed, 9 insertions, 2 deletions
diff --git a/cmd/zdb/zdb.c b/cmd/zdb/zdb.c index dd8e652d9..7c3ef3ef4 100644 --- a/cmd/zdb/zdb.c +++ b/cmd/zdb/zdb.c @@ -3444,7 +3444,7 @@ dump_label(const char *dev) exit(1); } - if (S_ISBLK(statbuf.st_mode) && ioctl(fd, BLKFLSBUF) != 0) + if (S_ISBLK(statbuf.st_mode) && zfs_dev_flush(fd) != 0) (void) printf("failed to invalidate cache '%s' : %s\n", path, strerror(errno)); diff --git a/cmd/zpool/zpool_main.c b/cmd/zpool/zpool_main.c index 6071babfd..0ac8c2a5e 100644 --- a/cmd/zpool/zpool_main.c +++ b/cmd/zpool/zpool_main.c @@ -1178,7 +1178,7 @@ zpool_do_labelclear(int argc, char **argv) * fatal when the device does not support BLKFLSBUF as would be the * case for a file vdev. */ - if ((ioctl(fd, BLKFLSBUF) != 0) && (errno != ENOTTY)) + if ((zfs_dev_flush(fd) != 0) && (errno != ENOTTY)) (void) fprintf(stderr, gettext("failed to invalidate " "cache for %s: %s\n"), vdev, strerror(errno)); diff --git a/include/libzutil.h b/include/libzutil.h index 4a8df0132..e453e4feb 100644 --- a/include/libzutil.h +++ b/include/libzutil.h @@ -103,6 +103,7 @@ extern int zfs_strcmp_pathname(const char *, const char *, int); extern boolean_t zfs_dev_is_dm(const char *); extern boolean_t zfs_dev_is_whole_disk(const char *); +extern int zfs_dev_flush(int); extern char *zfs_get_underlying_path(const char *); extern char *zfs_get_enclosure_sysfs_path(const char *); diff --git a/lib/libzutil/os/linux/zutil_import_os.c b/lib/libzutil/os/linux/zutil_import_os.c index e51004edc..a4bf01749 100644 --- a/lib/libzutil/os/linux/zutil_import_os.c +++ b/lib/libzutil/os/linux/zutil_import_os.c @@ -92,6 +92,12 @@ is_watchdog_dev(char *dev) return (B_FALSE); } +int +zfs_dev_flush(int fd) +{ + return (ioctl(fd, BLKFLSBUF)); +} + void zpool_open_func(void *arg) { |