fs/nfs/nfs3xdr.c
Source file repositories/reference/linux-study-clean/fs/nfs/nfs3xdr.c
File Facts
- System
- Linux kernel
- Corpus path
fs/nfs/nfs3xdr.c- Extension
.c- Size
- 55502 bytes
- Lines
- 2517
- Domain
- Core OS
- Bucket
- VFS And Filesystem Core
- Inferred role
- Core OS: implementation source
- Status
- source implementation candidate
Why This File Exists
Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/param.hlinux/time.hlinux/mm.hlinux/errno.hlinux/string.hlinux/in.hlinux/pagemap.hlinux/proc_fs.hlinux/kdev_t.hlinux/sunrpc/clnt.hlinux/nfs.hlinux/nfs3.hlinux/nfs_fs.hlinux/nfsacl.hlinux/nfs_common.hinternal.hnfstrace.h
Detected Declarations
function encode_uint32function decode_uint32function decode_uint64function decode_fileid3function encode_filename3function decode_inline_filename3function encode_nfspath3function decode_nfspath3function decode_cookie3function decode_cookieverf3function encode_createverf3function decode_writeverf3function decode_nfsstat3function encode_ftype3function encode_specdata3function encode_nfs_fh3function decode_nfs_fh3function zero_nfs_fh3function encode_sattr3function decode_fattr3function decode_post_op_attrfunction decode_wcc_attrfunction decode_pre_op_attrfunction decode_wcc_datafunction decode_post_op_fh3function encode_diropargs3function nfs3_xdr_enc_getattr3argsfunction encode_sattrguard3function nfs3_xdr_enc_setattr3argsfunction nfs3_xdr_enc_lookup3argsfunction encode_access3argsfunction nfs3_xdr_enc_access3argsfunction nfs3_xdr_enc_readlink3argsfunction encode_read3argsfunction nfs3_xdr_enc_read3argsfunction encode_write3argsfunction nfs3_xdr_enc_write3argsfunction encode_createhow3function nfs3_xdr_enc_create3argsfunction nfs3_xdr_enc_mkdir3argsfunction encode_symlinkdata3function nfs3_xdr_enc_symlink3argsfunction encode_devicedata3function encode_mknoddata3function nfs3_xdr_enc_mknod3argsfunction nfs3_xdr_enc_remove3argsfunction nfs3_xdr_enc_rename3argsfunction nfs3_xdr_enc_link3args
Annotated Snippet
* union set_mode3 switch (bool set_it) {
* case TRUE:
* mode3 mode;
* default:
* void;
* };
*
* union set_uid3 switch (bool set_it) {
* case TRUE:
* uid3 uid;
* default:
* void;
* };
*
* union set_gid3 switch (bool set_it) {
* case TRUE:
* gid3 gid;
* default:
* void;
* };
*
* union set_size3 switch (bool set_it) {
* case TRUE:
* size3 size;
* default:
* void;
* };
*
* union set_atime switch (time_how set_it) {
* case SET_TO_CLIENT_TIME:
* nfstime3 atime;
* default:
* void;
* };
*
* union set_mtime switch (time_how set_it) {
* case SET_TO_CLIENT_TIME:
* nfstime3 mtime;
* default:
* void;
* };
*
* struct sattr3 {
* set_mode3 mode;
* set_uid3 uid;
* set_gid3 gid;
* set_size3 size;
* set_atime atime;
* set_mtime mtime;
* };
*/
static void encode_sattr3(struct xdr_stream *xdr, const struct iattr *attr,
struct user_namespace *userns)
{
u32 nbytes;
__be32 *p;
/*
* In order to make only a single xdr_reserve_space() call,
* pre-compute the total number of bytes to be reserved.
* Six boolean values, one for each set_foo field, are always
* present in the encoded result, so start there.
*/
nbytes = 6 * 4;
if (attr->ia_valid & ATTR_MODE)
nbytes += 4;
if (attr->ia_valid & ATTR_UID)
nbytes += 4;
if (attr->ia_valid & ATTR_GID)
nbytes += 4;
if (attr->ia_valid & ATTR_SIZE)
nbytes += 8;
if (attr->ia_valid & ATTR_ATIME_SET)
nbytes += 8;
if (attr->ia_valid & ATTR_MTIME_SET)
nbytes += 8;
p = xdr_reserve_space(xdr, nbytes);
if (attr->ia_valid & ATTR_MODE) {
*p++ = xdr_one;
*p++ = cpu_to_be32(attr->ia_mode & S_IALLUGO);
} else
*p++ = xdr_zero;
if (attr->ia_valid & ATTR_UID) {
*p++ = xdr_one;
*p++ = cpu_to_be32(from_kuid_munged(userns, attr->ia_uid));
} else
*p++ = xdr_zero;
Annotation
- Immediate include surface: `linux/param.h`, `linux/time.h`, `linux/mm.h`, `linux/errno.h`, `linux/string.h`, `linux/in.h`, `linux/pagemap.h`, `linux/proc_fs.h`.
- Detected declarations: `function encode_uint32`, `function decode_uint32`, `function decode_uint64`, `function decode_fileid3`, `function encode_filename3`, `function decode_inline_filename3`, `function encode_nfspath3`, `function decode_nfspath3`, `function decode_cookie3`, `function decode_cookieverf3`.
- Atlas domain: Core OS / VFS And Filesystem Core.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.