mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-08-09 06:14:34 +02:00
When a filesystem is exported to NFS clients, NFSv4 state (opens, locks, delegations, layouts) holds references that prevent the underlying filesystem from being unmounted. NFSD_CMD_UNLOCK_FILESYSTEM addresses this at superblock granularity, but administrators unexporting a single path on a shared filesystem (e.g., one of several exports on the same device) need finer control. Add NFSD_CMD_UNLOCK_EXPORT, which revokes NFSv4 state acquired through exports of a specific path. Matching is by path identity (dentry + vfsmount) via the sc_export field on each nfs4_stid, so multiple svc_export objects for the same path -- one per auth_domain -- are handled correctly without requiring the caller to name a specific client. The command takes a single "path" attribute. Userspace (exportfs -u) sends this after removing the last client for a given path, enabling the underlying filesystem to be unmounted. When multiple clients share an export path, individual unexports do not trigger state revocation; only the final one does. Reviewed-by: Jeff Layton <jlayton@kernel.org> Tested-by: Dai Ngo <dai.ngo@oracle.com> Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
256 lines
5.4 KiB
C
256 lines
5.4 KiB
C
/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) */
|
|
/* Do not edit directly, auto-generated from: */
|
|
/* Documentation/netlink/specs/nfsd.yaml */
|
|
/* YNL-GEN uapi header */
|
|
/* To regenerate run: tools/net/ynl/ynl-regen.sh */
|
|
|
|
#ifndef _UAPI_LINUX_NFSD_NETLINK_H
|
|
#define _UAPI_LINUX_NFSD_NETLINK_H
|
|
|
|
#define NFSD_FAMILY_NAME "nfsd"
|
|
#define NFSD_FAMILY_VERSION 1
|
|
|
|
enum nfsd_cache_type {
|
|
NFSD_CACHE_TYPE_SVC_EXPORT = 1,
|
|
NFSD_CACHE_TYPE_EXPKEY = 2,
|
|
};
|
|
|
|
/*
|
|
* These flags are ordered to match the NFSEXP_* flags in
|
|
* include/linux/nfsd/export.h
|
|
*/
|
|
enum nfsd_export_flags {
|
|
NFSD_EXPORT_FLAGS_READONLY = 1,
|
|
NFSD_EXPORT_FLAGS_INSECURE_PORT = 2,
|
|
NFSD_EXPORT_FLAGS_ROOTSQUASH = 4,
|
|
NFSD_EXPORT_FLAGS_ALLSQUASH = 8,
|
|
NFSD_EXPORT_FLAGS_ASYNC = 16,
|
|
NFSD_EXPORT_FLAGS_GATHERED_WRITES = 32,
|
|
NFSD_EXPORT_FLAGS_NOREADDIRPLUS = 64,
|
|
NFSD_EXPORT_FLAGS_SECURITY_LABEL = 128,
|
|
NFSD_EXPORT_FLAGS_SIGN_FH = 256,
|
|
NFSD_EXPORT_FLAGS_NOHIDE = 512,
|
|
NFSD_EXPORT_FLAGS_NOSUBTREECHECK = 1024,
|
|
NFSD_EXPORT_FLAGS_NOAUTHNLM = 2048,
|
|
NFSD_EXPORT_FLAGS_MSNFS = 4096,
|
|
NFSD_EXPORT_FLAGS_FSID = 8192,
|
|
NFSD_EXPORT_FLAGS_CROSSMOUNT = 16384,
|
|
NFSD_EXPORT_FLAGS_NOACL = 32768,
|
|
NFSD_EXPORT_FLAGS_V4ROOT = 65536,
|
|
NFSD_EXPORT_FLAGS_PNFS = 131072,
|
|
};
|
|
|
|
/*
|
|
* These flags are ordered to match the NFSEXP_XPRTSEC_* flags in
|
|
* include/linux/nfsd/export.h
|
|
*/
|
|
enum nfsd_xprtsec_mode {
|
|
NFSD_XPRTSEC_MODE_NONE = 1,
|
|
NFSD_XPRTSEC_MODE_TLS = 2,
|
|
NFSD_XPRTSEC_MODE_MTLS = 4,
|
|
};
|
|
|
|
enum {
|
|
NFSD_A_CACHE_NOTIFY_CACHE_TYPE = 1,
|
|
|
|
__NFSD_A_CACHE_NOTIFY_MAX,
|
|
NFSD_A_CACHE_NOTIFY_MAX = (__NFSD_A_CACHE_NOTIFY_MAX - 1)
|
|
};
|
|
|
|
enum {
|
|
NFSD_A_RPC_STATUS_XID = 1,
|
|
NFSD_A_RPC_STATUS_FLAGS,
|
|
NFSD_A_RPC_STATUS_PROG,
|
|
NFSD_A_RPC_STATUS_VERSION,
|
|
NFSD_A_RPC_STATUS_PROC,
|
|
NFSD_A_RPC_STATUS_SERVICE_TIME,
|
|
NFSD_A_RPC_STATUS_PAD,
|
|
NFSD_A_RPC_STATUS_SADDR4,
|
|
NFSD_A_RPC_STATUS_DADDR4,
|
|
NFSD_A_RPC_STATUS_SADDR6,
|
|
NFSD_A_RPC_STATUS_DADDR6,
|
|
NFSD_A_RPC_STATUS_SPORT,
|
|
NFSD_A_RPC_STATUS_DPORT,
|
|
NFSD_A_RPC_STATUS_COMPOUND_OPS,
|
|
|
|
__NFSD_A_RPC_STATUS_MAX,
|
|
NFSD_A_RPC_STATUS_MAX = (__NFSD_A_RPC_STATUS_MAX - 1)
|
|
};
|
|
|
|
enum {
|
|
NFSD_A_SERVER_THREADS = 1,
|
|
NFSD_A_SERVER_GRACETIME,
|
|
NFSD_A_SERVER_LEASETIME,
|
|
NFSD_A_SERVER_SCOPE,
|
|
NFSD_A_SERVER_MIN_THREADS,
|
|
NFSD_A_SERVER_FH_KEY,
|
|
|
|
__NFSD_A_SERVER_MAX,
|
|
NFSD_A_SERVER_MAX = (__NFSD_A_SERVER_MAX - 1)
|
|
};
|
|
|
|
enum {
|
|
NFSD_A_VERSION_MAJOR = 1,
|
|
NFSD_A_VERSION_MINOR,
|
|
NFSD_A_VERSION_ENABLED,
|
|
|
|
__NFSD_A_VERSION_MAX,
|
|
NFSD_A_VERSION_MAX = (__NFSD_A_VERSION_MAX - 1)
|
|
};
|
|
|
|
enum {
|
|
NFSD_A_SERVER_PROTO_VERSION = 1,
|
|
|
|
__NFSD_A_SERVER_PROTO_MAX,
|
|
NFSD_A_SERVER_PROTO_MAX = (__NFSD_A_SERVER_PROTO_MAX - 1)
|
|
};
|
|
|
|
enum {
|
|
NFSD_A_SOCK_ADDR = 1,
|
|
NFSD_A_SOCK_TRANSPORT_NAME,
|
|
|
|
__NFSD_A_SOCK_MAX,
|
|
NFSD_A_SOCK_MAX = (__NFSD_A_SOCK_MAX - 1)
|
|
};
|
|
|
|
enum {
|
|
NFSD_A_SERVER_SOCK_ADDR = 1,
|
|
|
|
__NFSD_A_SERVER_SOCK_MAX,
|
|
NFSD_A_SERVER_SOCK_MAX = (__NFSD_A_SERVER_SOCK_MAX - 1)
|
|
};
|
|
|
|
enum {
|
|
NFSD_A_POOL_MODE_MODE = 1,
|
|
NFSD_A_POOL_MODE_NPOOLS,
|
|
|
|
__NFSD_A_POOL_MODE_MAX,
|
|
NFSD_A_POOL_MODE_MAX = (__NFSD_A_POOL_MODE_MAX - 1)
|
|
};
|
|
|
|
enum {
|
|
NFSD_A_FSLOCATION_HOST = 1,
|
|
NFSD_A_FSLOCATION_PATH,
|
|
|
|
__NFSD_A_FSLOCATION_MAX,
|
|
NFSD_A_FSLOCATION_MAX = (__NFSD_A_FSLOCATION_MAX - 1)
|
|
};
|
|
|
|
enum {
|
|
NFSD_A_FSLOCATIONS_LOCATION = 1,
|
|
|
|
__NFSD_A_FSLOCATIONS_MAX,
|
|
NFSD_A_FSLOCATIONS_MAX = (__NFSD_A_FSLOCATIONS_MAX - 1)
|
|
};
|
|
|
|
enum {
|
|
NFSD_A_AUTH_FLAVOR_PSEUDOFLAVOR = 1,
|
|
NFSD_A_AUTH_FLAVOR_FLAGS,
|
|
|
|
__NFSD_A_AUTH_FLAVOR_MAX,
|
|
NFSD_A_AUTH_FLAVOR_MAX = (__NFSD_A_AUTH_FLAVOR_MAX - 1)
|
|
};
|
|
|
|
enum {
|
|
NFSD_A_SVC_EXPORT_SEQNO = 1,
|
|
NFSD_A_SVC_EXPORT_CLIENT,
|
|
NFSD_A_SVC_EXPORT_PATH,
|
|
NFSD_A_SVC_EXPORT_NEGATIVE,
|
|
NFSD_A_SVC_EXPORT_EXPIRY,
|
|
NFSD_A_SVC_EXPORT_ANON_UID,
|
|
NFSD_A_SVC_EXPORT_ANON_GID,
|
|
NFSD_A_SVC_EXPORT_FSLOCATIONS,
|
|
NFSD_A_SVC_EXPORT_UUID,
|
|
NFSD_A_SVC_EXPORT_SECINFO,
|
|
NFSD_A_SVC_EXPORT_XPRTSEC,
|
|
NFSD_A_SVC_EXPORT_FLAGS,
|
|
NFSD_A_SVC_EXPORT_FSID,
|
|
|
|
__NFSD_A_SVC_EXPORT_MAX,
|
|
NFSD_A_SVC_EXPORT_MAX = (__NFSD_A_SVC_EXPORT_MAX - 1)
|
|
};
|
|
|
|
enum {
|
|
NFSD_A_SVC_EXPORT_REQS_REQUESTS = 1,
|
|
|
|
__NFSD_A_SVC_EXPORT_REQS_MAX,
|
|
NFSD_A_SVC_EXPORT_REQS_MAX = (__NFSD_A_SVC_EXPORT_REQS_MAX - 1)
|
|
};
|
|
|
|
enum {
|
|
NFSD_A_EXPKEY_SEQNO = 1,
|
|
NFSD_A_EXPKEY_CLIENT,
|
|
NFSD_A_EXPKEY_FSIDTYPE,
|
|
NFSD_A_EXPKEY_FSID,
|
|
NFSD_A_EXPKEY_NEGATIVE,
|
|
NFSD_A_EXPKEY_EXPIRY,
|
|
NFSD_A_EXPKEY_PATH,
|
|
|
|
__NFSD_A_EXPKEY_MAX,
|
|
NFSD_A_EXPKEY_MAX = (__NFSD_A_EXPKEY_MAX - 1)
|
|
};
|
|
|
|
enum {
|
|
NFSD_A_EXPKEY_REQS_REQUESTS = 1,
|
|
|
|
__NFSD_A_EXPKEY_REQS_MAX,
|
|
NFSD_A_EXPKEY_REQS_MAX = (__NFSD_A_EXPKEY_REQS_MAX - 1)
|
|
};
|
|
|
|
enum {
|
|
NFSD_A_CACHE_FLUSH_MASK = 1,
|
|
|
|
__NFSD_A_CACHE_FLUSH_MAX,
|
|
NFSD_A_CACHE_FLUSH_MAX = (__NFSD_A_CACHE_FLUSH_MAX - 1)
|
|
};
|
|
|
|
enum {
|
|
NFSD_A_UNLOCK_IP_ADDRESS = 1,
|
|
|
|
__NFSD_A_UNLOCK_IP_MAX,
|
|
NFSD_A_UNLOCK_IP_MAX = (__NFSD_A_UNLOCK_IP_MAX - 1)
|
|
};
|
|
|
|
enum {
|
|
NFSD_A_UNLOCK_FILESYSTEM_PATH = 1,
|
|
|
|
__NFSD_A_UNLOCK_FILESYSTEM_MAX,
|
|
NFSD_A_UNLOCK_FILESYSTEM_MAX = (__NFSD_A_UNLOCK_FILESYSTEM_MAX - 1)
|
|
};
|
|
|
|
enum {
|
|
NFSD_A_UNLOCK_EXPORT_PATH = 1,
|
|
|
|
__NFSD_A_UNLOCK_EXPORT_MAX,
|
|
NFSD_A_UNLOCK_EXPORT_MAX = (__NFSD_A_UNLOCK_EXPORT_MAX - 1)
|
|
};
|
|
|
|
enum {
|
|
NFSD_CMD_RPC_STATUS_GET = 1,
|
|
NFSD_CMD_THREADS_SET,
|
|
NFSD_CMD_THREADS_GET,
|
|
NFSD_CMD_VERSION_SET,
|
|
NFSD_CMD_VERSION_GET,
|
|
NFSD_CMD_LISTENER_SET,
|
|
NFSD_CMD_LISTENER_GET,
|
|
NFSD_CMD_POOL_MODE_SET,
|
|
NFSD_CMD_POOL_MODE_GET,
|
|
NFSD_CMD_CACHE_NOTIFY,
|
|
NFSD_CMD_SVC_EXPORT_GET_REQS,
|
|
NFSD_CMD_SVC_EXPORT_SET_REQS,
|
|
NFSD_CMD_EXPKEY_GET_REQS,
|
|
NFSD_CMD_EXPKEY_SET_REQS,
|
|
NFSD_CMD_CACHE_FLUSH,
|
|
NFSD_CMD_UNLOCK_IP,
|
|
NFSD_CMD_UNLOCK_FILESYSTEM,
|
|
NFSD_CMD_UNLOCK_EXPORT,
|
|
|
|
__NFSD_CMD_MAX,
|
|
NFSD_CMD_MAX = (__NFSD_CMD_MAX - 1)
|
|
};
|
|
|
|
#define NFSD_MCGRP_NONE "none"
|
|
#define NFSD_MCGRP_EXPORTD "exportd"
|
|
|
|
#endif /* _UAPI_LINUX_NFSD_NETLINK_H */
|