diff options
author | Matthew Macy <[email protected]> | 2020-02-28 14:50:32 -0800 |
---|---|---|
committer | GitHub <[email protected]> | 2020-02-28 14:50:32 -0800 |
commit | ae9f92f6f31c81f4d1aa4602f812f912b4392e7c (patch) | |
tree | 1d9c28079e96eb6746a53140d7c2c02e5f945b8c /module/os | |
parent | 9cdf7b1f6b00cdd0a31d07e3fbc679d0e9eff247 (diff) |
Re-share zfsdev_getminor and zfs_onexit_fd_hold
By adding a zfs_file_private accessor to the common
interfaces and some extensions to FreeBSD platform
code it is now possible to share the implementations
for the aforementioned functions.
Reviewed-by: Brian Behlendorf <[email protected]>
Signed-off-by: Matt Macy <[email protected]>
Closes #10073
Diffstat (limited to 'module/os')
-rw-r--r-- | module/os/linux/zfs/Makefile.in | 1 | ||||
-rw-r--r-- | module/os/linux/zfs/zfs_file_os.c | 13 | ||||
-rw-r--r-- | module/os/linux/zfs/zfs_ioctl_os.c | 35 | ||||
-rw-r--r-- | module/os/linux/zfs/zfs_onexit_os.c | 64 |
4 files changed, 13 insertions, 100 deletions
diff --git a/module/os/linux/zfs/Makefile.in b/module/os/linux/zfs/Makefile.in index 9f2dc699b..8c11a1ee6 100644 --- a/module/os/linux/zfs/Makefile.in +++ b/module/os/linux/zfs/Makefile.in @@ -25,7 +25,6 @@ $(MODULE)-objs += ../os/linux/zfs/zfs_debug.o $(MODULE)-objs += ../os/linux/zfs/zfs_dir.o $(MODULE)-objs += ../os/linux/zfs/zfs_file_os.o $(MODULE)-objs += ../os/linux/zfs/zfs_ioctl_os.o -$(MODULE)-objs += ../os/linux/zfs/zfs_onexit_os.o $(MODULE)-objs += ../os/linux/zfs/zfs_sysfs.o $(MODULE)-objs += ../os/linux/zfs/zfs_vfsops.o $(MODULE)-objs += ../os/linux/zfs/zfs_vnops.o diff --git a/module/os/linux/zfs/zfs_file_os.c b/module/os/linux/zfs/zfs_file_os.c index 1c9b84d66..99c6ffc95 100644 --- a/module/os/linux/zfs/zfs_file_os.c +++ b/module/os/linux/zfs/zfs_file_os.c @@ -374,6 +374,19 @@ zfs_file_off(zfs_file_t *fp) } /* + * Request file pointer private data + * + * fp - pointer to file + * + * Returns pointer to file private data. + */ +void * +zfs_file_private(zfs_file_t *fp) +{ + return (fp->private_data); +} + +/* * unlink file * * path - fully qualified file path diff --git a/module/os/linux/zfs/zfs_ioctl_os.c b/module/os/linux/zfs/zfs_ioctl_os.c index f31fd7ac9..acaead68f 100644 --- a/module/os/linux/zfs/zfs_ioctl_os.c +++ b/module/os/linux/zfs/zfs_ioctl_os.c @@ -201,41 +201,6 @@ out: } -int -zfsdev_getminor(int fd, minor_t *minorp) -{ - zfsdev_state_t *zs, *fpd; - struct file *fp; - int rc; - - ASSERT(!MUTEX_HELD(&zfsdev_state_lock)); - - if ((rc = zfs_file_get(fd, &fp))) - return (rc); - - fpd = fp->private_data; - if (fpd == NULL) - return (SET_ERROR(EBADF)); - - mutex_enter(&zfsdev_state_lock); - - for (zs = zfsdev_state_list; zs != NULL; zs = zs->zs_next) { - - if (zs->zs_minor == -1) - continue; - - if (fpd == zs) { - *minorp = fpd->zs_minor; - mutex_exit(&zfsdev_state_lock); - return (0); - } - } - - mutex_exit(&zfsdev_state_lock); - - return (SET_ERROR(EBADF)); -} - void zfs_ioctl_init_os(void) { diff --git a/module/os/linux/zfs/zfs_onexit_os.c b/module/os/linux/zfs/zfs_onexit_os.c deleted file mode 100644 index 879ea28ec..000000000 --- a/module/os/linux/zfs/zfs_onexit_os.c +++ /dev/null @@ -1,64 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License (the "License"). - * You may not use this file except in compliance with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2013 by Delphix. All rights reserved. - */ - -#include <sys/types.h> -#include <sys/param.h> -#include <sys/errno.h> -#include <sys/kmem.h> -#include <sys/sunddi.h> -#include <sys/zfs_ioctl.h> -#include <sys/zfs_onexit.h> - -/* - * Consumers might need to operate by minor number instead of fd, since - * they might be running in another thread (e.g. txg_sync_thread). Callers - * of this function must call zfs_onexit_fd_rele() when they're finished - * using the minor number. - */ -int -zfs_onexit_fd_hold(int fd, minor_t *minorp) -{ - zfs_onexit_t *zo = NULL; - int error; - - error = zfsdev_getminor(fd, minorp); - if (error) { - zfs_onexit_fd_rele(fd); - return (error); - } - - zo = zfsdev_get_state(*minorp, ZST_ONEXIT); - if (zo == NULL) { - zfs_onexit_fd_rele(fd); - return (SET_ERROR(EBADF)); - } - return (0); -} - -void -zfs_onexit_fd_rele(int fd) -{ - zfs_file_put(fd); -} |