Lines Matching defs:kattr

4278 static unsigned int recalc_flags(struct mount_kattr *kattr, struct mount *mnt)
4283 flags &= ~kattr->attr_clr;
4285 flags |= kattr->attr_set;
4290 static int can_idmap_mount(const struct mount_kattr *kattr, struct mount *mnt)
4295 if (!kattr->mnt_idmap)
4302 if (kattr->mnt_userns == m->mnt_sb->s_user_ns)
4330 * @kattr: the new mount attributes
4331 * @mnt: the mount to which @kattr will be applied
4333 * Check whether thew new mount attributes in @kattr allow concurrent writers.
4337 static inline bool mnt_allow_writers(const struct mount_kattr *kattr,
4340 return (!(kattr->attr_set & MNT_READONLY) ||
4342 !kattr->mnt_idmap;
4345 static int mount_setattr_prepare(struct mount_kattr *kattr, struct mount *mnt)
4351 if (!can_change_locked_flags(m, recalc_flags(kattr, m))) {
4356 err = can_idmap_mount(kattr, m);
4360 if (!mnt_allow_writers(kattr, m)) {
4366 if (!kattr->recurse)
4394 static void do_idmap_mount(const struct mount_kattr *kattr, struct mount *mnt)
4396 if (!kattr->mnt_idmap)
4407 smp_store_release(&mnt->mnt.mnt_idmap, mnt_idmap_get(kattr->mnt_idmap));
4410 static void mount_setattr_commit(struct mount_kattr *kattr, struct mount *mnt)
4417 do_idmap_mount(kattr, m);
4418 flags = recalc_flags(kattr, m);
4425 if (kattr->propagation)
4426 change_mnt_propagation(m, kattr->propagation);
4427 if (!kattr->recurse)
4433 static int do_mount_setattr(struct path *path, struct mount_kattr *kattr)
4441 if (kattr->mnt_userns) {
4444 mnt_idmap = alloc_mnt_idmap(kattr->mnt_userns);
4447 kattr->mnt_idmap = mnt_idmap;
4450 if (kattr->propagation) {
4456 if (kattr->propagation == MS_SHARED) {
4457 err = invent_group_ids(mnt, kattr->recurse);
4491 err = mount_setattr_prepare(kattr, mnt);
4493 mount_setattr_commit(kattr, mnt);
4498 if (kattr->propagation) {
4508 struct mount_kattr *kattr, unsigned int flags)
4564 kattr->mnt_userns = get_user_ns(mnt_userns);
4572 struct mount_kattr *kattr, unsigned int flags)
4583 *kattr = (struct mount_kattr) {
4592 kattr->propagation = attr->propagation;
4597 kattr->attr_set = attr_flags_to_mnt_flags(attr->attr_set);
4598 kattr->attr_clr = attr_flags_to_mnt_flags(attr->attr_clr);
4617 kattr->attr_clr |= MNT_RELATIME | MNT_NOATIME;
4620 kattr->attr_set |= MNT_RELATIME;
4623 kattr->attr_set |= MNT_NOATIME;
4635 return build_mount_idmapped(attr, usize, kattr, flags);
4638 static void finish_mount_kattr(struct mount_kattr *kattr)
4640 put_user_ns(kattr->mnt_userns);
4641 kattr->mnt_userns = NULL;
4643 if (kattr->mnt_idmap)
4644 mnt_idmap_put(kattr->mnt_idmap);
4654 struct mount_kattr kattr;
4682 err = build_mount_kattr(&attr, usize, &kattr, flags);
4686 err = user_path_at(dfd, path, kattr.lookup_flags, &target);
4688 err = do_mount_setattr(&target, &kattr);
4691 finish_mount_kattr(&kattr);