Lines Matching refs:fa
20 void fileattr_fill_xflags(struct file_kattr *fa, u32 xflags) in fileattr_fill_xflags() argument
22 memset(fa, 0, sizeof(*fa)); in fileattr_fill_xflags()
23 fa->fsx_valid = true; in fileattr_fill_xflags()
24 fa->fsx_xflags = xflags; in fileattr_fill_xflags()
25 if (fa->fsx_xflags & FS_XFLAG_IMMUTABLE) in fileattr_fill_xflags()
26 fa->flags |= FS_IMMUTABLE_FL; in fileattr_fill_xflags()
27 if (fa->fsx_xflags & FS_XFLAG_APPEND) in fileattr_fill_xflags()
28 fa->flags |= FS_APPEND_FL; in fileattr_fill_xflags()
29 if (fa->fsx_xflags & FS_XFLAG_SYNC) in fileattr_fill_xflags()
30 fa->flags |= FS_SYNC_FL; in fileattr_fill_xflags()
31 if (fa->fsx_xflags & FS_XFLAG_NOATIME) in fileattr_fill_xflags()
32 fa->flags |= FS_NOATIME_FL; in fileattr_fill_xflags()
33 if (fa->fsx_xflags & FS_XFLAG_NODUMP) in fileattr_fill_xflags()
34 fa->flags |= FS_NODUMP_FL; in fileattr_fill_xflags()
35 if (fa->fsx_xflags & FS_XFLAG_DAX) in fileattr_fill_xflags()
36 fa->flags |= FS_DAX_FL; in fileattr_fill_xflags()
37 if (fa->fsx_xflags & FS_XFLAG_PROJINHERIT) in fileattr_fill_xflags()
38 fa->flags |= FS_PROJINHERIT_FL; in fileattr_fill_xflags()
50 void fileattr_fill_flags(struct file_kattr *fa, u32 flags) in fileattr_fill_flags() argument
52 memset(fa, 0, sizeof(*fa)); in fileattr_fill_flags()
53 fa->flags_valid = true; in fileattr_fill_flags()
54 fa->flags = flags; in fileattr_fill_flags()
55 if (fa->flags & FS_SYNC_FL) in fileattr_fill_flags()
56 fa->fsx_xflags |= FS_XFLAG_SYNC; in fileattr_fill_flags()
57 if (fa->flags & FS_IMMUTABLE_FL) in fileattr_fill_flags()
58 fa->fsx_xflags |= FS_XFLAG_IMMUTABLE; in fileattr_fill_flags()
59 if (fa->flags & FS_APPEND_FL) in fileattr_fill_flags()
60 fa->fsx_xflags |= FS_XFLAG_APPEND; in fileattr_fill_flags()
61 if (fa->flags & FS_NODUMP_FL) in fileattr_fill_flags()
62 fa->fsx_xflags |= FS_XFLAG_NODUMP; in fileattr_fill_flags()
63 if (fa->flags & FS_NOATIME_FL) in fileattr_fill_flags()
64 fa->fsx_xflags |= FS_XFLAG_NOATIME; in fileattr_fill_flags()
65 if (fa->flags & FS_DAX_FL) in fileattr_fill_flags()
66 fa->fsx_xflags |= FS_XFLAG_DAX; in fileattr_fill_flags()
67 if (fa->flags & FS_PROJINHERIT_FL) in fileattr_fill_flags()
68 fa->fsx_xflags |= FS_XFLAG_PROJINHERIT; in fileattr_fill_flags()
81 int vfs_fileattr_get(struct dentry *dentry, struct file_kattr *fa) in vfs_fileattr_get() argument
89 error = security_inode_file_getattr(dentry, fa); in vfs_fileattr_get()
93 return inode->i_op->fileattr_get(dentry, fa); in vfs_fileattr_get()
97 static void fileattr_to_file_attr(const struct file_kattr *fa, in fileattr_to_file_attr() argument
103 fattr->fa_xflags = fa->fsx_xflags & mask; in fileattr_to_file_attr()
104 fattr->fa_extsize = fa->fsx_extsize; in fileattr_to_file_attr()
105 fattr->fa_nextents = fa->fsx_nextents; in fileattr_to_file_attr()
106 fattr->fa_projid = fa->fsx_projid; in fileattr_to_file_attr()
107 fattr->fa_cowextsize = fa->fsx_cowextsize; in fileattr_to_file_attr()
117 int copy_fsxattr_to_user(const struct file_kattr *fa, struct fsxattr __user *ufa) in copy_fsxattr_to_user() argument
123 xfa.fsx_xflags = fa->fsx_xflags & mask; in copy_fsxattr_to_user()
124 xfa.fsx_extsize = fa->fsx_extsize; in copy_fsxattr_to_user()
125 xfa.fsx_nextents = fa->fsx_nextents; in copy_fsxattr_to_user()
126 xfa.fsx_projid = fa->fsx_projid; in copy_fsxattr_to_user()
127 xfa.fsx_cowextsize = fa->fsx_cowextsize; in copy_fsxattr_to_user()
137 struct file_kattr *fa) in file_attr_to_fileattr() argument
144 fileattr_fill_xflags(fa, fattr->fa_xflags); in file_attr_to_fileattr()
145 fa->fsx_xflags &= ~FS_XFLAG_RDONLY_MASK; in file_attr_to_fileattr()
146 fa->fsx_extsize = fattr->fa_extsize; in file_attr_to_fileattr()
147 fa->fsx_projid = fattr->fa_projid; in file_attr_to_fileattr()
148 fa->fsx_cowextsize = fattr->fa_cowextsize; in file_attr_to_fileattr()
153 static int copy_fsxattr_from_user(struct file_kattr *fa, in copy_fsxattr_from_user() argument
165 fileattr_fill_xflags(fa, xfa.fsx_xflags); in copy_fsxattr_from_user()
166 fa->fsx_xflags &= ~FS_XFLAG_RDONLY_MASK; in copy_fsxattr_from_user()
167 fa->fsx_extsize = xfa.fsx_extsize; in copy_fsxattr_from_user()
168 fa->fsx_nextents = xfa.fsx_nextents; in copy_fsxattr_from_user()
169 fa->fsx_projid = xfa.fsx_projid; in copy_fsxattr_from_user()
170 fa->fsx_cowextsize = xfa.fsx_cowextsize; in copy_fsxattr_from_user()
183 struct file_kattr *fa) in fileattr_set_prepare() argument
191 if ((fa->flags ^ old_ma->flags) & (FS_APPEND_FL | FS_IMMUTABLE_FL) && in fileattr_set_prepare()
195 err = fscrypt_prepare_setflags(inode, old_ma->flags, fa->flags); in fileattr_set_prepare()
205 if (old_ma->fsx_projid != fa->fsx_projid) in fileattr_set_prepare()
207 if ((old_ma->fsx_xflags ^ fa->fsx_xflags) & in fileattr_set_prepare()
215 if (old_ma->fsx_projid != fa->fsx_projid && in fileattr_set_prepare()
216 !projid_valid(make_kprojid(&init_user_ns, fa->fsx_projid))) in fileattr_set_prepare()
221 if ((fa->fsx_xflags & FS_XFLAG_EXTSIZE) && !S_ISREG(inode->i_mode)) in fileattr_set_prepare()
224 if ((fa->fsx_xflags & FS_XFLAG_EXTSZINHERIT) && in fileattr_set_prepare()
228 if ((fa->fsx_xflags & FS_XFLAG_COWEXTSIZE) && in fileattr_set_prepare()
236 if ((fa->fsx_xflags & FS_XFLAG_DAX) && in fileattr_set_prepare()
241 if (fa->fsx_extsize == 0) in fileattr_set_prepare()
242 fa->fsx_xflags &= ~(FS_XFLAG_EXTSIZE | FS_XFLAG_EXTSZINHERIT); in fileattr_set_prepare()
243 if (fa->fsx_cowextsize == 0) in fileattr_set_prepare()
244 fa->fsx_xflags &= ~FS_XFLAG_COWEXTSIZE; in fileattr_set_prepare()
266 struct file_kattr *fa) in vfs_fileattr_set() argument
282 if (fa->flags_valid) { in vfs_fileattr_set()
283 fa->fsx_xflags |= old_ma.fsx_xflags & ~FS_XFLAG_COMMON; in vfs_fileattr_set()
284 fa->fsx_extsize = old_ma.fsx_extsize; in vfs_fileattr_set()
285 fa->fsx_nextents = old_ma.fsx_nextents; in vfs_fileattr_set()
286 fa->fsx_projid = old_ma.fsx_projid; in vfs_fileattr_set()
287 fa->fsx_cowextsize = old_ma.fsx_cowextsize; in vfs_fileattr_set()
289 fa->flags |= old_ma.flags & ~FS_COMMON_FL; in vfs_fileattr_set()
292 err = fileattr_set_prepare(inode, &old_ma, fa); in vfs_fileattr_set()
295 err = security_inode_file_setattr(dentry, fa); in vfs_fileattr_set()
298 err = inode->i_op->fileattr_set(idmap, dentry, fa); in vfs_fileattr_set()
311 struct file_kattr fa = { .flags_valid = true }; /* hint only */ in ioctl_getflags() local
314 err = vfs_fileattr_get(file->f_path.dentry, &fa); in ioctl_getflags()
318 err = put_user(fa.flags, argp); in ioctl_getflags()
327 struct file_kattr fa; in ioctl_setflags() local
335 fileattr_fill_flags(&fa, flags); in ioctl_setflags()
336 err = vfs_fileattr_set(idmap, dentry, &fa); in ioctl_setflags()
348 struct file_kattr fa = { .fsx_valid = true }; /* hint only */ in ioctl_fsgetxattr() local
351 err = vfs_fileattr_get(file->f_path.dentry, &fa); in ioctl_fsgetxattr()
355 err = copy_fsxattr_to_user(&fa, argp); in ioctl_fsgetxattr()
365 struct file_kattr fa; in ioctl_fssetxattr() local
368 err = copy_fsxattr_from_user(&fa, argp); in ioctl_fssetxattr()
372 err = vfs_fileattr_set(idmap, dentry, &fa); in ioctl_fssetxattr()
390 struct file_kattr fa; in SYSCALL_DEFINE5() local
426 error = vfs_fileattr_get(filepath.dentry, &fa); in SYSCALL_DEFINE5()
430 fileattr_to_file_attr(&fa, &fattr); in SYSCALL_DEFINE5()
445 struct file_kattr fa; in SYSCALL_DEFINE5() local
468 error = file_attr_to_fileattr(&fattr, &fa); in SYSCALL_DEFINE5()
493 filepath.dentry, &fa); in SYSCALL_DEFINE5()