From 08f530c6996a41c1050a11fc5b02b31a6b68fe45 Mon Sep 17 00:00:00 2001 From: Matthew Macy Date: Wed, 16 Oct 2019 18:43:52 -0700 Subject: [PATCH] Make zfsdev_getminor signature cross platform Only pass the file descriptor to make zfsdev_get_miror() portable. Reviewed-by: George Melikov Reviewed-by: Brian Behlendorf Signed-off-by: Matt Macy Closes #9466 --- include/sys/zfs_ioctl.h | 2 +- module/os/linux/zfs/zfs_ioctl_os.c | 10 +++++++--- module/os/linux/zfs/zfs_onexit_os.c | 7 +------ module/zfs/fm.c | 7 +------ 4 files changed, 10 insertions(+), 16 deletions(-) diff --git a/include/sys/zfs_ioctl.h b/include/sys/zfs_ioctl.h index daa1560f34..48788477a4 100644 --- a/include/sys/zfs_ioctl.h +++ b/include/sys/zfs_ioctl.h @@ -546,7 +546,7 @@ typedef struct zfsdev_state { } zfsdev_state_t; extern void *zfsdev_get_state(minor_t minor, enum zfsdev_state_type which); -extern int zfsdev_getminor(struct file *filp, minor_t *minorp); +extern int zfsdev_getminor(int fd, minor_t *minorp); extern minor_t zfsdev_minor_alloc(void); extern uint_t zfs_fsyncer_key; diff --git a/module/os/linux/zfs/zfs_ioctl_os.c b/module/os/linux/zfs/zfs_ioctl_os.c index 9b562cab3c..4e672cca2b 100644 --- a/module/os/linux/zfs/zfs_ioctl_os.c +++ b/module/os/linux/zfs/zfs_ioctl_os.c @@ -175,14 +175,18 @@ zfsdev_ioctl(struct file *filp, unsigned cmd, unsigned long arg) } int -zfsdev_getminor(struct file *filp, minor_t *minorp) +zfsdev_getminor(int fd, minor_t *minorp) { zfsdev_state_t *zs, *fpd; + file_t *fp; - ASSERT(filp != NULL); ASSERT(!MUTEX_HELD(&zfsdev_state_lock)); + fp = getf(fd); - fpd = filp->private_data; + if (fp == NULL) + return (SET_ERROR(EBADF)); + + fpd = fp->f_file->private_data; if (fpd == NULL) return (SET_ERROR(EBADF)); diff --git a/module/os/linux/zfs/zfs_onexit_os.c b/module/os/linux/zfs/zfs_onexit_os.c index 0c33de7fe9..95dbe8dbec 100644 --- a/module/os/linux/zfs/zfs_onexit_os.c +++ b/module/os/linux/zfs/zfs_onexit_os.c @@ -40,15 +40,10 @@ int zfs_onexit_fd_hold(int fd, minor_t *minorp) { - file_t *fp; zfs_onexit_t *zo = NULL; int error; - fp = getf(fd); - if (fp == NULL) - return (SET_ERROR(EBADF)); - - error = zfsdev_getminor(fp->f_file, minorp); + error = zfsdev_getminor(fd, minorp); if (error) { zfs_onexit_fd_rele(fd); return (error); diff --git a/module/zfs/fm.c b/module/zfs/fm.c index 98a844820b..722855492d 100644 --- a/module/zfs/fm.c +++ b/module/zfs/fm.c @@ -582,14 +582,9 @@ zfs_zevent_minor_to_state(minor_t minor, zfs_zevent_t **ze) int zfs_zevent_fd_hold(int fd, minor_t *minorp, zfs_zevent_t **ze) { - file_t *fp; int error; - fp = getf(fd); - if (fp == NULL) - return (SET_ERROR(EBADF)); - - error = zfsdev_getminor(fp->f_file, minorp); + error = zfsdev_getminor(fd, minorp); if (error == 0) error = zfs_zevent_minor_to_state(*minorp, ze);