cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

fileattr.h (1952B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2
      3#ifndef _LINUX_FILEATTR_H
      4#define _LINUX_FILEATTR_H
      5
      6/* Flags shared betwen flags/xflags */
      7#define FS_COMMON_FL \
      8	(FS_SYNC_FL | FS_IMMUTABLE_FL | FS_APPEND_FL | \
      9	 FS_NODUMP_FL |	FS_NOATIME_FL | FS_DAX_FL | \
     10	 FS_PROJINHERIT_FL)
     11
     12#define FS_XFLAG_COMMON \
     13	(FS_XFLAG_SYNC | FS_XFLAG_IMMUTABLE | FS_XFLAG_APPEND | \
     14	 FS_XFLAG_NODUMP | FS_XFLAG_NOATIME | FS_XFLAG_DAX | \
     15	 FS_XFLAG_PROJINHERIT)
     16
     17/*
     18 * Merged interface for miscellaneous file attributes.  'flags' originates from
     19 * ext* and 'fsx_flags' from xfs.  There's some overlap between the two, which
     20 * is handled by the VFS helpers, so filesystems are free to implement just one
     21 * or both of these sub-interfaces.
     22 */
     23struct fileattr {
     24	u32	flags;		/* flags (FS_IOC_GETFLAGS/FS_IOC_SETFLAGS) */
     25	/* struct fsxattr: */
     26	u32	fsx_xflags;	/* xflags field value (get/set) */
     27	u32	fsx_extsize;	/* extsize field value (get/set)*/
     28	u32	fsx_nextents;	/* nextents field value (get)	*/
     29	u32	fsx_projid;	/* project identifier (get/set) */
     30	u32	fsx_cowextsize;	/* CoW extsize field value (get/set)*/
     31	/* selectors: */
     32	bool	flags_valid:1;
     33	bool	fsx_valid:1;
     34};
     35
     36int copy_fsxattr_to_user(const struct fileattr *fa, struct fsxattr __user *ufa);
     37
     38void fileattr_fill_xflags(struct fileattr *fa, u32 xflags);
     39void fileattr_fill_flags(struct fileattr *fa, u32 flags);
     40
     41/**
     42 * fileattr_has_fsx - check for extended flags/attributes
     43 * @fa:		fileattr pointer
     44 *
     45 * Return: true if any attributes are present that are not represented in
     46 * ->flags.
     47 */
     48static inline bool fileattr_has_fsx(const struct fileattr *fa)
     49{
     50	return fa->fsx_valid &&
     51		((fa->fsx_xflags & ~FS_XFLAG_COMMON) || fa->fsx_extsize != 0 ||
     52		 fa->fsx_projid != 0 ||	fa->fsx_cowextsize != 0);
     53}
     54
     55int vfs_fileattr_get(struct dentry *dentry, struct fileattr *fa);
     56int vfs_fileattr_set(struct user_namespace *mnt_userns, struct dentry *dentry,
     57		     struct fileattr *fa);
     58
     59#endif /* _LINUX_FILEATTR_H */