Lines Matching refs:kattr

3915 static unsigned int recalc_flags(struct mount_kattr *kattr, struct mount *mnt)  in recalc_flags()  argument
3920 flags &= ~kattr->attr_clr; in recalc_flags()
3922 flags |= kattr->attr_set; in recalc_flags()
3927 static int can_idmap_mount(const struct mount_kattr *kattr, struct mount *mnt) in can_idmap_mount() argument
3931 if (!kattr->mnt_userns) in can_idmap_mount()
3961 static struct mount *mount_setattr_prepare(struct mount_kattr *kattr, in mount_setattr_prepare() argument
3979 flags = recalc_flags(kattr, m); in mount_setattr_prepare()
3985 *err = can_idmap_mount(kattr, m); in mount_setattr_prepare()
3991 if ((kattr->attr_set & MNT_READONLY) && in mount_setattr_prepare()
3997 } while (kattr->recurse && (m = next_mnt(m, mnt))); in mount_setattr_prepare()
4003 static void do_idmap_mount(const struct mount_kattr *kattr, struct mount *mnt) in do_idmap_mount() argument
4007 if (!kattr->mnt_userns) in do_idmap_mount()
4010 mnt_userns = get_user_ns(kattr->mnt_userns); in do_idmap_mount()
4015 static void mount_setattr_commit(struct mount_kattr *kattr, in mount_setattr_commit() argument
4025 do_idmap_mount(kattr, m); in mount_setattr_commit()
4026 flags = recalc_flags(kattr, m); in mount_setattr_commit()
4035 if ((kattr->attr_set & MNT_READONLY) && in mount_setattr_commit()
4039 if (!err && kattr->propagation) in mount_setattr_commit()
4040 change_mnt_propagation(m, kattr->propagation); in mount_setattr_commit()
4048 } while (kattr->recurse && (m = next_mnt(m, mnt))); in mount_setattr_commit()
4054 static int do_mount_setattr(struct path *path, struct mount_kattr *kattr) in do_mount_setattr() argument
4062 if (kattr->propagation) { in do_mount_setattr()
4068 if (kattr->propagation == MS_SHARED) { in do_mount_setattr()
4069 err = invent_group_ids(mnt, kattr->recurse); in do_mount_setattr()
4083 last = mount_setattr_prepare(kattr, mnt, &err); in do_mount_setattr()
4085 mount_setattr_commit(kattr, mnt, last, err); in do_mount_setattr()
4089 if (kattr->propagation) { in do_mount_setattr()
4099 struct mount_kattr *kattr, unsigned int flags) in build_mount_idmapped() argument
4146 kattr->mnt_userns = get_user_ns(mnt_userns); in build_mount_idmapped()
4154 struct mount_kattr *kattr, unsigned int flags) in build_mount_kattr() argument
4165 *kattr = (struct mount_kattr) { in build_mount_kattr()
4174 kattr->propagation = attr->propagation; in build_mount_kattr()
4179 kattr->attr_set = attr_flags_to_mnt_flags(attr->attr_set); in build_mount_kattr()
4180 kattr->attr_clr = attr_flags_to_mnt_flags(attr->attr_clr); in build_mount_kattr()
4199 kattr->attr_clr |= MNT_RELATIME | MNT_NOATIME; in build_mount_kattr()
4202 kattr->attr_set |= MNT_RELATIME; in build_mount_kattr()
4205 kattr->attr_set |= MNT_NOATIME; in build_mount_kattr()
4217 return build_mount_idmapped(attr, usize, kattr, flags); in build_mount_kattr()
4220 static void finish_mount_kattr(struct mount_kattr *kattr) in finish_mount_kattr() argument
4222 put_user_ns(kattr->mnt_userns); in finish_mount_kattr()
4223 kattr->mnt_userns = NULL; in finish_mount_kattr()
4233 struct mount_kattr kattr; in SYSCALL_DEFINE5() local
4261 err = build_mount_kattr(&attr, usize, &kattr, flags); in SYSCALL_DEFINE5()
4265 err = user_path_at(dfd, path, kattr.lookup_flags, &target); in SYSCALL_DEFINE5()
4267 err = do_mount_setattr(&target, &kattr); in SYSCALL_DEFINE5()
4270 finish_mount_kattr(&kattr); in SYSCALL_DEFINE5()