Lines Matching refs:dn
978 static struct dentry *splice_dentry(struct dentry *dn, struct inode *in, in splice_dentry() argument
983 BUG_ON(d_inode(dn)); in splice_dentry()
986 if (!d_unhashed(dn)) in splice_dentry()
987 d_drop(dn); in splice_dentry()
988 realdn = d_splice_alias(in, dn); in splice_dentry()
991 PTR_ERR(realdn), dn, in, ceph_vinop(in)); in splice_dentry()
994 dn = realdn; /* note realdn contains the error */ in splice_dentry()
999 dn, d_count(dn), in splice_dentry()
1002 dput(dn); in splice_dentry()
1003 dn = realdn; in splice_dentry()
1005 BUG_ON(!ceph_dentry(dn)); in splice_dentry()
1007 dn, d_inode(dn), ceph_vinop(d_inode(dn))); in splice_dentry()
1009 if ((!prehash || *prehash) && d_unhashed(dn)) in splice_dentry()
1010 d_rehash(dn); in splice_dentry()
1012 return dn; in splice_dentry()
1095 struct dentry *dn, *parent; in ceph_fill_trace() local
1109 dn = d_lookup(parent, &dname); in ceph_fill_trace()
1111 parent, dname.len, dname.name, dn); in ceph_fill_trace()
1113 if (!dn) { in ceph_fill_trace()
1114 dn = d_alloc(parent, &dname); in ceph_fill_trace()
1116 dname.len, dname.name, dn); in ceph_fill_trace()
1117 if (dn == NULL) { in ceph_fill_trace()
1122 err = ceph_init_dentry(dn); in ceph_fill_trace()
1124 dput(dn); in ceph_fill_trace()
1128 } else if (d_really_is_positive(dn) && in ceph_fill_trace()
1129 (ceph_ino(d_inode(dn)) != vino.ino || in ceph_fill_trace()
1130 ceph_snap(d_inode(dn)) != vino.snap)) { in ceph_fill_trace()
1132 dn, d_inode(dn)); in ceph_fill_trace()
1133 d_delete(dn); in ceph_fill_trace()
1134 dput(dn); in ceph_fill_trace()
1138 req->r_dentry = dn; in ceph_fill_trace()
1181 struct dentry *dn = req->r_dentry; in ceph_fill_trace() local
1184 BUG_ON(!dn); in ceph_fill_trace()
1186 BUG_ON(d_inode(dn->d_parent) != dir); in ceph_fill_trace()
1211 dn, dn); in ceph_fill_trace()
1213 req->r_old_dentry, dn); in ceph_fill_trace()
1215 d_move(req->r_old_dentry, dn); in ceph_fill_trace()
1219 dn, dn); in ceph_fill_trace()
1223 ceph_invalidate_dentry_lease(dn); in ceph_fill_trace()
1232 dn = req->r_old_dentry; /* use old_dentry */ in ceph_fill_trace()
1238 if (d_really_is_positive(dn)) { in ceph_fill_trace()
1240 dout("d_delete %p\n", dn); in ceph_fill_trace()
1241 d_delete(dn); in ceph_fill_trace()
1243 dout("d_instantiate %p NULL\n", dn); in ceph_fill_trace()
1244 d_instantiate(dn, NULL); in ceph_fill_trace()
1245 if (have_lease && d_unhashed(dn)) in ceph_fill_trace()
1246 d_rehash(dn); in ceph_fill_trace()
1247 update_dentry_lease(dn, rinfo->dlease, in ceph_fill_trace()
1255 if (d_really_is_negative(dn)) { in ceph_fill_trace()
1258 dn = splice_dentry(dn, in, &have_lease); in ceph_fill_trace()
1259 if (IS_ERR(dn)) { in ceph_fill_trace()
1260 err = PTR_ERR(dn); in ceph_fill_trace()
1263 req->r_dentry = dn; /* may have spliced */ in ceph_fill_trace()
1264 } else if (d_really_is_positive(dn) && d_inode(dn) != in) { in ceph_fill_trace()
1266 dn, d_inode(dn), ceph_vinop(d_inode(dn)), in ceph_fill_trace()
1272 update_dentry_lease(dn, rinfo->dlease, session, in ceph_fill_trace()
1274 dout(" final dn %p\n", dn); in ceph_fill_trace()
1278 struct dentry *dn = req->r_dentry; in ceph_fill_trace() local
1282 BUG_ON(!dn); in ceph_fill_trace()
1285 dout(" linking snapped dir %p to dn %p\n", in, dn); in ceph_fill_trace()
1288 dn = splice_dentry(dn, in, NULL); in ceph_fill_trace()
1289 if (IS_ERR(dn)) { in ceph_fill_trace()
1290 err = PTR_ERR(dn); in ceph_fill_trace()
1293 req->r_dentry = dn; /* may have spliced */ in ceph_fill_trace()
1342 struct dentry *dn; in ceph_readdir_prepopulate() local
1389 dn = d_lookup(parent, &dname); in ceph_readdir_prepopulate()
1391 parent, dname.len, dname.name, dn); in ceph_readdir_prepopulate()
1393 if (!dn) { in ceph_readdir_prepopulate()
1394 dn = d_alloc(parent, &dname); in ceph_readdir_prepopulate()
1396 dname.len, dname.name, dn); in ceph_readdir_prepopulate()
1397 if (dn == NULL) { in ceph_readdir_prepopulate()
1402 ret = ceph_init_dentry(dn); in ceph_readdir_prepopulate()
1404 dput(dn); in ceph_readdir_prepopulate()
1408 } else if (d_really_is_positive(dn) && in ceph_readdir_prepopulate()
1409 (ceph_ino(d_inode(dn)) != vino.ino || in ceph_readdir_prepopulate()
1410 ceph_snap(d_inode(dn)) != vino.snap)) { in ceph_readdir_prepopulate()
1412 dn, d_inode(dn)); in ceph_readdir_prepopulate()
1413 d_delete(dn); in ceph_readdir_prepopulate()
1414 dput(dn); in ceph_readdir_prepopulate()
1419 spin_lock_nested(&dn->d_lock, DENTRY_D_LOCK_NESTED); in ceph_readdir_prepopulate()
1420 list_move(&dn->d_child, &parent->d_subdirs); in ceph_readdir_prepopulate()
1421 spin_unlock(&dn->d_lock); in ceph_readdir_prepopulate()
1426 if (d_really_is_positive(dn)) { in ceph_readdir_prepopulate()
1427 in = d_inode(dn); in ceph_readdir_prepopulate()
1432 d_drop(dn); in ceph_readdir_prepopulate()
1433 dput(dn); in ceph_readdir_prepopulate()
1443 if (d_really_is_negative(dn)) in ceph_readdir_prepopulate()
1445 d_drop(dn); in ceph_readdir_prepopulate()
1449 if (d_really_is_negative(dn)) { in ceph_readdir_prepopulate()
1450 struct dentry *realdn = splice_dentry(dn, in, NULL); in ceph_readdir_prepopulate()
1453 d_drop(dn); in ceph_readdir_prepopulate()
1454 dn = NULL; in ceph_readdir_prepopulate()
1457 dn = realdn; in ceph_readdir_prepopulate()
1460 di = dn->d_fsdata; in ceph_readdir_prepopulate()
1463 update_dentry_lease(dn, rinfo->dir_dlease[i], in ceph_readdir_prepopulate()
1467 if (dn) in ceph_readdir_prepopulate()
1468 dput(dn); in ceph_readdir_prepopulate()