• Home
  • Raw
  • Download

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

1 // SPDX-License-Identifier: GPL-2.0-only
32 if (attr->ia_valid & ATTR_SIZE) { in ovl_setattr()
35 err = -ETXTBSY; in ovl_setattr()
36 if (atomic_read(&realinode->i_writecount) < 0) in ovl_setattr()
52 if (attr->ia_valid & ATTR_SIZE) { in ovl_setattr()
59 if (attr->ia_valid & (ATTR_KILL_SUID|ATTR_KILL_SGID)) in ovl_setattr()
60 attr->ia_valid &= ~ATTR_MODE; in ovl_setattr()
65 * filesystem rely on attr->ia_file in ovl_setattr()
67 attr->ia_valid &= ~ATTR_FILE; in ovl_setattr()
70 * If open(O_TRUNC) is done, VFS calls ->setattr with ATTR_OPEN in ovl_setattr()
72 * filesystem during open -> do not pass ATTR_OPEN. This in ovl_setattr()
78 attr->ia_valid &= ~ATTR_OPEN; in ovl_setattr()
80 inode_lock(upperdentry->d_inode); in ovl_setattr()
81 old_cred = ovl_override_creds(dentry->d_sb); in ovl_setattr()
85 ovl_copyattr(upperdentry->d_inode, dentry->d_inode); in ovl_setattr()
86 inode_unlock(upperdentry->d_inode); in ovl_setattr()
99 bool samefs = ovl_same_fs(dentry->d_sb); in ovl_map_dev_ino()
100 unsigned int xinobits = ovl_xino_bits(dentry->d_sb); in ovl_map_dev_ino()
101 unsigned int xinoshift = 64 - xinobits; in ovl_map_dev_ino()
107 * which is friendly to du -x. in ovl_map_dev_ino()
109 stat->dev = dentry->d_sb->s_dev; in ovl_map_dev_ino()
117 * the non-peresistent inode numbers range in case of overflow. in ovl_map_dev_ino()
121 if (likely(!(stat->ino >> xinoshift))) { in ovl_map_dev_ino()
122 stat->ino |= ((u64)fsid) << (xinoshift + 1); in ovl_map_dev_ino()
123 stat->dev = dentry->d_sb->s_dev; in ovl_map_dev_ino()
125 } else if (ovl_xino_warn(dentry->d_sb)) { in ovl_map_dev_ino()
127 dentry, stat->ino, xinobits); in ovl_map_dev_ino()
132 if (S_ISDIR(dentry->d_inode->i_mode)) { in ovl_map_dev_ino()
135 * -xdev' will scan the entire overlay mount and won't cross the in ovl_map_dev_ino()
142 stat->dev = dentry->d_sb->s_dev; in ovl_map_dev_ino()
143 stat->ino = dentry->d_inode->i_ino; in ovl_map_dev_ino()
146 * For non-samefs setup, if we cannot map all layers st_ino in ovl_map_dev_ino()
151 stat->dev = OVL_FS(dentry->d_sb)->fs[fsid].pseudo_dev; in ovl_map_dev_ino()
160 struct dentry *dentry = path->dentry; in ovl_getattr()
164 bool is_dir = S_ISDIR(dentry->d_inode->i_mode); in ovl_getattr()
172 old_cred = ovl_override_creds(dentry->d_sb); in ovl_getattr()
178 * For non-dir or same fs, we use st_ino of the copy up origin. in ovl_getattr()
180 * With xino feature and non-samefs, we use st_ino of the copy up in ovl_getattr()
181 * origin masked with high bits that represent the layer id. in ovl_getattr()
186 if (!is_dir || ovl_same_dev(dentry->d_sb)) { in ovl_getattr()
188 fsid = ovl_layer_lower(dentry)->fsid; in ovl_getattr()
206 * same dir on a lower layer. With the "verify_lower" in ovl_getattr()
216 (!ovl_verify_lower(dentry->d_sb) && in ovl_getattr()
218 fsid = ovl_layer_lower(dentry)->fsid; in ovl_getattr()
219 stat->ino = lowerstat.ino; in ovl_getattr()
231 stat->blocks = lowerstat.blocks; in ovl_getattr()
249 stat->blocks = lowerdatastat.blocks; in ovl_getattr()
263 stat->nlink = 1; in ovl_getattr()
268 * and non-covered lower hardlinks. It does not include the upper in ovl_getattr()
272 stat->nlink = dentry->d_inode->i_nlink; in ovl_getattr()
290 return -ECHILD; in ovl_permission()
301 old_cred = ovl_override_creds(inode->i_sb); in ovl_permission()
303 !special_file(realinode->i_mode) && mask & MAY_WRITE) { in ovl_permission()
322 return ERR_PTR(-ECHILD); in ovl_get_link()
324 old_cred = ovl_override_creds(dentry->d_sb); in ovl_get_link()
333 sizeof(OVL_XATTR_PREFIX) - 1) == 0; in ovl_is_private_xattr()
349 old_cred = ovl_override_creds(dentry->d_sb); in ovl_xattr_set()
364 old_cred = ovl_override_creds(dentry->d_sb); in ovl_xattr_set()
390 old_cred = ovl_override_creds(dentry->d_sb); in ovl_xattr_get()
402 /* List all non-trusted xatts */ in ovl_can_list()
418 old_cred = ovl_override_creds(dentry->d_sb); in ovl_listxattr()
430 return -EIO; in ovl_listxattr()
432 len -= slen; in ovl_listxattr()
433 if (!ovl_can_list(dentry->d_sb, s)) { in ovl_listxattr()
434 res -= slen; in ovl_listxattr()
453 old_cred = ovl_override_creds(inode->i_sb); in ovl_get_acl()
463 struct ovl_fs *ofs = inode->i_sb->s_fs_info; in ovl_update_time()
471 inode->i_atime = d_inode(upperpath.dentry)->i_atime; in ovl_update_time()
484 if (!realinode->i_op->fiemap) in ovl_fiemap()
485 return -EOPNOTSUPP; in ovl_fiemap()
487 old_cred = ovl_override_creds(inode->i_sb); in ovl_fiemap()
488 err = realinode->i_op->fiemap(realinode, fieinfo, start, len); in ovl_fiemap()
522 /* For O_DIRECT dentry_open() checks f_mapping->a_ops->direct_IO */
528 * overlayfs instance as lower layer. We need to annotate the
531 * depth 0 (there is always a real fs below it). An overlayfs
532 * inode lock will use the lockdep annotaion ovl_i_mutex_key[depth].
537 * [...] &ovl_i_mutex_dir_key[depth] (stack_depth=2)
538 * [...] &ovl_i_mutex_dir_key[depth]#2 (stack_depth=1)
539 * [...] &type->i_mutex_dir_key (stack_depth=0)
544 * - inode->i_rwsem (inode_lock[2])
545 * - upper_mnt->mnt_sb->s_writers (ovl_want_write[0])
546 * - OVL_I(inode)->lock (ovl_inode_lock[2])
547 * - OVL_I(lowerinode)->lock (ovl_inode_lock[1])
550 * - inode->i_rwsem (inode_lock[2])
551 * - OVL_I(inode)->lock (ovl_inode_lock[2])
552 * - lowerinode->i_rwsem (inode_lock[1])
553 * - OVL_I(lowerinode)->lock (ovl_inode_lock[1])
555 * But lowerinode->i_rwsem SHOULD NOT be acquired while ovl_want_write() is
556 * held, because it is in reverse order of the non-nested case using the same
558 * - inode->i_rwsem (inode_lock[1])
559 * - upper_mnt->mnt_sb->s_writers (ovl_want_write[0])
560 * - OVL_I(inode)->lock (ovl_inode_lock[1])
571 int depth = inode->i_sb->s_stack_depth - 1; in ovl_lockdep_annotate_inode_mutex_key() local
573 if (WARN_ON_ONCE(depth < 0 || depth >= OVL_MAX_NESTING)) in ovl_lockdep_annotate_inode_mutex_key()
574 depth = 0; in ovl_lockdep_annotate_inode_mutex_key()
576 if (S_ISDIR(inode->i_mode)) in ovl_lockdep_annotate_inode_mutex_key()
577 lockdep_set_class(&inode->i_rwsem, &ovl_i_mutex_dir_key[depth]); in ovl_lockdep_annotate_inode_mutex_key()
579 lockdep_set_class(&inode->i_rwsem, &ovl_i_mutex_key[depth]); in ovl_lockdep_annotate_inode_mutex_key()
581 lockdep_set_class(&OVL_I(inode)->lock, &ovl_i_lock_key[depth]); in ovl_lockdep_annotate_inode_mutex_key()
587 struct ovl_fs *ofs = inode->i_sb->s_fs_info; in ovl_next_ino()
589 inode->i_ino = atomic_long_inc_return(&ofs->last_ino); in ovl_next_ino()
590 if (unlikely(!inode->i_ino)) in ovl_next_ino()
591 inode->i_ino = atomic_long_inc_return(&ofs->last_ino); in ovl_next_ino()
596 int xinobits = ovl_xino_bits(inode->i_sb); in ovl_map_ino()
597 unsigned int xinoshift = 64 - xinobits; in ovl_map_ino()
601 * bits to encode layer), set the same value used for st_ino to i_ino, in ovl_map_ino()
606 inode->i_ino = ino; in ovl_map_ino()
607 if (ovl_same_fs(inode->i_sb)) { in ovl_map_ino()
610 inode->i_ino |= (unsigned long)fsid << (xinoshift + 1); in ovl_map_ino()
615 * For directory inodes on non-samefs with xino disabled or xino in ovl_map_ino()
616 * overflow, we allocate a non-persistent inode number, to be used for in ovl_map_ino()
620 * layer (fsid 0), use the lowest xinobit to map the non in ovl_map_ino()
623 if (S_ISDIR(inode->i_mode)) { in ovl_map_ino()
626 inode->i_ino &= ~0UL >> xinobits; in ovl_map_ino()
627 inode->i_ino |= 1UL << xinoshift; in ovl_map_ino()
637 if (oip->upperdentry) in ovl_inode_init()
638 OVL_I(inode)->__upperdentry = oip->upperdentry; in ovl_inode_init()
639 if (oip->lowerpath && oip->lowerpath->dentry) in ovl_inode_init()
640 OVL_I(inode)->lower = igrab(d_inode(oip->lowerpath->dentry)); in ovl_inode_init()
641 if (oip->lowerdata) in ovl_inode_init()
642 OVL_I(inode)->lowerdata = igrab(d_inode(oip->lowerdata)); in ovl_inode_init()
652 inode->i_mode = mode; in ovl_fill_inode()
653 inode->i_flags |= S_NOCMTIME; in ovl_fill_inode()
655 inode->i_acl = inode->i_default_acl = ACL_DONT_CACHE; in ovl_fill_inode()
662 inode->i_op = &ovl_file_inode_operations; in ovl_fill_inode()
663 inode->i_fop = &ovl_file_operations; in ovl_fill_inode()
664 inode->i_mapping->a_ops = &ovl_aops; in ovl_fill_inode()
668 inode->i_op = &ovl_dir_inode_operations; in ovl_fill_inode()
669 inode->i_fop = &ovl_dir_operations; in ovl_fill_inode()
673 inode->i_op = &ovl_symlink_inode_operations; in ovl_fill_inode()
677 inode->i_op = &ovl_special_inode_operations; in ovl_fill_inode()
685 * hardlinks and non-covered lower hardlinks. During the lifetime of a non-pure
710 * On-disk format for indexed nlink:
712 * nlink relative to the upper inode - "U[+-]NUM"
713 * nlink relative to the lower inode - "L[+-]NUM"
725 (int) (inode->i_nlink - realinode->i_nlink)); in ovl_set_nlink_common()
728 return -EIO; in ovl_set_nlink_common()
730 return ovl_do_setxattr(OVL_FS(inode->i_sb), ovl_dentry_upper(dentry), in ovl_set_nlink_common()
753 if (!lowerdentry || !upperdentry || d_inode(lowerdentry)->i_nlink == 1) in ovl_get_nlink()
757 &buf, sizeof(buf) - 1); in ovl_get_nlink()
763 (buf[1] != '+' && buf[1] != '-')) in ovl_get_nlink()
770 nlink = d_inode(buf[0] == 'L' ? lowerdentry : upperdentry)->i_nlink; in ovl_get_nlink()
797 return inode->i_private == data; in ovl_inode_test()
802 inode->i_private = data; in ovl_inode_set()
815 if (S_ISDIR(inode->i_mode) && strict) { in ovl_verify_inode()
816 /* Real lower dir moved to upper layer under us? */ in ovl_verify_inode()
826 * Allow non-NULL lower inode in ovl_inode even if lowerdentry is NULL. in ovl_verify_inode()
835 * Allow non-NULL __upperdentry in inode even if upperdentry is NULL. in ovl_verify_inode()
856 return ERR_PTR(-ESTALE); in ovl_lookup_inode()
880 * Create an inode cache entry for layer root dir, that will intentionally
881 * fail ovl_verify_inode(), so any lookup that will find some layer root
890 return ERR_PTR(-ENOTDIR); in ovl_get_trap_inode()
895 return ERR_PTR(-ENOMEM); in ovl_get_trap_inode()
897 if (!(trap->i_state & I_NEW)) { in ovl_get_trap_inode()
898 /* Conflicting layer roots? */ in ovl_get_trap_inode()
900 return ERR_PTR(-ELOOP); in ovl_get_trap_inode()
903 trap->i_mode = S_IFDIR; in ovl_get_trap_inode()
904 trap->i_flags = S_DEAD; in ovl_get_trap_inode()
916 struct ovl_fs *ofs = sb->s_fs_info; in ovl_hash_bylower()
932 !d_is_dir(lower) && d_inode(lower)->i_nlink > 1) in ovl_hash_bylower()
935 /* No, if non-indexed upper with NFS export */ in ovl_hash_bylower()
936 if (sb->s_export_op && upper) in ovl_hash_bylower()
956 struct dentry *upperdentry = oip->upperdentry; in ovl_get_inode()
957 struct ovl_path *lowerpath = oip->lowerpath; in ovl_get_inode()
960 struct dentry *lowerdentry = lowerpath ? lowerpath->dentry : NULL; in ovl_get_inode()
962 oip->index); in ovl_get_inode()
963 int fsid = bylower ? lowerpath->layer->fsid : 0; in ovl_get_inode()
966 int err = oip->newinode ? -EEXIST : -ENOMEM; in ovl_get_inode()
972 * Copy up origin (lower) may exist for non-indexed upper, but we must in ovl_get_inode()
975 is_dir = S_ISDIR(realinode->i_mode); in ovl_get_inode()
979 unsigned int nlink = is_dir ? 1 : realinode->i_nlink; in ovl_get_inode()
981 inode = ovl_iget5(sb, oip->newinode, key); in ovl_get_inode()
984 if (!(inode->i_state & I_NEW)) { in ovl_get_inode()
992 err = -ESTALE; in ovl_get_inode()
997 kfree(oip->redirect); in ovl_get_inode()
1001 /* Recalculate nlink for non-dir due to indexing */ in ovl_get_inode()
1006 ino = key->i_ino; in ovl_get_inode()
1011 err = -ENOMEM; in ovl_get_inode()
1014 ino = realinode->i_ino; in ovl_get_inode()
1015 fsid = lowerpath->layer->fsid; in ovl_get_inode()
1017 ovl_fill_inode(inode, realinode->i_mode, realinode->i_rdev); in ovl_get_inode()
1023 if (oip->index) in ovl_get_inode()
1026 OVL_I(inode)->redirect = oip->redirect; in ovl_get_inode()
1031 /* Check for non-merge dir that may have whiteouts */ in ovl_get_inode()
1033 if (((upperdentry && lowerdentry) || oip->numlower > 1) || in ovl_get_inode()
1039 if (inode->i_state & I_NEW) in ovl_get_inode()