]> granicus.if.org Git - zfs/commitdiff
Move zfs_onexit_fd_hold to platform code
authorMatthew Macy <mmacy@freebsd.org>
Mon, 14 Oct 2019 02:19:39 +0000 (19:19 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Mon, 14 Oct 2019 02:19:39 +0000 (19:19 -0700)
FreeBSD has a very different implementation.

Reviewed-by: Ryan Moeller <ryan@ixsystems.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Matt Macy <mmacy@FreeBSD.org>
Closes #9442

module/os/linux/zfs/Makefile.in
module/os/linux/zfs/zfs_onexit_os.c [new file with mode: 0644]
module/zfs/zfs_onexit.c

index c7ff191db19fdd19032ab1047bd158fe07702c34..ade6a20e9be02fb8204604bedf7d9188e44bd09f 100644 (file)
@@ -24,6 +24,7 @@ $(MODULE)-objs += ../os/linux/zfs/zfs_ctldir.o
 $(MODULE)-objs += ../os/linux/zfs/zfs_debug.o
 $(MODULE)-objs += ../os/linux/zfs/zfs_dir.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_onexit_os.c b/module/os/linux/zfs/zfs_onexit_os.c
new file mode 100644 (file)
index 0000000..0c33de7
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * 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)
+{
+       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);
+       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)
+{
+       releasef(fd);
+}
index 31f77ce81b37799ac3647f864db23f17f43d4581..9f1f6e4e0c100b3b0c7f70a2e7cdbc7aaab7655c 100644 (file)
@@ -111,39 +111,6 @@ zfs_onexit_minor_to_state(minor_t minor, zfs_onexit_t **zo)
        return (0);
 }
 
-/*
- * 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)
-{
-       file_t *fp;
-       zfs_onexit_t *zo;
-       int error;
-
-       fp = getf(fd);
-       if (fp == NULL)
-               return (SET_ERROR(EBADF));
-
-       error = zfsdev_getminor(fp->f_file, minorp);
-       if (error == 0)
-               error = zfs_onexit_minor_to_state(*minorp, &zo);
-
-       if (error)
-               zfs_onexit_fd_rele(fd);
-
-       return (error);
-}
-
-void
-zfs_onexit_fd_rele(int fd)
-{
-       releasef(fd);
-}
-
 /*
  * Add a callback to be invoked when the calling process exits.
  */