aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorMark Johnston <[email protected]>2022-04-07 17:11:00 -0400
committerBrian Behlendorf <[email protected]>2022-04-13 09:42:51 -0700
commite9084d071226b2b8b5c44d9bd781b9632dc68227 (patch)
tree13e92d69443674633a8ffa81bc5fdde09648d591 /include
parent35d81a75a8c13e011e19fd12cf553d9c5849386e (diff)
FreeBSD: Parameterize ZFS_ENTER/ZFS_VERIFY_VP with an error code
For legacy reasons, a couple of VOPs have to return error numbers that don't come from the usual errno namespace. To handle the cases where ZFS_ENTER or ZFS_VERIFY_ZP fail, we need to be able to override the default error return value of EIO. Extend the macros to permit this. Reviewed-by: Brian Behlendorf <[email protected]> Reviewed-by: Ryan Moeller <[email protected]> Signed-off-by: Mark Johnston <[email protected]> Closes #13311
Diffstat (limited to 'include')
-rw-r--r--include/os/freebsd/zfs/sys/zfs_znode_impl.h32
1 files changed, 18 insertions, 14 deletions
diff --git a/include/os/freebsd/zfs/sys/zfs_znode_impl.h b/include/os/freebsd/zfs/sys/zfs_znode_impl.h
index 096c9e16d..5d64c3fcc 100644
--- a/include/os/freebsd/zfs/sys/zfs_znode_impl.h
+++ b/include/os/freebsd/zfs/sys/zfs_znode_impl.h
@@ -121,25 +121,29 @@ typedef struct zfs_soft_state {
#define zn_rlimit_fsize(zp, uio) \
vn_rlimit_fsize(ZTOV(zp), GET_UIO_STRUCT(uio), zfs_uio_td(uio))
+#define ZFS_ENTER_ERROR(zfsvfs, error) do { \
+ ZFS_TEARDOWN_ENTER_READ((zfsvfs), FTAG); \
+ if (__predict_false((zfsvfs)->z_unmounted)) { \
+ ZFS_TEARDOWN_EXIT_READ(zfsvfs, FTAG); \
+ return (error); \
+ } \
+} while (0)
+
/* Called on entry to each ZFS vnode and vfs operation */
-#define ZFS_ENTER(zfsvfs) \
- { \
- ZFS_TEARDOWN_ENTER_READ((zfsvfs), FTAG); \
- if (__predict_false((zfsvfs)->z_unmounted)) { \
- ZFS_TEARDOWN_EXIT_READ(zfsvfs, FTAG); \
- return (EIO); \
- } \
- }
+#define ZFS_ENTER(zfsvfs) ZFS_ENTER_ERROR(zfsvfs, EIO)
/* Must be called before exiting the vop */
-#define ZFS_EXIT(zfsvfs) ZFS_TEARDOWN_EXIT_READ(zfsvfs, FTAG)
+#define ZFS_EXIT(zfsvfs) ZFS_TEARDOWN_EXIT_READ(zfsvfs, FTAG)
+
+#define ZFS_VERIFY_ZP_ERROR(zp, error) do { \
+ if (__predict_false((zp)->z_sa_hdl == NULL)) { \
+ ZFS_EXIT((zp)->z_zfsvfs); \
+ return (error); \
+ } \
+} while (0)
/* Verifies the znode is valid */
-#define ZFS_VERIFY_ZP(zp) \
- if (__predict_false((zp)->z_sa_hdl == NULL)) { \
- ZFS_EXIT((zp)->z_zfsvfs); \
- return (EIO); \
- } \
+#define ZFS_VERIFY_ZP(zp) ZFS_VERIFY_ZP_ERROR(zp, EIO)
/*
* Macros for dealing with dmu_buf_hold