Lines Matching refs:d
28 static int ovl_check_redirect(struct dentry *dentry, struct ovl_lookup_data *d, in ovl_check_redirect() argument
47 d->stop = false; in ovl_check_redirect()
51 memcpy(buf, d->name.name, prelen); in ovl_check_redirect()
55 kfree(d->redirect); in ovl_check_redirect()
56 d->redirect = buf; in ovl_check_redirect()
57 d->name.name = d->redirect; in ovl_check_redirect()
58 d->name.len = strlen(d->redirect); in ovl_check_redirect()
196 static int ovl_lookup_single(struct dentry *base, struct ovl_lookup_data *d, in ovl_lookup_single() argument
222 d->stop = d->opaque = true; in ovl_lookup_single()
229 if (last_element && d->metacopy && !d_is_reg(this)) { in ovl_lookup_single()
230 d->stop = true; in ovl_lookup_single()
234 if (d->is_dir || !last_element) { in ovl_lookup_single()
235 d->stop = true; in ovl_lookup_single()
242 d->metacopy = err; in ovl_lookup_single()
243 d->stop = !d->metacopy; in ovl_lookup_single()
244 if (!d->metacopy || d->last) in ovl_lookup_single()
247 if (ovl_lookup_trap_inode(d->sb, this)) { in ovl_lookup_single()
254 d->is_dir = true; in ovl_lookup_single()
255 if (d->last) in ovl_lookup_single()
259 d->stop = true; in ovl_lookup_single()
261 d->opaque = true; in ovl_lookup_single()
265 err = ovl_check_redirect(this, d, prelen, post); in ovl_lookup_single()
282 static int ovl_lookup_layer(struct dentry *base, struct ovl_lookup_data *d, in ovl_lookup_layer() argument
286 size_t rem = d->name.len - 1; in ovl_lookup_layer()
290 if (d->name.name[0] != '/') in ovl_lookup_layer()
291 return ovl_lookup_single(base, d, d->name.name, d->name.len, in ovl_lookup_layer()
295 const char *s = d->name.name + d->name.len - rem; in ovl_lookup_layer()
304 err = ovl_lookup_single(base, d, s, thislen, in ovl_lookup_layer()
305 d->name.len - rem, next, &base); in ovl_lookup_layer()
315 if (WARN_ON(rem >= d->name.len)) in ovl_lookup_layer()
835 struct ovl_lookup_data d = { in ovl_lookup() local
852 err = ovl_lookup_layer(upperdir, &d, &upperdentry); in ovl_lookup()
861 if (upperdentry && !d.is_dir) { in ovl_lookup()
879 if (d.metacopy) in ovl_lookup()
883 if (d.redirect) { in ovl_lookup()
885 upperredirect = kstrdup(d.redirect, GFP_KERNEL); in ovl_lookup()
888 if (d.redirect[0] == '/') in ovl_lookup()
891 upperopaque = d.opaque; in ovl_lookup()
894 if (!d.stop && poe->numlower) { in ovl_lookup()
902 for (i = 0; !d.stop && i < poe->numlower; i++) { in ovl_lookup()
906 d.last = i == poe->numlower - 1; in ovl_lookup()
908 d.last = lower.layer->idx == roe->numlower; in ovl_lookup()
910 err = ovl_lookup_layer(lower.dentry, &d, &this); in ovl_lookup()
921 if (upperdentry && !ctr && !ofs->noxattr && d.is_dir) { in ovl_lookup()
939 ((d.is_dir && ovl_verify_lower(dentry->d_sb)) || in ovl_lookup()
940 (!d.is_dir && ofs->config.index && origin_path))) { in ovl_lookup()
944 if (d.is_dir) in ovl_lookup()
951 if (d.metacopy) in ovl_lookup()
957 if (d.metacopy && ctr) { in ovl_lookup()
977 if (d.redirect && !ofs->config.redirect_follow) { in ovl_lookup()
983 if (d.stop) in ovl_lookup()
986 if (d.redirect && d.redirect[0] == '/' && poe != roe) { in ovl_lookup()
998 if (d.metacopy) { in ovl_lookup()
1009 } else if (!d.is_dir && upperdentry && !ctr && origin_path) { in ovl_lookup()
1034 if (ctr && (!upperdentry || (!d.is_dir && !metacopy))) in ovl_lookup()
1038 (!d.is_dir || ovl_index_all(dentry->d_sb))) { in ovl_lookup()
1077 .lowerdata = (ctr > 1 && !d.is_dir) ? in ovl_lookup()
1094 kfree(d.redirect); in ovl_lookup()
1113 kfree(d.redirect); in ovl_lookup()