Lines Matching refs:dentry

20 	struct dentry *dentry;  member
73 static int ovl_acceptable(void *ctx, struct dentry *dentry) in ovl_acceptable() argument
79 if (!d_is_dir(dentry)) in ovl_acceptable()
83 if (d_unhashed(dentry)) in ovl_acceptable()
87 return is_subdir(dentry, ((struct vfsmount *)ctx)->mnt_root); in ovl_acceptable()
117 static struct ovl_fh *ovl_get_fh(struct ovl_fs *ofs, struct dentry *upperdentry, in ovl_get_fh()
174 struct dentry *ovl_decode_real_fh(struct ovl_fs *ofs, struct ovl_fh *fh, in ovl_decode_real_fh()
177 struct dentry *real; in ovl_decode_real_fh()
211 static struct dentry *ovl_lookup_positive_unlocked(struct ovl_lookup_data *d, in ovl_lookup_positive_unlocked()
213 struct dentry *base, int len, in ovl_lookup_positive_unlocked()
216 struct dentry *ret = lookup_one_unlocked(mnt_idmap(d->layer->mnt), in ovl_lookup_positive_unlocked()
233 static int ovl_lookup_single(struct dentry *base, struct ovl_lookup_data *d, in ovl_lookup_single()
236 struct dentry **ret, bool drop_negative) in ovl_lookup_single()
239 struct dentry *this = NULL; in ovl_lookup_single()
282 path.dentry = this; in ovl_lookup_single()
356 static int ovl_lookup_layer(struct dentry *base, struct ovl_lookup_data *d, in ovl_lookup_layer()
357 struct dentry **ret, bool drop_negative) in ovl_lookup_layer()
361 struct dentry *dentry = NULL; in ovl_lookup_layer() local
381 dput(dentry); in ovl_lookup_layer()
384 dentry = base; in ovl_lookup_layer()
393 *ret = dentry; in ovl_lookup_layer()
397 static int ovl_lookup_data_layer(struct dentry *dentry, const char *redirect, in ovl_lookup_data_layer() argument
407 dentry, redirect, layer->idx, err); in ovl_lookup_data_layer()
413 if (ovl_dentry_weird(datapath->dentry)) in ovl_lookup_data_layer()
418 if (!d_is_reg(datapath->dentry)) in ovl_lookup_data_layer()
430 static int ovl_lookup_data_layers(struct dentry *dentry, const char *redirect, in ovl_lookup_data_layers() argument
433 struct ovl_fs *ofs = OVL_FS(dentry->d_sb); in ovl_lookup_data_layers()
441 err = ovl_lookup_data_layer(dentry, redirect, layer, &datapath); in ovl_lookup_data_layers()
444 lowerdata->dentry = datapath.dentry; in ovl_lookup_data_layers()
454 struct dentry *upperdentry, struct ovl_path **stackp) in ovl_check_origin_fh()
456 struct dentry *origin = NULL; in ovl_check_origin_fh()
490 .dentry = origin, in ovl_check_origin_fh()
504 static int ovl_check_origin(struct ovl_fs *ofs, struct dentry *upperdentry, in ovl_check_origin()
529 static int ovl_verify_fh(struct ovl_fs *ofs, struct dentry *dentry, in ovl_verify_fh() argument
532 struct ovl_fh *ofh = ovl_get_fh(ofs, dentry, ox); in ovl_verify_fh()
548 int ovl_verify_set_fh(struct ovl_fs *ofs, struct dentry *dentry, in ovl_verify_set_fh() argument
554 err = ovl_verify_fh(ofs, dentry, ox, fh); in ovl_verify_set_fh()
556 err = ovl_setxattr(ofs, dentry, ox, fh->buf, fh->fb.len); in ovl_verify_set_fh()
569 int ovl_verify_origin_xattr(struct ovl_fs *ofs, struct dentry *dentry, in ovl_verify_origin_xattr() argument
570 enum ovl_xattr ox, struct dentry *real, in ovl_verify_origin_xattr()
584 err = ovl_verify_set_fh(ofs, dentry, ox, fh, is_upper, set); in ovl_verify_origin_xattr()
602 struct dentry *ovl_index_upper(struct ovl_fs *ofs, struct dentry *index, in ovl_index_upper()
606 struct dentry *upper; in ovl_index_upper()
636 int ovl_verify_index(struct ovl_fs *ofs, struct dentry *index) in ovl_verify_index()
642 struct dentry *upper = NULL; in ovl_verify_index()
715 if (ovl_get_nlink(ofs, origin.dentry, index, 0) == 0) in ovl_verify_index()
720 dput(origin.dentry); in ovl_verify_index()
767 int ovl_get_index_name(struct ovl_fs *ofs, struct dentry *origin, in ovl_get_index_name()
784 struct dentry *ovl_get_index_fh(struct ovl_fs *ofs, struct ovl_fh *fh) in ovl_get_index_fh()
786 struct dentry *index; in ovl_get_index_fh()
813 struct dentry *ovl_lookup_index(struct ovl_fs *ofs, struct dentry *upper, in ovl_lookup_index()
814 struct dentry *origin, bool verify) in ovl_lookup_index()
816 struct dentry *index; in ovl_lookup_index()
903 int ovl_path_next(int idx, struct dentry *dentry, struct path *path, in ovl_path_next() argument
906 struct ovl_entry *oe = OVL_E(dentry); in ovl_path_next()
911 ovl_path_upper(dentry, path); in ovl_path_next()
912 if (path->dentry) { in ovl_path_next()
913 *layer = &OVL_FS(dentry->d_sb)->layers[0]; in ovl_path_next()
919 path->dentry = lowerstack[idx - 1].dentry; in ovl_path_next()
927 static int ovl_fix_origin(struct ovl_fs *ofs, struct dentry *dentry, in ovl_fix_origin() argument
928 struct dentry *lower, struct dentry *upper) in ovl_fix_origin()
940 err = ovl_want_write(dentry); in ovl_fix_origin()
946 err = ovl_set_impure(dentry->d_parent, upper->d_parent); in ovl_fix_origin()
948 ovl_drop_write(dentry); in ovl_fix_origin()
954 static int ovl_maybe_validate_verity(struct dentry *dentry) in ovl_maybe_validate_verity() argument
956 struct ovl_fs *ofs = OVL_FS(dentry->d_sb); in ovl_maybe_validate_verity()
957 struct inode *inode = d_inode(dentry); in ovl_maybe_validate_verity()
962 !ovl_is_metacopy_dentry(dentry) || in ovl_maybe_validate_verity()
969 dentry); in ovl_maybe_validate_verity()
975 ovl_path_lowerdata(dentry, &datapath); in ovl_maybe_validate_verity()
976 if (!datapath.dentry) in ovl_maybe_validate_verity()
979 ovl_path_real(dentry, &metapath); in ovl_maybe_validate_verity()
980 if (!metapath.dentry) in ovl_maybe_validate_verity()
988 with_ovl_creds(dentry->d_sb) in ovl_maybe_validate_verity()
1000 static int ovl_maybe_lookup_lowerdata(struct dentry *dentry) in ovl_maybe_lookup_lowerdata() argument
1002 struct inode *inode = d_inode(dentry); in ovl_maybe_lookup_lowerdata()
1007 if (!redirect || ovl_dentry_lowerdata(dentry)) in ovl_maybe_lookup_lowerdata()
1019 if (ovl_dentry_lowerdata(dentry)) in ovl_maybe_lookup_lowerdata()
1022 with_ovl_creds(dentry->d_sb) in ovl_maybe_lookup_lowerdata()
1023 err = ovl_lookup_data_layers(dentry, redirect, &datapath); in ovl_maybe_lookup_lowerdata()
1027 err = ovl_dentry_set_lowerdata(dentry, &datapath); in ovl_maybe_lookup_lowerdata()
1033 dput(datapath.dentry); in ovl_maybe_lookup_lowerdata()
1039 dentry, err); in ovl_maybe_lookup_lowerdata()
1043 int ovl_verify_lowerdata(struct dentry *dentry) in ovl_verify_lowerdata() argument
1047 err = ovl_maybe_lookup_lowerdata(dentry); in ovl_verify_lowerdata()
1051 return ovl_maybe_validate_verity(dentry); in ovl_verify_lowerdata()
1069 pr_warn_ratelimited("refusing to follow metacopy origin for (%pd2)\n", d->dentry); in ovl_check_follow_redirect()
1073 pr_warn_ratelimited("refusing to follow redirect for (%pd2)\n", d->dentry); in ovl_check_follow_redirect()
1080 struct dentry *dentry; member
1084 struct dentry *upperdentry;
1085 struct dentry *index;
1092 struct dentry *dentry = ctx->dentry; in ovl_lookup_layers() local
1093 struct ovl_fs *ofs = OVL_FS(dentry->d_sb); in ovl_lookup_layers()
1094 struct ovl_entry *poe = OVL_E(dentry->d_parent); in ovl_lookup_layers()
1095 struct ovl_entry *roe = OVL_E(dentry->d_sb->s_root); in ovl_lookup_layers()
1097 struct dentry *upperdir; in ovl_lookup_layers()
1098 struct dentry *this; in ovl_lookup_layers()
1099 struct dentry *origin = NULL; in ovl_lookup_layers()
1106 upperdir = ovl_dentry_upper(dentry->d_parent); in ovl_lookup_layers()
1168 err = ovl_lookup_layer(lower.dentry, d, &this, false); in ovl_lookup_layers()
1180 err = ovl_fix_origin(ofs, dentry, this, ctx->upperdentry); in ovl_lookup_layers()
1197 ((d->is_dir && ovl_verify_lower(dentry->d_sb)) || in ovl_lookup_layers()
1222 ctx->stack[ctx->ctr].dentry = this; in ovl_lookup_layers()
1259 dentry); in ovl_lookup_layers()
1269 origin = ctx->origin_path->dentry; in ovl_lookup_layers()
1293 origin = ctx->stack[0].dentry; in ovl_lookup_layers()
1295 if (origin && ovl_indexdir(dentry->d_sb) && in ovl_lookup_layers()
1296 (!d->is_dir || ovl_index_all(dentry->d_sb))) { in ovl_lookup_layers()
1315 ovl_dentry_set_opaque(dentry); in ovl_lookup_layers()
1317 ovl_dentry_set_xwhiteouts(dentry); in ovl_lookup_layers()
1320 ovl_dentry_set_upper_alias(dentry); in ovl_lookup_layers()
1324 .dentry = ctx->upperdentry = dget(ctx->index), in ovl_lookup_layers()
1360 if (ctx->ctr > 1 && !d->is_dir && !ctx->stack[ctx->ctr - 1].dentry) { in ovl_lookup_layers()
1365 inode = ovl_get_inode(dentry->d_sb, &oip); in ovl_lookup_layers()
1377 ovl_dentry_init_reval(dentry, ctx->upperdentry, OVL_I_E(ctx->inode)); in ovl_lookup_layers()
1382 struct dentry *ovl_lookup(struct inode *dir, struct dentry *dentry, in ovl_lookup() argument
1385 struct ovl_fs *ofs = OVL_FS(dentry->d_sb); in ovl_lookup()
1386 struct ovl_entry *poe = OVL_E(dentry->d_parent); in ovl_lookup()
1390 .dentry = dentry, in ovl_lookup()
1393 .sb = dentry->d_sb, in ovl_lookup()
1394 .dentry = dentry, in ovl_lookup()
1395 .name = dentry->d_name, in ovl_lookup()
1399 if (dentry->d_name.len > ofs->namelen) in ovl_lookup()
1402 with_ovl_creds(dentry->d_sb) in ovl_lookup()
1406 dput(ctx.origin_path->dentry); in ovl_lookup()
1420 return d_splice_alias(ctx.inode, dentry); in ovl_lookup()
1423 bool ovl_lower_positive(struct dentry *dentry) in ovl_lower_positive() argument
1425 struct ovl_entry *poe = OVL_E(dentry->d_parent); in ovl_lower_positive()
1426 const struct qstr *name = &dentry->d_name; in ovl_lower_positive()
1435 if (!dentry->d_inode) in ovl_lower_positive()
1436 return ovl_dentry_is_opaque(dentry); in ovl_lower_positive()
1439 if (!ovl_dentry_upper(dentry)) in ovl_lower_positive()
1442 with_ovl_creds(dentry->d_sb) { in ovl_lower_positive()
1445 struct dentry *this; in ovl_lower_positive()
1455 parentpath->dentry); in ovl_lower_positive()
1472 .dentry = this, in ovl_lower_positive()
1475 positive = !ovl_path_is_whiteout(OVL_FS(dentry->d_sb), &path); in ovl_lower_positive()