Lines Matching +full:lower +full:- +full:case

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()
83 ovl_revert_creds(dentry->d_sb, old_cred); 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()
183 * If lower filesystem supports NFS file handles, this also guaranties 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()
201 * Lower hardlinks may be broken on copy up to different in ovl_getattr()
202 * upper files, so we cannot use the lower origin st_ino in ovl_getattr()
203 * for those different files, even for the same fs case. in ovl_getattr()
206 * same dir on a lower layer. With the "verify_lower" in ovl_getattr()
207 * feature, we do not use the lower origin st_ino, if 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()
223 * If we are querying a metacopy dentry and lower in ovl_getattr()
226 * vfs_getattr(). If lower itself is metacopy, then in ovl_getattr()
231 stat->blocks = lowerstat.blocks; in ovl_getattr()
238 * If lower is not same as lowerdata or if there was 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()
275 ovl_revert_creds(dentry->d_sb, old_cred); 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()
309 ovl_revert_creds(inode->i_sb, old_cred); 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()
326 ovl_revert_creds(dentry->d_sb, old_cred); 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()
371 ovl_revert_creds(dentry->d_sb, old_cred); in ovl_xattr_set()
390 old_cred = ovl_override_creds(dentry->d_sb); in ovl_xattr_get()
393 ovl_revert_creds(dentry->d_sb, old_cred); in ovl_xattr_get()
403 /* List all non-trusted xatts */ in ovl_can_list()
419 old_cred = ovl_override_creds(dentry->d_sb); in ovl_listxattr()
421 ovl_revert_creds(dentry->d_sb, old_cred); in ovl_listxattr()
431 return -EIO; in ovl_listxattr()
433 len -= slen; in ovl_listxattr()
434 if (!ovl_can_list(dentry->d_sb, s)) { in ovl_listxattr()
435 res -= slen; in ovl_listxattr()
454 old_cred = ovl_override_creds(inode->i_sb); in ovl_get_acl()
456 ovl_revert_creds(inode->i_sb, old_cred); in ovl_get_acl()
464 struct ovl_fs *ofs = inode->i_sb->s_fs_info; in ovl_update_time()
472 inode->i_atime = d_inode(upperpath.dentry)->i_atime; in ovl_update_time()
485 if (!realinode->i_op->fiemap) in ovl_fiemap()
486 return -EOPNOTSUPP; in ovl_fiemap()
488 old_cred = ovl_override_creds(inode->i_sb); in ovl_fiemap()
489 err = realinode->i_op->fiemap(realinode, fieinfo, start, len); in ovl_fiemap()
490 ovl_revert_creds(inode->i_sb, old_cred); in ovl_fiemap()
523 /* For O_DIRECT dentry_open() checks f_mapping->a_ops->direct_IO */
529 * overlayfs instance as lower layer. We need to annotate the
540 * [...] &type->i_mutex_dir_key (stack_depth=0)
545 * - inode->i_rwsem (inode_lock[2])
546 * - upper_mnt->mnt_sb->s_writers (ovl_want_write[0])
547 * - OVL_I(inode)->lock (ovl_inode_lock[2])
548 * - OVL_I(lowerinode)->lock (ovl_inode_lock[1])
551 * - inode->i_rwsem (inode_lock[2])
552 * - OVL_I(inode)->lock (ovl_inode_lock[2])
553 * - lowerinode->i_rwsem (inode_lock[1])
554 * - OVL_I(lowerinode)->lock (ovl_inode_lock[1])
556 * But lowerinode->i_rwsem SHOULD NOT be acquired while ovl_want_write() is
557 * held, because it is in reverse order of the non-nested case using the same
559 * - inode->i_rwsem (inode_lock[1])
560 * - upper_mnt->mnt_sb->s_writers (ovl_want_write[0])
561 * - OVL_I(inode)->lock (ovl_inode_lock[1])
572 int depth = inode->i_sb->s_stack_depth - 1; in ovl_lockdep_annotate_inode_mutex_key()
577 if (S_ISDIR(inode->i_mode)) in ovl_lockdep_annotate_inode_mutex_key()
578 lockdep_set_class(&inode->i_rwsem, &ovl_i_mutex_dir_key[depth]); in ovl_lockdep_annotate_inode_mutex_key()
580 lockdep_set_class(&inode->i_rwsem, &ovl_i_mutex_key[depth]); in ovl_lockdep_annotate_inode_mutex_key()
582 lockdep_set_class(&OVL_I(inode)->lock, &ovl_i_lock_key[depth]); in ovl_lockdep_annotate_inode_mutex_key()
588 struct ovl_fs *ofs = inode->i_sb->s_fs_info; in ovl_next_ino()
590 inode->i_ino = atomic_long_inc_return(&ofs->last_ino); in ovl_next_ino()
591 if (unlikely(!inode->i_ino)) in ovl_next_ino()
592 inode->i_ino = atomic_long_inc_return(&ofs->last_ino); in ovl_next_ino()
597 int xinobits = ovl_xino_bits(inode->i_sb); in ovl_map_ino()
598 unsigned int xinoshift = 64 - xinobits; in ovl_map_ino()
607 inode->i_ino = ino; in ovl_map_ino()
608 if (ovl_same_fs(inode->i_sb)) { in ovl_map_ino()
611 inode->i_ino |= (unsigned long)fsid << (xinoshift + 1); in ovl_map_ino()
616 * For directory inodes on non-samefs with xino disabled or xino in ovl_map_ino()
617 * overflow, we allocate a non-persistent inode number, to be used for in ovl_map_ino()
624 if (S_ISDIR(inode->i_mode)) { in ovl_map_ino()
627 inode->i_ino &= ~0UL >> xinobits; in ovl_map_ino()
628 inode->i_ino |= 1UL << xinoshift; in ovl_map_ino()
638 if (oip->upperdentry) in ovl_inode_init()
639 OVL_I(inode)->__upperdentry = oip->upperdentry; in ovl_inode_init()
640 if (oip->lowerpath && oip->lowerpath->dentry) in ovl_inode_init()
641 OVL_I(inode)->lower = igrab(d_inode(oip->lowerpath->dentry)); in ovl_inode_init()
642 if (oip->lowerdata) in ovl_inode_init()
643 OVL_I(inode)->lowerdata = igrab(d_inode(oip->lowerdata)); in ovl_inode_init()
653 inode->i_mode = mode; in ovl_fill_inode()
654 inode->i_flags |= S_NOCMTIME; in ovl_fill_inode()
656 inode->i_acl = inode->i_default_acl = ACL_DONT_CACHE; in ovl_fill_inode()
662 case S_IFREG: in ovl_fill_inode()
663 inode->i_op = &ovl_file_inode_operations; in ovl_fill_inode()
664 inode->i_fop = &ovl_file_operations; in ovl_fill_inode()
665 inode->i_mapping->a_ops = &ovl_aops; in ovl_fill_inode()
668 case S_IFDIR: in ovl_fill_inode()
669 inode->i_op = &ovl_dir_inode_operations; in ovl_fill_inode()
670 inode->i_fop = &ovl_dir_operations; in ovl_fill_inode()
673 case S_IFLNK: in ovl_fill_inode()
674 inode->i_op = &ovl_symlink_inode_operations; in ovl_fill_inode()
678 inode->i_op = &ovl_special_inode_operations; in ovl_fill_inode()
686 * hardlinks and non-covered lower hardlinks. During the lifetime of a non-pure
689 * 1. Lower hardlink copy up
691 * 3. Lower hardlink whiteout or renamed over
693 * For the first, copy up case, the union nlink does not change, whether the
696 * lower inode nlink in the index inode xattr trusted.overlay.nlink.
698 * For the second, upper hardlink case, the union nlink should be incremented
703 * For the last, lower cover up case, we simplify things by preceding the
711 * On-disk format for indexed nlink:
713 * nlink relative to the upper inode - "U[+-]NUM"
714 * nlink relative to the lower inode - "L[+-]NUM"
726 (int) (inode->i_nlink - realinode->i_nlink)); in ovl_set_nlink_common()
729 return -EIO; in ovl_set_nlink_common()
731 return ovl_do_setxattr(OVL_FS(inode->i_sb), ovl_dentry_upper(dentry), in ovl_set_nlink_common()
754 if (!lowerdentry || !upperdentry || d_inode(lowerdentry)->i_nlink == 1) in ovl_get_nlink()
758 &buf, sizeof(buf) - 1); in ovl_get_nlink()
764 (buf[1] != '+' && buf[1] != '-')) in ovl_get_nlink()
771 nlink = d_inode(buf[0] == 'L' ? lowerdentry : upperdentry)->i_nlink; in ovl_get_nlink()
798 return inode->i_private == data; in ovl_inode_test()
803 inode->i_private = data; in ovl_inode_set()
812 * checks, so NULL lower/upper in dentry must match NULL lower/upper in in ovl_verify_inode()
814 * 'unknown' lower/upper. in ovl_verify_inode()
816 if (S_ISDIR(inode->i_mode) && strict) { in ovl_verify_inode()
817 /* Real lower dir moved to upper layer under us? */ in ovl_verify_inode()
827 * Allow non-NULL lower inode in ovl_inode even if lowerdentry is NULL. in ovl_verify_inode()
829 * or hardlinked overlay dentry and lower dentry cannot be followed in ovl_verify_inode()
830 * by origin because lower fs does not support file handles. in ovl_verify_inode()
836 * Allow non-NULL __upperdentry in inode even if upperdentry is NULL. in ovl_verify_inode()
837 * This happens when finding a lower alias for a copied up hard link. in ovl_verify_inode()
857 return ERR_PTR(-ESTALE); in ovl_lookup_inode()
891 return ERR_PTR(-ENOTDIR); in ovl_get_trap_inode()
896 return ERR_PTR(-ENOMEM); in ovl_get_trap_inode()
898 if (!(trap->i_state & I_NEW)) { in ovl_get_trap_inode()
901 return ERR_PTR(-ELOOP); in ovl_get_trap_inode()
904 trap->i_mode = S_IFDIR; in ovl_get_trap_inode()
905 trap->i_flags = S_DEAD; in ovl_get_trap_inode()
912 * Does overlay inode need to be hashed by lower inode?
915 struct dentry *lower, bool index) in ovl_hash_bylower() argument
917 struct ovl_fs *ofs = sb->s_fs_info; in ovl_hash_bylower()
920 if (!lower) in ovl_hash_bylower()
931 /* No, if lower hardlink is or will be broken on copy up */ in ovl_hash_bylower()
933 !d_is_dir(lower) && d_inode(lower)->i_nlink > 1) in ovl_hash_bylower()
936 /* No, if non-indexed upper with NFS export */ in ovl_hash_bylower()
937 if (sb->s_export_op && upper) in ovl_hash_bylower()
940 /* Otherwise, hash by lower inode for fsnotify */ in ovl_hash_bylower()
957 struct dentry *upperdentry = oip->upperdentry; in ovl_get_inode()
958 struct ovl_path *lowerpath = oip->lowerpath; in ovl_get_inode()
961 struct dentry *lowerdentry = lowerpath ? lowerpath->dentry : NULL; in ovl_get_inode()
963 oip->index); in ovl_get_inode()
964 int fsid = bylower ? lowerpath->layer->fsid : 0; in ovl_get_inode()
967 int err = oip->newinode ? -EEXIST : -ENOMEM; in ovl_get_inode()
973 * Copy up origin (lower) may exist for non-indexed upper, but we must in ovl_get_inode()
974 * not use lower as hash key if this is a broken hardlink. in ovl_get_inode()
976 is_dir = S_ISDIR(realinode->i_mode); in ovl_get_inode()
980 unsigned int nlink = is_dir ? 1 : realinode->i_nlink; in ovl_get_inode()
982 inode = ovl_iget5(sb, oip->newinode, key); in ovl_get_inode()
985 if (!(inode->i_state & I_NEW)) { in ovl_get_inode()
993 err = -ESTALE; in ovl_get_inode()
998 kfree(oip->redirect); in ovl_get_inode()
1002 /* Recalculate nlink for non-dir due to indexing */ in ovl_get_inode()
1007 ino = key->i_ino; in ovl_get_inode()
1009 /* Lower hardlink that will be broken on copy up */ in ovl_get_inode()
1012 err = -ENOMEM; in ovl_get_inode()
1015 ino = realinode->i_ino; in ovl_get_inode()
1016 fsid = lowerpath->layer->fsid; in ovl_get_inode()
1018 ovl_fill_inode(inode, realinode->i_mode, realinode->i_rdev); in ovl_get_inode()
1024 if (oip->index) in ovl_get_inode()
1027 OVL_I(inode)->redirect = oip->redirect; in ovl_get_inode()
1032 /* Check for non-merge dir that may have whiteouts */ in ovl_get_inode()
1034 if (((upperdentry && lowerdentry) || oip->numlower > 1) || in ovl_get_inode()
1040 if (inode->i_state & I_NEW) in ovl_get_inode()