mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-29 02:14:03 -04: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>
526 lines
10 KiB
YAML
526 lines
10 KiB
YAML
# SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)
|
|
---
|
|
name: nfsd
|
|
protocol: genetlink
|
|
uapi-header: linux/nfsd_netlink.h
|
|
|
|
doc: NFSD configuration over generic netlink.
|
|
|
|
definitions:
|
|
-
|
|
type: flags
|
|
name: cache-type
|
|
entries: [svc_export, expkey]
|
|
-
|
|
type: flags
|
|
name: export-flags
|
|
doc: These flags are ordered to match the NFSEXP_* flags in include/linux/nfsd/export.h
|
|
entries:
|
|
- readonly
|
|
- insecure-port
|
|
- rootsquash
|
|
- allsquash
|
|
- async
|
|
- gathered-writes
|
|
- noreaddirplus
|
|
- security-label
|
|
- sign-fh
|
|
- nohide
|
|
- nosubtreecheck
|
|
- noauthnlm
|
|
- msnfs
|
|
- fsid
|
|
- crossmount
|
|
- noacl
|
|
- v4root
|
|
- pnfs
|
|
-
|
|
type: flags
|
|
name: xprtsec-mode
|
|
doc: These flags are ordered to match the NFSEXP_XPRTSEC_* flags in include/linux/nfsd/export.h
|
|
entries:
|
|
- none
|
|
- tls
|
|
- mtls
|
|
|
|
attribute-sets:
|
|
-
|
|
name: cache-notify
|
|
attributes:
|
|
-
|
|
name: cache-type
|
|
type: u32
|
|
enum: cache-type
|
|
-
|
|
name: rpc-status
|
|
attributes:
|
|
-
|
|
name: xid
|
|
type: u32
|
|
byte-order: big-endian
|
|
-
|
|
name: flags
|
|
type: u32
|
|
-
|
|
name: prog
|
|
type: u32
|
|
-
|
|
name: version
|
|
type: u8
|
|
-
|
|
name: proc
|
|
type: u32
|
|
-
|
|
name: service-time
|
|
type: s64
|
|
-
|
|
name: pad
|
|
type: pad
|
|
-
|
|
name: saddr4
|
|
type: u32
|
|
byte-order: big-endian
|
|
display-hint: ipv4
|
|
-
|
|
name: daddr4
|
|
type: u32
|
|
byte-order: big-endian
|
|
display-hint: ipv4
|
|
-
|
|
name: saddr6
|
|
type: binary
|
|
display-hint: ipv6
|
|
-
|
|
name: daddr6
|
|
type: binary
|
|
display-hint: ipv6
|
|
-
|
|
name: sport
|
|
type: u16
|
|
byte-order: big-endian
|
|
-
|
|
name: dport
|
|
type: u16
|
|
byte-order: big-endian
|
|
-
|
|
name: compound-ops
|
|
type: u32
|
|
multi-attr: true
|
|
-
|
|
name: server
|
|
attributes:
|
|
-
|
|
name: threads
|
|
type: u32
|
|
multi-attr: true
|
|
-
|
|
name: gracetime
|
|
type: u32
|
|
-
|
|
name: leasetime
|
|
type: u32
|
|
-
|
|
name: scope
|
|
type: string
|
|
-
|
|
name: min-threads
|
|
type: u32
|
|
-
|
|
name: fh-key
|
|
type: binary
|
|
checks:
|
|
exact-len: 16
|
|
-
|
|
name: version
|
|
attributes:
|
|
-
|
|
name: major
|
|
type: u32
|
|
-
|
|
name: minor
|
|
type: u32
|
|
-
|
|
name: enabled
|
|
type: flag
|
|
-
|
|
name: server-proto
|
|
attributes:
|
|
-
|
|
name: version
|
|
type: nest
|
|
nested-attributes: version
|
|
multi-attr: true
|
|
-
|
|
name: sock
|
|
attributes:
|
|
-
|
|
name: addr
|
|
type: binary
|
|
-
|
|
name: transport-name
|
|
type: string
|
|
-
|
|
name: server-sock
|
|
attributes:
|
|
-
|
|
name: addr
|
|
type: nest
|
|
nested-attributes: sock
|
|
multi-attr: true
|
|
-
|
|
name: pool-mode
|
|
attributes:
|
|
-
|
|
name: mode
|
|
type: string
|
|
-
|
|
name: npools
|
|
type: u32
|
|
-
|
|
name: fslocation
|
|
attributes:
|
|
-
|
|
name: host
|
|
type: string
|
|
-
|
|
name: path
|
|
type: string
|
|
-
|
|
name: fslocations
|
|
attributes:
|
|
-
|
|
name: location
|
|
type: nest
|
|
nested-attributes: fslocation
|
|
multi-attr: true
|
|
-
|
|
name: auth-flavor
|
|
attributes:
|
|
-
|
|
name: pseudoflavor
|
|
type: u32
|
|
-
|
|
name: flags
|
|
type: u32
|
|
enum: export-flags
|
|
enum-as-flags: true
|
|
-
|
|
name: svc-export
|
|
attributes:
|
|
-
|
|
name: seqno
|
|
type: u64
|
|
-
|
|
name: client
|
|
type: string
|
|
-
|
|
name: path
|
|
type: string
|
|
-
|
|
name: negative
|
|
type: flag
|
|
-
|
|
name: expiry
|
|
type: u64
|
|
-
|
|
name: anon-uid
|
|
type: u32
|
|
-
|
|
name: anon-gid
|
|
type: u32
|
|
-
|
|
name: fslocations
|
|
type: nest
|
|
nested-attributes: fslocations
|
|
-
|
|
name: uuid
|
|
type: binary
|
|
-
|
|
name: secinfo
|
|
type: nest
|
|
nested-attributes: auth-flavor
|
|
multi-attr: true
|
|
-
|
|
name: xprtsec
|
|
type: u32
|
|
enum: xprtsec-mode
|
|
multi-attr: true
|
|
-
|
|
name: flags
|
|
type: u32
|
|
enum: export-flags
|
|
enum-as-flags: true
|
|
-
|
|
name: fsid
|
|
type: s32
|
|
-
|
|
name: svc-export-reqs
|
|
attributes:
|
|
-
|
|
name: requests
|
|
type: nest
|
|
nested-attributes: svc-export
|
|
multi-attr: true
|
|
-
|
|
name: expkey
|
|
attributes:
|
|
-
|
|
name: seqno
|
|
type: u64
|
|
-
|
|
name: client
|
|
type: string
|
|
-
|
|
name: fsidtype
|
|
type: u8
|
|
-
|
|
name: fsid
|
|
type: binary
|
|
-
|
|
name: negative
|
|
type: flag
|
|
-
|
|
name: expiry
|
|
type: u64
|
|
-
|
|
name: path
|
|
type: string
|
|
-
|
|
name: expkey-reqs
|
|
attributes:
|
|
-
|
|
name: requests
|
|
type: nest
|
|
nested-attributes: expkey
|
|
multi-attr: true
|
|
-
|
|
name: cache-flush
|
|
attributes:
|
|
-
|
|
name: mask
|
|
type: u32
|
|
enum: cache-type
|
|
enum-as-flags: true
|
|
-
|
|
name: unlock-ip
|
|
attributes:
|
|
-
|
|
name: address
|
|
type: binary
|
|
doc: struct sockaddr_in or struct sockaddr_in6.
|
|
checks:
|
|
min-len: 16
|
|
-
|
|
name: unlock-filesystem
|
|
attributes:
|
|
-
|
|
name: path
|
|
type: string
|
|
doc: Filesystem path whose state should be released.
|
|
-
|
|
name: unlock-export
|
|
attributes:
|
|
-
|
|
name: path
|
|
type: string
|
|
doc: >-
|
|
Export path whose NFSv4 state should be revoked.
|
|
All state (opens, locks, delegations, layouts) acquired
|
|
through any export of this path is revoked, regardless
|
|
of which client holds the state. Intended for use after
|
|
all clients have been unexported from a given path,
|
|
enabling the underlying filesystem to be unmounted.
|
|
|
|
operations:
|
|
list:
|
|
-
|
|
name: rpc-status-get
|
|
doc: dump pending nfsd rpc
|
|
attribute-set: rpc-status
|
|
dump:
|
|
reply:
|
|
attributes:
|
|
- xid
|
|
- flags
|
|
- prog
|
|
- version
|
|
- proc
|
|
- service-time
|
|
- saddr4
|
|
- daddr4
|
|
- saddr6
|
|
- daddr6
|
|
- sport
|
|
- dport
|
|
- compound-ops
|
|
-
|
|
name: threads-set
|
|
doc: set the maximum number of running threads
|
|
attribute-set: server
|
|
flags: [admin-perm]
|
|
do:
|
|
request:
|
|
attributes:
|
|
- threads
|
|
- gracetime
|
|
- leasetime
|
|
- scope
|
|
- min-threads
|
|
- fh-key
|
|
-
|
|
name: threads-get
|
|
doc: get the maximum number of running threads
|
|
attribute-set: server
|
|
do:
|
|
reply:
|
|
attributes:
|
|
- threads
|
|
- gracetime
|
|
- leasetime
|
|
- scope
|
|
- min-threads
|
|
-
|
|
name: version-set
|
|
doc: set nfs enabled versions
|
|
attribute-set: server-proto
|
|
flags: [admin-perm]
|
|
do:
|
|
request:
|
|
attributes:
|
|
- version
|
|
-
|
|
name: version-get
|
|
doc: get nfs enabled versions
|
|
attribute-set: server-proto
|
|
do:
|
|
reply:
|
|
attributes:
|
|
- version
|
|
-
|
|
name: listener-set
|
|
doc: set nfs running sockets
|
|
attribute-set: server-sock
|
|
flags: [admin-perm]
|
|
do:
|
|
request:
|
|
attributes:
|
|
- addr
|
|
-
|
|
name: listener-get
|
|
doc: get nfs running listeners
|
|
attribute-set: server-sock
|
|
do:
|
|
reply:
|
|
attributes:
|
|
- addr
|
|
-
|
|
name: pool-mode-set
|
|
doc: set the current server pool-mode
|
|
attribute-set: pool-mode
|
|
flags: [admin-perm]
|
|
do:
|
|
request:
|
|
attributes:
|
|
- mode
|
|
-
|
|
name: pool-mode-get
|
|
doc: get info about server pool-mode
|
|
attribute-set: pool-mode
|
|
do:
|
|
reply:
|
|
attributes:
|
|
- mode
|
|
- npools
|
|
-
|
|
name: cache-notify
|
|
doc: Notification that there are cache requests that need servicing
|
|
attribute-set: cache-notify
|
|
mcgrp: exportd
|
|
event:
|
|
attributes:
|
|
- cache-type
|
|
-
|
|
name: svc-export-get-reqs
|
|
doc: Dump all pending svc_export requests
|
|
attribute-set: svc-export-reqs
|
|
flags: [admin-perm]
|
|
dump:
|
|
reply:
|
|
attributes:
|
|
- requests
|
|
-
|
|
name: svc-export-set-reqs
|
|
doc: Respond to one or more svc_export requests
|
|
attribute-set: svc-export-reqs
|
|
flags: [admin-perm]
|
|
do:
|
|
request:
|
|
attributes:
|
|
- requests
|
|
-
|
|
name: expkey-get-reqs
|
|
doc: Dump all pending expkey requests
|
|
attribute-set: expkey-reqs
|
|
flags: [admin-perm]
|
|
dump:
|
|
reply:
|
|
attributes:
|
|
- requests
|
|
-
|
|
name: expkey-set-reqs
|
|
doc: Respond to one or more expkey requests
|
|
attribute-set: expkey-reqs
|
|
flags: [admin-perm]
|
|
do:
|
|
request:
|
|
attributes:
|
|
- requests
|
|
-
|
|
name: cache-flush
|
|
doc: Flush nfsd caches (svc_export and/or expkey)
|
|
attribute-set: cache-flush
|
|
flags: [admin-perm]
|
|
do:
|
|
request:
|
|
attributes:
|
|
- mask
|
|
-
|
|
name: unlock-ip
|
|
doc: release NLM locks held by an IP address
|
|
attribute-set: unlock-ip
|
|
flags: [admin-perm]
|
|
do:
|
|
request:
|
|
attributes:
|
|
- address
|
|
-
|
|
name: unlock-filesystem
|
|
doc: revoke NFS state under a filesystem path
|
|
attribute-set: unlock-filesystem
|
|
flags: [admin-perm]
|
|
do:
|
|
request:
|
|
attributes:
|
|
- path
|
|
-
|
|
name: unlock-export
|
|
doc: >-
|
|
Revoke NFSv4 state acquired through exports of a given path.
|
|
Unlike unlock-filesystem, which operates at superblock granularity,
|
|
this command targets only state associated with a specific export
|
|
path. Userspace (exportfs -u) sends this after removing the last
|
|
client for a path so the underlying filesystem can be unmounted.
|
|
attribute-set: unlock-export
|
|
flags: [admin-perm]
|
|
do:
|
|
request:
|
|
attributes:
|
|
- path
|
|
|
|
mcast-groups:
|
|
list:
|
|
-
|
|
name: none
|
|
-
|
|
name: exportd
|