Lines Matching refs:dn

983 static struct dentry *splice_dentry(struct dentry *dn, struct inode *in,  in splice_dentry()  argument
988 BUG_ON(d_inode(dn)); in splice_dentry()
991 if (!d_unhashed(dn)) in splice_dentry()
992 d_drop(dn); in splice_dentry()
993 realdn = d_splice_alias(in, dn); in splice_dentry()
996 PTR_ERR(realdn), dn, in, ceph_vinop(in)); in splice_dentry()
999 dn = realdn; /* note realdn contains the error */ in splice_dentry()
1004 dn, d_count(dn), in splice_dentry()
1007 dput(dn); in splice_dentry()
1008 dn = realdn; in splice_dentry()
1010 BUG_ON(!ceph_dentry(dn)); in splice_dentry()
1012 dn, d_inode(dn), ceph_vinop(d_inode(dn))); in splice_dentry()
1014 if ((!prehash || *prehash) && d_unhashed(dn)) in splice_dentry()
1015 d_rehash(dn); in splice_dentry()
1017 return dn; in splice_dentry()
1100 struct dentry *dn, *parent; in ceph_fill_trace() local
1114 dn = d_lookup(parent, &dname); in ceph_fill_trace()
1116 parent, dname.len, dname.name, dn); in ceph_fill_trace()
1118 if (!dn) { in ceph_fill_trace()
1119 dn = d_alloc(parent, &dname); in ceph_fill_trace()
1121 dname.len, dname.name, dn); in ceph_fill_trace()
1122 if (dn == NULL) { in ceph_fill_trace()
1127 err = ceph_init_dentry(dn); in ceph_fill_trace()
1129 dput(dn); in ceph_fill_trace()
1133 } else if (d_really_is_positive(dn) && in ceph_fill_trace()
1134 (ceph_ino(d_inode(dn)) != vino.ino || in ceph_fill_trace()
1135 ceph_snap(d_inode(dn)) != vino.snap)) { in ceph_fill_trace()
1137 dn, d_inode(dn)); in ceph_fill_trace()
1138 d_delete(dn); in ceph_fill_trace()
1139 dput(dn); in ceph_fill_trace()
1143 req->r_dentry = dn; in ceph_fill_trace()
1186 struct dentry *dn = req->r_dentry; in ceph_fill_trace() local
1189 BUG_ON(!dn); in ceph_fill_trace()
1191 BUG_ON(d_inode(dn->d_parent) != dir); in ceph_fill_trace()
1216 dn, dn); in ceph_fill_trace()
1218 req->r_old_dentry, dn); in ceph_fill_trace()
1224 d_move(req->r_old_dentry, dn); in ceph_fill_trace()
1228 dn, dn); in ceph_fill_trace()
1232 ceph_invalidate_dentry_lease(dn); in ceph_fill_trace()
1237 dn = req->r_old_dentry; /* use old_dentry */ in ceph_fill_trace()
1243 if (d_really_is_positive(dn)) { in ceph_fill_trace()
1245 dout("d_delete %p\n", dn); in ceph_fill_trace()
1246 d_delete(dn); in ceph_fill_trace()
1248 dout("d_instantiate %p NULL\n", dn); in ceph_fill_trace()
1249 d_instantiate(dn, NULL); in ceph_fill_trace()
1250 if (have_lease && d_unhashed(dn)) in ceph_fill_trace()
1251 d_rehash(dn); in ceph_fill_trace()
1252 update_dentry_lease(dn, rinfo->dlease, in ceph_fill_trace()
1260 if (d_really_is_negative(dn)) { in ceph_fill_trace()
1263 dn = splice_dentry(dn, in, &have_lease); in ceph_fill_trace()
1264 if (IS_ERR(dn)) { in ceph_fill_trace()
1265 err = PTR_ERR(dn); in ceph_fill_trace()
1268 req->r_dentry = dn; /* may have spliced */ in ceph_fill_trace()
1269 } else if (d_really_is_positive(dn) && d_inode(dn) != in) { in ceph_fill_trace()
1271 dn, d_inode(dn), ceph_vinop(d_inode(dn)), in ceph_fill_trace()
1277 update_dentry_lease(dn, rinfo->dlease, session, in ceph_fill_trace()
1279 dout(" final dn %p\n", dn); in ceph_fill_trace()
1283 struct dentry *dn = req->r_dentry; in ceph_fill_trace() local
1287 BUG_ON(!dn); in ceph_fill_trace()
1290 dout(" linking snapped dir %p to dn %p\n", in, dn); in ceph_fill_trace()
1293 dn = splice_dentry(dn, in, NULL); in ceph_fill_trace()
1294 if (IS_ERR(dn)) { in ceph_fill_trace()
1295 err = PTR_ERR(dn); in ceph_fill_trace()
1298 req->r_dentry = dn; /* may have spliced */ in ceph_fill_trace()
1350 static int fill_readdir_cache(struct inode *dir, struct dentry *dn, in fill_readdir_cache() argument
1374 dout("readdir cache dn %p idx %d\n", dn, ctl->index); in fill_readdir_cache()
1375 ctl->dentries[idx] = dn; in fill_readdir_cache()
1390 struct dentry *dn; in ceph_readdir_prepopulate() local
1448 dn = d_lookup(parent, &dname); in ceph_readdir_prepopulate()
1450 parent, dname.len, dname.name, dn); in ceph_readdir_prepopulate()
1452 if (!dn) { in ceph_readdir_prepopulate()
1453 dn = d_alloc(parent, &dname); in ceph_readdir_prepopulate()
1455 dname.len, dname.name, dn); in ceph_readdir_prepopulate()
1456 if (dn == NULL) { in ceph_readdir_prepopulate()
1461 ret = ceph_init_dentry(dn); in ceph_readdir_prepopulate()
1463 dput(dn); in ceph_readdir_prepopulate()
1467 } else if (d_really_is_positive(dn) && in ceph_readdir_prepopulate()
1468 (ceph_ino(d_inode(dn)) != vino.ino || in ceph_readdir_prepopulate()
1469 ceph_snap(d_inode(dn)) != vino.snap)) { in ceph_readdir_prepopulate()
1471 dn, d_inode(dn)); in ceph_readdir_prepopulate()
1472 d_delete(dn); in ceph_readdir_prepopulate()
1473 dput(dn); in ceph_readdir_prepopulate()
1478 if (d_really_is_positive(dn)) { in ceph_readdir_prepopulate()
1479 in = d_inode(dn); in ceph_readdir_prepopulate()
1484 d_drop(dn); in ceph_readdir_prepopulate()
1485 dput(dn); in ceph_readdir_prepopulate()
1496 if (d_really_is_negative(dn)) in ceph_readdir_prepopulate()
1498 d_drop(dn); in ceph_readdir_prepopulate()
1503 if (d_really_is_negative(dn)) { in ceph_readdir_prepopulate()
1504 struct dentry *realdn = splice_dentry(dn, in, NULL); in ceph_readdir_prepopulate()
1507 d_drop(dn); in ceph_readdir_prepopulate()
1508 dn = NULL; in ceph_readdir_prepopulate()
1511 dn = realdn; in ceph_readdir_prepopulate()
1514 di = dn->d_fsdata; in ceph_readdir_prepopulate()
1517 update_dentry_lease(dn, rinfo->dir_dlease[i], in ceph_readdir_prepopulate()
1522 ret = fill_readdir_cache(d_inode(parent), dn, in ceph_readdir_prepopulate()
1528 if (dn) in ceph_readdir_prepopulate()
1529 dput(dn); in ceph_readdir_prepopulate()