fs/nfsd/nfsxdr.c
Source file repositories/reference/linux-study-clean/fs/nfsd/nfsxdr.c
File Facts
- System
- Linux kernel
- Corpus path
fs/nfsd/nfsxdr.c- Extension
.c- Size
- 15747 bytes
- Lines
- 664
- 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
vfs.hxdr.hauth.h
Detected Declarations
function typesfunction svcxdr_decode_fhandlefunction svcxdr_encode_fhandlefunction encode_timevalfunction svcxdr_decode_filenamefunction svcxdr_decode_diropargsfunction svcxdr_decode_sattrfunction svcxdr_encode_fattrfunction nfssvc_decode_fhandleargsfunction nfssvc_decode_sattrargsfunction nfssvc_decode_diropargsfunction nfssvc_decode_readargsfunction nfssvc_decode_writeargsfunction nfssvc_decode_createargsfunction nfssvc_decode_renameargsfunction nfssvc_decode_linkargsfunction nfssvc_decode_symlinkargsfunction nfssvc_decode_readdirargsfunction nfssvc_encode_statresfunction nfssvc_encode_attrstatresfunction nfssvc_encode_diropresfunction nfssvc_encode_readlinkresfunction nfssvc_encode_readresfunction nfssvc_encode_readdirresfunction nfssvc_encode_statfsresfunction svcxdr_encode_entry_commonfunction svcxdr_encode_entry_commonfunction nfssvc_encode_entryfunction nfssvc_release_attrstatfunction nfssvc_release_diropresfunction nfssvc_release_readres
Annotated Snippet
// SPDX-License-Identifier: GPL-2.0
/*
* XDR support for nfsd
*
* Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de>
*/
#include "vfs.h"
#include "xdr.h"
#include "auth.h"
/*
* Mapping of S_IF* types to NFS file types
*/
static const u32 nfs_ftypes[] = {
NFNON, NFCHR, NFCHR, NFBAD,
NFDIR, NFBAD, NFBLK, NFBAD,
NFREG, NFBAD, NFLNK, NFBAD,
NFSOCK, NFBAD, NFLNK, NFBAD,
};
/*
* Basic NFSv2 data types (RFC 1094 Section 2.3)
*/
/**
* svcxdr_encode_stat - Encode an NFSv2 status code
* @xdr: XDR stream
* @status: status value to encode
*
* Return values:
* %false: Send buffer space was exhausted
* %true: Success
*/
bool
svcxdr_encode_stat(struct xdr_stream *xdr, __be32 status)
{
__be32 *p;
p = xdr_reserve_space(xdr, sizeof(status));
if (!p)
return false;
*p = status;
return true;
}
/**
* svcxdr_decode_fhandle - Decode an NFSv2 file handle
* @xdr: XDR stream positioned at an encoded NFSv2 FH
* @fhp: OUT: filled-in server file handle
*
* Return values:
* %false: The encoded file handle was not valid
* %true: @fhp has been initialized
*/
bool
svcxdr_decode_fhandle(struct xdr_stream *xdr, struct svc_fh *fhp)
{
__be32 *p;
p = xdr_inline_decode(xdr, NFS_FHSIZE);
if (!p)
return false;
fh_init(fhp, NFS_FHSIZE);
memcpy(&fhp->fh_handle.fh_raw, p, NFS_FHSIZE);
fhp->fh_handle.fh_size = NFS_FHSIZE;
return true;
}
static bool
svcxdr_encode_fhandle(struct xdr_stream *xdr, const struct svc_fh *fhp)
{
__be32 *p;
p = xdr_reserve_space(xdr, NFS_FHSIZE);
if (!p)
return false;
memcpy(p, &fhp->fh_handle.fh_raw, NFS_FHSIZE);
return true;
}
static __be32 *
encode_timeval(__be32 *p, const struct timespec64 *time)
{
*p++ = cpu_to_be32((u32)time->tv_sec);
if (time->tv_nsec)
Annotation
- Immediate include surface: `vfs.h`, `xdr.h`, `auth.h`.
- Detected declarations: `function types`, `function svcxdr_decode_fhandle`, `function svcxdr_encode_fhandle`, `function encode_timeval`, `function svcxdr_decode_filename`, `function svcxdr_decode_diropargs`, `function svcxdr_decode_sattr`, `function svcxdr_encode_fattr`, `function nfssvc_decode_fhandleargs`, `function nfssvc_decode_sattrargs`.
- 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.