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
4 changed files with 24 additions and 6 deletions
|
@ -882,12 +882,7 @@ int orangefs_getattr(struct user_namespace *mnt_userns, const struct path *path,
|
||||||
if (!(request_mask & STATX_SIZE))
|
if (!(request_mask & STATX_SIZE))
|
||||||
stat->result_mask &= ~STATX_SIZE;
|
stat->result_mask &= ~STATX_SIZE;
|
||||||
|
|
||||||
stat->attributes_mask = STATX_ATTR_IMMUTABLE |
|
generic_fill_statx_attr(inode, stat);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
return ret;
|
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);
|
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
|
* vfs_getattr_nosec - getattr without security checks
|
||||||
* @path: file to get attributes from
|
* @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 const struct inode_operations page_symlink_inode_operations;
|
||||||
extern void kfree_link(void *);
|
extern void kfree_link(void *);
|
||||||
void generic_fillattr(struct user_namespace *, struct inode *, struct kstat *);
|
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_nosec(const struct path *, struct kstat *, u32, unsigned int);
|
||||||
extern int vfs_getattr(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);
|
void __inode_add_bytes(struct inode *inode, loff_t bytes);
|
||||||
|
|
|
@ -34,6 +34,10 @@ struct kstat {
|
||||||
STATX_ATTR_ENCRYPTED | \
|
STATX_ATTR_ENCRYPTED | \
|
||||||
STATX_ATTR_VERITY \
|
STATX_ATTR_VERITY \
|
||||||
)/* Attrs corresponding to FS_*_FL flags */
|
)/* 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;
|
u64 ino;
|
||||||
dev_t dev;
|
dev_t dev;
|
||||||
dev_t rdev;
|
dev_t rdev;
|
||||||
|
|
Loading…
Add table
Reference in a new issue