Lines Matching refs:ofs
33 struct ovl_fs *ofs = OVL_FS(d->sb); in ovl_check_redirect() local
35 buf = ovl_get_redirect_xattr(ofs, dentry, prelen + strlen(post)); in ovl_check_redirect()
108 static struct ovl_fh *ovl_get_fh(struct ovl_fs *ofs, struct dentry *dentry, in ovl_get_fh() argument
115 res = ovl_do_getxattr(ofs, dentry, ox, NULL, 0); in ovl_get_fh()
129 res = ovl_do_getxattr(ofs, dentry, ox, fh->buf, res); in ovl_get_fh()
343 int ovl_check_origin_fh(struct ovl_fs *ofs, struct ovl_fh *fh, bool connected, in ovl_check_origin_fh() argument
349 for (i = 1; i < ofs->numlayer; i++) { in ovl_check_origin_fh()
354 if (ofs->layers[i].fsid && in ovl_check_origin_fh()
355 ofs->layers[i].fs->bad_uuid) in ovl_check_origin_fh()
358 origin = ovl_decode_real_fh(fh, ofs->layers[i].mnt, in ovl_check_origin_fh()
381 .layer = &ofs->layers[i] in ovl_check_origin_fh()
394 static int ovl_check_origin(struct ovl_fs *ofs, struct dentry *upperdentry, in ovl_check_origin() argument
397 struct ovl_fh *fh = ovl_get_fh(ofs, upperdentry, OVL_XATTR_ORIGIN); in ovl_check_origin()
403 err = ovl_check_origin_fh(ofs, fh, false, upperdentry, stackp); in ovl_check_origin()
419 static int ovl_verify_fh(struct ovl_fs *ofs, struct dentry *dentry, in ovl_verify_fh() argument
422 struct ovl_fh *ofh = ovl_get_fh(ofs, dentry, ox); in ovl_verify_fh()
446 int ovl_verify_set_fh(struct ovl_fs *ofs, struct dentry *dentry, in ovl_verify_set_fh() argument
461 err = ovl_verify_fh(ofs, dentry, ox, fh); in ovl_verify_set_fh()
463 err = ovl_do_setxattr(ofs, dentry, ox, fh->buf, fh->fb.len); in ovl_verify_set_fh()
480 struct dentry *ovl_index_upper(struct ovl_fs *ofs, struct dentry *index) in ovl_index_upper() argument
488 fh = ovl_get_fh(ofs, index, OVL_XATTR_UPPER); in ovl_index_upper()
492 upper = ovl_decode_real_fh(fh, ovl_upper_mnt(ofs), true); in ovl_index_upper()
513 int ovl_verify_index(struct ovl_fs *ofs, struct dentry *index) in ovl_verify_index() argument
555 if (d_is_dir(index) && !ofs->config.nfs_export) in ovl_verify_index()
565 upper = ovl_index_upper(ofs, index); in ovl_verify_index()
581 err = ovl_verify_fh(ofs, upper, OVL_XATTR_ORIGIN, fh); in ovl_verify_index()
588 err = ovl_check_origin_fh(ofs, fh, false, index, &stack); in ovl_verify_index()
592 if (ovl_get_nlink(ofs, origin.dentry, index, 0) == 0) in ovl_verify_index()
660 struct dentry *ovl_get_index_fh(struct ovl_fs *ofs, struct ovl_fh *fh) in ovl_get_index_fh() argument
670 index = lookup_positive_unlocked(name.name, ofs->indexdir, name.len); in ovl_get_index_fh()
689 struct dentry *ovl_lookup_index(struct ovl_fs *ofs, struct dentry *upper, in ovl_lookup_index() argument
702 index = lookup_positive_unlocked(name.name, ofs->indexdir, name.len); in ovl_lookup_index()
748 err = ovl_verify_upper(ofs, index, upper, false); in ovl_lookup_index()
797 static int ovl_fix_origin(struct ovl_fs *ofs, struct dentry *dentry, in ovl_fix_origin() argument
802 if (ovl_check_origin_xattr(ofs, upper)) in ovl_fix_origin()
822 struct ovl_fs *ofs = dentry->d_sb->s_fs_info; in ovl_lookup() local
843 .last = ofs->config.redirect_follow ? false : !poe->numlower, in ovl_lookup()
848 if (dentry->d_name.len > ofs->namelen) in ovl_lookup()
874 err = ovl_check_origin(ofs, upperdentry, &origin_path); in ovl_lookup()
895 stack = kcalloc(ofs->numlayer - 1, sizeof(struct ovl_path), in ovl_lookup()
904 if (!ofs->config.redirect_follow) in ovl_lookup()
916 if ((uppermetacopy || d.metacopy) && !ofs->config.metacopy) { in ovl_lookup()
927 if (upperdentry && !ctr && !ofs->noxattr && d.is_dir) { in ovl_lookup()
928 err = ovl_fix_origin(ofs, dentry, this, upperdentry); in ovl_lookup()
946 (!d.is_dir && ofs->config.index && origin_path))) { in ovl_lookup()
947 err = ovl_verify_origin(ofs, upperdentry, this, false); in ovl_lookup()
983 if (d.redirect && !ofs->config.redirect_follow) { in ovl_lookup()
1045 index = ovl_lookup_index(ofs, upperdentry, origin, true); in ovl_lookup()
1068 upperredirect = ovl_get_redirect_xattr(ofs, upperdentry, 0); in ovl_lookup()
1074 err = ovl_check_metacopy_xattr(ofs, upperdentry); in ovl_lookup()