chflags: Add a new UF_NOCACHE flag

This internet draft (which is close to being an RFC)
specifies a new NFSv4.2 attribute which tells the NFSv4.2
client to not cache file data. (Similar to O_DIRECT, but
triggered by this attribute set on the file on the NFSv4.2
server and not by the application's open(2).)

https://datatracker.ietf.org/doc/draft-ietf-nfsv4-uncacheable-files/

This patch adds a new chflags(1) flag called UF_NOCACHE to
implement this.

Patches for NFS and ZFS will be done separately.

This is a redo of the patch, with a requested name change
and a #ifdef in strtofflags.c so that it doesn't break some
Linux cross build.  The name change was requested by fuz@.

Reviewed by:	kib (earlier version)
MFC after:	2 weeks
Differential Revision:	https://reviews.freebsd.org/D58181
This commit is contained in:
Rick Macklem committed 2026-08-26 14:55:20 -07:00
1 parent 0f59df8386
commit 290e563166
4 files changed
+9 -2

No files matched your search

+6
View File
@@ -80,7 +80,13 @@ static struct {
{ "nosparse", 0, UF_SPARSE },
{ "nousparse", 0, UF_SPARSE },
{ "nosystem", 0, UF_SYSTEM },
/* Needed for some Linux cross-build that uses a stale stat.h. */
#ifdef UF_NOCACHE
{ "nousystem", 0, UF_SYSTEM },
{ "noucache", 1, UF_NOCACHE }
#else
{ "nousystem", 0, UF_SYSTEM }
#endif
};
#define nmappings (sizeof(mapping) / sizeof(mapping[0]))
+1 -1
View File
@@ -2042,7 +2042,7 @@ tmpfs_chflags(struct vnode *vp, u_long flags, struct ucred *cred,
if ((flags & ~(SF_APPEND | SF_ARCHIVED | SF_IMMUTABLE | SF_NOUNLINK |
UF_APPEND | UF_ARCHIVE | UF_HIDDEN | UF_IMMUTABLE | UF_NODUMP |
UF_NOUNLINK | UF_OFFLINE | UF_OPAQUE | UF_READONLY | UF_REPARSE |
UF_SPARSE | UF_SYSTEM)) != 0)
UF_SPARSE | UF_SYSTEM | UF_NOCACHE)) != 0)
return (EOPNOTSUPP);
/* Disallow this operation if the file system is mounted read-only. */
+1
View File
@@ -327,6 +327,7 @@ struct nstat {
#define UF_REPARSE 0x00000400 /* Windows reparse point file bit */
#define UF_ARCHIVE 0x00000800 /* file needs to be archived */
#define UF_READONLY 0x00001000 /* Windows readonly file bit */
#define UF_NOCACHE 0x00002000 /* don't cache file data (NFSv4) */
/* This is the same as the MacOS X definition of UF_HIDDEN. */
#define UF_HIDDEN 0x00008000 /* file is hidden */
+1 -1
View File
@@ -667,7 +667,7 @@ ufs_setattr(
SF_NOUNLINK | SF_SNAPSHOT | UF_APPEND | UF_ARCHIVE |
UF_HIDDEN | UF_IMMUTABLE | UF_NODUMP | UF_NOUNLINK |
UF_OFFLINE | UF_OPAQUE | UF_READONLY | UF_REPARSE |
UF_SPARSE | UF_SYSTEM)) != 0)
UF_SPARSE | UF_SYSTEM | UF_NOCACHE)) != 0)
return (EOPNOTSUPP);
if (vp->v_mount->mnt_flag & MNT_RDONLY)
return (EROFS);