Lines Matching +full:layer +full:- +full:depth

1 // SPDX-License-Identifier: GPL-2.0-only
26 struct ovl_fs *ofs = OVL_FS(dentry->d_sb); in ovl_setattr()
35 if (attr->ia_valid & ATTR_SIZE) { in ovl_setattr()
49 if (attr->ia_valid & ATTR_SIZE) { in ovl_setattr()
56 if (attr->ia_valid & (ATTR_KILL_SUID|ATTR_KILL_SGID)) in ovl_setattr()
57 attr->ia_valid &= ~ATTR_MODE; in ovl_setattr()
62 * filesystem rely on attr->ia_file in ovl_setattr()
64 attr->ia_valid &= ~ATTR_FILE; in ovl_setattr()
67 * If open(O_TRUNC) is done, VFS calls ->setattr with ATTR_OPEN in ovl_setattr()
69 * filesystem during open -> do not pass ATTR_OPEN. This in ovl_setattr()
75 attr->ia_valid &= ~ATTR_OPEN; in ovl_setattr()
81 inode_lock(upperdentry->d_inode); in ovl_setattr()
82 old_cred = ovl_override_creds(dentry->d_sb); in ovl_setattr()
86 ovl_copyattr(dentry->d_inode); in ovl_setattr()
87 inode_unlock(upperdentry->d_inode); in ovl_setattr()
100 struct ovl_fs *ofs = OVL_FS(dentry->d_sb); in ovl_map_dev_ino()
103 unsigned int xinoshift = 64 - xinobits; in ovl_map_dev_ino()
109 * which is friendly to du -x. in ovl_map_dev_ino()
111 stat->dev = dentry->d_sb->s_dev; in ovl_map_dev_ino()
119 * the non-persistent inode numbers range in case of overflow. in ovl_map_dev_ino()
123 if (likely(!(stat->ino >> xinoshift))) { in ovl_map_dev_ino()
124 stat->ino |= ((u64)fsid) << (xinoshift + 1); in ovl_map_dev_ino()
125 stat->dev = dentry->d_sb->s_dev; in ovl_map_dev_ino()
129 dentry, stat->ino, xinobits); in ovl_map_dev_ino()
134 if (S_ISDIR(dentry->d_inode->i_mode)) { in ovl_map_dev_ino()
137 * -xdev' will scan the entire overlay mount and won't cross the in ovl_map_dev_ino()
144 stat->dev = dentry->d_sb->s_dev; in ovl_map_dev_ino()
145 stat->ino = dentry->d_inode->i_ino; in ovl_map_dev_ino()
148 * For non-samefs setup, if we cannot map all layers st_ino in ovl_map_dev_ino()
153 stat->dev = ofs->fs[fsid].pseudo_dev; in ovl_map_dev_ino()
160 struct dentry *dentry = path->dentry; in ovl_getattr()
165 bool is_dir = S_ISDIR(inode->i_mode); in ovl_getattr()
173 old_cred = ovl_override_creds(dentry->d_sb); in ovl_getattr()
178 /* Report the effective immutable/append-only STATX flags */ in ovl_getattr()
182 * For non-dir or same fs, we use st_ino of the copy up origin. in ovl_getattr()
184 * With xino feature and non-samefs, we use st_ino of the copy up in ovl_getattr()
185 * origin masked with high bits that represent the layer id. in ovl_getattr()
190 if (!is_dir || ovl_same_dev(OVL_FS(dentry->d_sb))) { in ovl_getattr()
192 fsid = ovl_layer_lower(dentry)->fsid; in ovl_getattr()
210 * same dir on a lower layer. With the "verify_lower" in ovl_getattr()
220 (!ovl_verify_lower(dentry->d_sb) && in ovl_getattr()
222 fsid = ovl_layer_lower(dentry)->fsid; in ovl_getattr()
223 stat->ino = lowerstat.ino; in ovl_getattr()
235 stat->blocks = lowerstat.blocks; in ovl_getattr()
258 round_up(stat->size, stat->blksize) >> 9; in ovl_getattr()
260 stat->blocks = lowerdatastat.blocks; in ovl_getattr()
272 stat->nlink = 1; in ovl_getattr()
277 * and non-covered lower hardlinks. It does not include the upper in ovl_getattr()
281 stat->nlink = dentry->d_inode->i_nlink; in ovl_getattr()
302 return -ECHILD; in ovl_permission()
313 old_cred = ovl_override_creds(inode->i_sb); in ovl_permission()
315 !special_file(realinode->i_mode) && mask & MAY_WRITE) { in ovl_permission()
334 return ERR_PTR(-ECHILD); in ovl_get_link()
336 old_cred = ovl_override_creds(dentry->d_sb); in ovl_get_link()
344 * Apply the idmapping of the layer to POSIX ACLs. The caller must pass a clone
345 * of the POSIX ACLs retrieved from the lower layer to this function to not
354 for (unsigned int i = 0; i < acl->a_count; i++) { in ovl_idmap_posix_acl()
358 struct posix_acl_entry *e = &acl->a_entries[i]; in ovl_idmap_posix_acl()
359 switch (e->e_tag) { in ovl_idmap_posix_acl()
361 vfsuid = make_vfsuid(idmap, fs_userns, e->e_uid); in ovl_idmap_posix_acl()
362 e->e_uid = vfsuid_into_kuid(vfsuid); in ovl_idmap_posix_acl()
365 vfsgid = make_vfsgid(idmap, fs_userns, e->e_gid); in ovl_idmap_posix_acl()
366 e->e_gid = vfsgid_into_kgid(vfsgid); in ovl_idmap_posix_acl()
401 struct inode *realinode = d_inode(path->dentry); in ovl_get_acl_path()
403 idmap = mnt_idmap(path->mnt); in ovl_get_acl_path()
408 real_acl = vfs_get_acl(idmap, path->dentry, acl_name); in ovl_get_acl_path()
412 if (!is_idmapped_mnt(path->mnt)) in ovl_get_acl_path()
416 * We cannot alter the ACLs returned from the relevant layer as that in ovl_get_acl_path()
419 * relevant idmapping of the layer. in ovl_get_acl_path()
424 return ERR_PTR(-ENOMEM); in ovl_get_acl_path()
431 * When the relevant layer is an idmapped mount we need to take the idmapping
432 * of the layer into account and translate any ACL_{GROUP,USER} values
435 * We cannot alter the ACLs returned from the relevant layer as that would
437 * can clone the ACLs and then apply the relevant idmapping of the layer.
453 return ERR_PTR(-ECHILD); in do_ovl_get_acl()
461 * If the layer is idmapped drop out of RCU path walk in do_ovl_get_acl()
465 return ERR_PTR(-ECHILD); in do_ovl_get_acl()
471 old_cred = ovl_override_creds(inode->i_sb); in do_ovl_get_acl()
486 struct ovl_fs *ofs = OVL_FS(dentry->d_sb); in ovl_set_or_remove_acl()
499 old_cred = ovl_override_creds(dentry->d_sb); in ovl_set_or_remove_acl()
522 old_cred = ovl_override_creds(dentry->d_sb); in ovl_set_or_remove_acl()
545 return -EOPNOTSUPP; in ovl_set_acl()
546 if (!realinode->i_op->set_acl) in ovl_set_acl()
547 return -EOPNOTSUPP; in ovl_set_acl()
548 if (type == ACL_TYPE_DEFAULT && !S_ISDIR(inode->i_mode)) in ovl_set_acl()
549 return acl ? -EACCES : 0; in ovl_set_acl()
551 return -EPERM; in ovl_set_acl()
557 if (unlikely(inode->i_mode & S_ISGID) && type == ACL_TYPE_ACCESS && in ovl_set_acl()
558 !in_group_p(inode->i_gid) && in ovl_set_acl()
574 struct ovl_fs *ofs = OVL_FS(inode->i_sb); in ovl_update_time()
597 return -EIO; in ovl_fiemap()
599 if (!realinode->i_op->fiemap) in ovl_fiemap()
600 return -EOPNOTSUPP; in ovl_fiemap()
602 old_cred = ovl_override_creds(inode->i_sb); in ovl_fiemap()
603 err = realinode->i_op->fiemap(realinode, fieinfo, start, len); in ovl_fiemap()
626 cmd = fa->fsx_valid ? FS_IOC_FSSETXATTR : FS_IOC_SETFLAGS; in ovl_security_fileattr()
628 cmd = fa->fsx_valid ? FS_IOC_FSGETXATTR : FS_IOC_GETFLAGS; in ovl_security_fileattr()
644 return vfs_fileattr_set(mnt_idmap(realpath->mnt), realpath->dentry, fa); in ovl_real_fileattr_set()
664 old_cred = ovl_override_creds(inode->i_sb); in ovl_fileattr_set()
666 * Store immutable/append-only flags in xattr and clear them in ovl_fileattr_set()
668 * so children of "ovl-immutable" directories lower aliases of in ovl_fileattr_set()
669 * "ovl-immutable" hardlinks could be copied up. in ovl_fileattr_set()
682 flags = ovl_inode_real(inode)->i_flags & OVL_COPY_I_FLAGS_MASK; in ovl_fileattr_set()
685 flags |= inode->i_flags & OVL_PROT_I_FLAGS_MASK; in ovl_fileattr_set()
701 if (inode->i_flags & S_APPEND) { in ovl_fileattr_prot_flags()
702 fa->flags |= FS_APPEND_FL; in ovl_fileattr_prot_flags()
703 fa->fsx_xflags |= FS_XFLAG_APPEND; in ovl_fileattr_prot_flags()
705 if (inode->i_flags & S_IMMUTABLE) { in ovl_fileattr_prot_flags()
706 fa->flags |= FS_IMMUTABLE_FL; in ovl_fileattr_prot_flags()
707 fa->fsx_xflags |= FS_XFLAG_IMMUTABLE; in ovl_fileattr_prot_flags()
719 err = vfs_fileattr_get(realpath->dentry, fa); in ovl_real_fileattr_get()
720 if (err == -ENOIOCTLCMD) in ovl_real_fileattr_get()
721 err = -ENOTTY; in ovl_real_fileattr_get()
734 old_cred = ovl_override_creds(inode->i_sb); in ovl_fileattr_get()
776 /* For O_DIRECT dentry_open() checks f_mapping->a_ops->direct_IO */
782 * overlayfs instance as lower layer. We need to annotate the
785 * depth 0 (there is always a real fs below it). An overlayfs
786 * inode lock will use the lockdep annotation ovl_i_mutex_key[depth].
791 * [...] &ovl_i_mutex_dir_key[depth] (stack_depth=2)
792 * [...] &ovl_i_mutex_dir_key[depth]#2 (stack_depth=1)
793 * [...] &type->i_mutex_dir_key (stack_depth=0)
798 * - inode->i_rwsem (inode_lock[2])
799 * - upper_mnt->mnt_sb->s_writers (ovl_want_write[0])
800 * - OVL_I(inode)->lock (ovl_inode_lock[2])
801 * - OVL_I(lowerinode)->lock (ovl_inode_lock[1])
804 * - inode->i_rwsem (inode_lock[2])
805 * - OVL_I(inode)->lock (ovl_inode_lock[2])
806 * - lowerinode->i_rwsem (inode_lock[1])
807 * - OVL_I(lowerinode)->lock (ovl_inode_lock[1])
809 * But lowerinode->i_rwsem SHOULD NOT be acquired while ovl_want_write() is
810 * held, because it is in reverse order of the non-nested case using the same
812 * - inode->i_rwsem (inode_lock[1])
813 * - upper_mnt->mnt_sb->s_writers (ovl_want_write[0])
814 * - OVL_I(inode)->lock (ovl_inode_lock[1])
825 int depth = inode->i_sb->s_stack_depth - 1; in ovl_lockdep_annotate_inode_mutex_key() local
827 if (WARN_ON_ONCE(depth < 0 || depth >= OVL_MAX_NESTING)) in ovl_lockdep_annotate_inode_mutex_key()
828 depth = 0; in ovl_lockdep_annotate_inode_mutex_key()
830 if (S_ISDIR(inode->i_mode)) in ovl_lockdep_annotate_inode_mutex_key()
831 lockdep_set_class(&inode->i_rwsem, &ovl_i_mutex_dir_key[depth]); in ovl_lockdep_annotate_inode_mutex_key()
833 lockdep_set_class(&inode->i_rwsem, &ovl_i_mutex_key[depth]); in ovl_lockdep_annotate_inode_mutex_key()
835 lockdep_set_class(&OVL_I(inode)->lock, &ovl_i_lock_key[depth]); in ovl_lockdep_annotate_inode_mutex_key()
841 struct ovl_fs *ofs = OVL_FS(inode->i_sb); in ovl_next_ino()
843 inode->i_ino = atomic_long_inc_return(&ofs->last_ino); in ovl_next_ino()
844 if (unlikely(!inode->i_ino)) in ovl_next_ino()
845 inode->i_ino = atomic_long_inc_return(&ofs->last_ino); in ovl_next_ino()
850 struct ovl_fs *ofs = OVL_FS(inode->i_sb); in ovl_map_ino()
852 unsigned int xinoshift = 64 - xinobits; in ovl_map_ino()
856 * bits to encode layer), set the same value used for st_ino to i_ino, in ovl_map_ino()
861 inode->i_ino = ino; in ovl_map_ino()
865 inode->i_ino |= (unsigned long)fsid << (xinoshift + 1); in ovl_map_ino()
870 * For directory inodes on non-samefs with xino disabled or xino in ovl_map_ino()
871 * overflow, we allocate a non-persistent inode number, to be used for in ovl_map_ino()
875 * layer (fsid 0), use the lowest xinobit to map the non in ovl_map_ino()
878 if (S_ISDIR(inode->i_mode)) { in ovl_map_ino()
881 inode->i_ino &= ~0UL >> xinobits; in ovl_map_ino()
882 inode->i_ino |= 1UL << xinoshift; in ovl_map_ino()
893 oi->__upperdentry = oip->upperdentry; in ovl_inode_init()
894 oi->oe = oip->oe; in ovl_inode_init()
895 oi->redirect = oip->redirect; in ovl_inode_init()
896 oi->lowerdata_redirect = oip->lowerdata_redirect; in ovl_inode_init()
906 inode->i_mode = mode; in ovl_fill_inode()
907 inode->i_flags |= S_NOCMTIME; in ovl_fill_inode()
909 inode->i_acl = inode->i_default_acl = ACL_DONT_CACHE; in ovl_fill_inode()
916 inode->i_op = &ovl_file_inode_operations; in ovl_fill_inode()
917 inode->i_fop = &ovl_file_operations; in ovl_fill_inode()
918 inode->i_mapping->a_ops = &ovl_aops; in ovl_fill_inode()
922 inode->i_op = &ovl_dir_inode_operations; in ovl_fill_inode()
923 inode->i_fop = &ovl_dir_operations; in ovl_fill_inode()
927 inode->i_op = &ovl_symlink_inode_operations; in ovl_fill_inode()
931 inode->i_op = &ovl_special_inode_operations; in ovl_fill_inode()
939 * hardlinks and non-covered lower hardlinks. During the lifetime of a non-pure
964 * On-disk format for indexed nlink:
966 * nlink relative to the upper inode - "U[+-]NUM"
967 * nlink relative to the lower inode - "L[+-]NUM"
979 (int) (inode->i_nlink - realinode->i_nlink)); in ovl_set_nlink_common()
982 return -EIO; in ovl_set_nlink_common()
984 return ovl_setxattr(OVL_FS(inode->i_sb), ovl_dentry_upper(dentry), in ovl_set_nlink_common()
1007 if (!lowerdentry || !upperdentry || d_inode(lowerdentry)->i_nlink == 1) in ovl_get_nlink()
1011 &buf, sizeof(buf) - 1); in ovl_get_nlink()
1017 (buf[1] != '+' && buf[1] != '-')) in ovl_get_nlink()
1024 nlink = d_inode(buf[0] == 'L' ? lowerdentry : upperdentry)->i_nlink; in ovl_get_nlink()
1051 return inode->i_private == data; in ovl_inode_test()
1056 inode->i_private = data; in ovl_inode_set()
1069 if (S_ISDIR(inode->i_mode) && strict) { in ovl_verify_inode()
1070 /* Real lower dir moved to upper layer under us? */ in ovl_verify_inode()
1080 * Allow non-NULL lower inode in ovl_inode even if lowerdentry is NULL. in ovl_verify_inode()
1089 * Allow non-NULL __upperdentry in inode even if upperdentry is NULL. in ovl_verify_inode()
1110 return ERR_PTR(-ESTALE); in ovl_lookup_inode()
1134 * Create an inode cache entry for layer root dir, that will intentionally
1135 * fail ovl_verify_inode(), so any lookup that will find some layer root
1144 return ERR_PTR(-ENOTDIR); in ovl_get_trap_inode()
1149 return ERR_PTR(-ENOMEM); in ovl_get_trap_inode()
1151 if (!(trap->i_state & I_NEW)) { in ovl_get_trap_inode()
1152 /* Conflicting layer roots? */ in ovl_get_trap_inode()
1154 return ERR_PTR(-ELOOP); in ovl_get_trap_inode()
1157 trap->i_mode = S_IFDIR; in ovl_get_trap_inode()
1158 trap->i_flags = S_DEAD; in ovl_get_trap_inode()
1186 !d_is_dir(lower) && d_inode(lower)->i_nlink > 1) in ovl_hash_bylower()
1189 /* No, if non-indexed upper with NFS export */ in ovl_hash_bylower()
1190 if (ofs->config.nfs_export && upper) in ovl_hash_bylower()
1210 struct dentry *upperdentry = oip->upperdentry; in ovl_get_inode()
1211 struct ovl_path *lowerpath = ovl_lowerpath(oip->oe); in ovl_get_inode()
1214 struct dentry *lowerdentry = lowerpath ? lowerpath->dentry : NULL; in ovl_get_inode()
1217 .mnt = upperdentry ? ovl_upper_mnt(ofs) : lowerpath->layer->mnt, in ovl_get_inode()
1220 oip->index); in ovl_get_inode()
1221 int fsid = bylower ? lowerpath->layer->fsid : 0; in ovl_get_inode()
1224 int err = oip->newinode ? -EEXIST : -ENOMEM; in ovl_get_inode()
1230 * Copy up origin (lower) may exist for non-indexed upper, but we must in ovl_get_inode()
1233 is_dir = S_ISDIR(realinode->i_mode); in ovl_get_inode()
1237 unsigned int nlink = is_dir ? 1 : realinode->i_nlink; in ovl_get_inode()
1239 inode = ovl_iget5(sb, oip->newinode, key); in ovl_get_inode()
1242 if (!(inode->i_state & I_NEW)) { in ovl_get_inode()
1250 err = -ESTALE; in ovl_get_inode()
1255 ovl_free_entry(oip->oe); in ovl_get_inode()
1256 kfree(oip->redirect); in ovl_get_inode()
1257 kfree(oip->lowerdata_redirect); in ovl_get_inode()
1261 /* Recalculate nlink for non-dir due to indexing */ in ovl_get_inode()
1266 ino = key->i_ino; in ovl_get_inode()
1271 err = -ENOMEM; in ovl_get_inode()
1274 ino = realinode->i_ino; in ovl_get_inode()
1275 fsid = lowerpath->layer->fsid; in ovl_get_inode()
1277 ovl_fill_inode(inode, realinode->i_mode, realinode->i_rdev); in ovl_get_inode()
1283 if (oip->index) in ovl_get_inode()
1289 /* Check for non-merge dir that may have whiteouts */ in ovl_get_inode()
1291 if (((upperdentry && lowerdentry) || ovl_numlower(oip->oe) > 1) || in ovl_get_inode()
1297 /* Check for immutable/append-only inode flags in xattr */ in ovl_get_inode()
1301 if (inode->i_state & I_NEW) in ovl_get_inode()