fs: add generic helper for filling statx attribute flags
The immutable and append-only properties on an inode are published on the inode's i_flags and enforced by the VFS. Create a helper to fill the corresponding STATX_ATTR_ flags in the kstat structure from the inode's i_flags. Only orange was converted to use this helper. Other filesystems could use it in the future. Suggested-by: Miklos Szeredi <miklos@szeredi.hu> Signed-off-by: Amir Goldstein <amir73il@gmail.com> Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
This commit is contained in:
parent
7c60610d47
commit
4f911138c8
@ -882,12 +882,7 @@ int orangefs_getattr(struct user_namespace *mnt_userns, const struct path *path,
|
||||
if (!(request_mask & STATX_SIZE))
|
||||
stat->result_mask &= ~STATX_SIZE;
|
||||
|
||||
stat->attributes_mask = STATX_ATTR_IMMUTABLE |
|
||||
STATX_ATTR_APPEND;
|
||||
if (inode->i_flags & S_IMMUTABLE)
|
||||
stat->attributes |= STATX_ATTR_IMMUTABLE;
|
||||
if (inode->i_flags & S_APPEND)
|
||||
stat->attributes |= STATX_ATTR_APPEND;
|
||||
generic_fill_statx_attr(inode, stat);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
18
fs/stat.c
18
fs/stat.c
@ -59,6 +59,24 @@ void generic_fillattr(struct user_namespace *mnt_userns, struct inode *inode,
|
||||
}
|
||||
EXPORT_SYMBOL(generic_fillattr);
|
||||
|
||||
/**
|
||||
* generic_fill_statx_attr - Fill in the statx attributes from the inode flags
|
||||
* @inode: Inode to use as the source
|
||||
* @stat: Where to fill in the attribute flags
|
||||
*
|
||||
* Fill in the STATX_ATTR_* flags in the kstat structure for properties of the
|
||||
* inode that are published on i_flags and enforced by the VFS.
|
||||
*/
|
||||
void generic_fill_statx_attr(struct inode *inode, struct kstat *stat)
|
||||
{
|
||||
if (inode->i_flags & S_IMMUTABLE)
|
||||
stat->attributes |= STATX_ATTR_IMMUTABLE;
|
||||
if (inode->i_flags & S_APPEND)
|
||||
stat->attributes |= STATX_ATTR_APPEND;
|
||||
stat->attributes_mask |= KSTAT_ATTR_VFS_FLAGS;
|
||||
}
|
||||
EXPORT_SYMBOL(generic_fill_statx_attr);
|
||||
|
||||
/**
|
||||
* vfs_getattr_nosec - getattr without security checks
|
||||
* @path: file to get attributes from
|
||||
|
@ -3355,6 +3355,7 @@ extern int page_symlink(struct inode *inode, const char *symname, int len);
|
||||
extern const struct inode_operations page_symlink_inode_operations;
|
||||
extern void kfree_link(void *);
|
||||
void generic_fillattr(struct user_namespace *, struct inode *, struct kstat *);
|
||||
void generic_fill_statx_attr(struct inode *inode, struct kstat *stat);
|
||||
extern int vfs_getattr_nosec(const struct path *, struct kstat *, u32, unsigned int);
|
||||
extern int vfs_getattr(const struct path *, struct kstat *, u32, unsigned int);
|
||||
void __inode_add_bytes(struct inode *inode, loff_t bytes);
|
||||
|
@ -34,6 +34,10 @@ struct kstat {
|
||||
STATX_ATTR_ENCRYPTED | \
|
||||
STATX_ATTR_VERITY \
|
||||
)/* Attrs corresponding to FS_*_FL flags */
|
||||
#define KSTAT_ATTR_VFS_FLAGS \
|
||||
(STATX_ATTR_IMMUTABLE | \
|
||||
STATX_ATTR_APPEND \
|
||||
) /* Attrs corresponding to S_* flags that are enforced by the VFS */
|
||||
u64 ino;
|
||||
dev_t dev;
|
||||
dev_t rdev;
|
||||
|
Loading…
Reference in New Issue
Block a user