strcmp(dentry->d_name.name, client->mount_args.snapdir_name) == 0) {
struct inode *parent = dentry->d_parent->d_inode;
struct inode *inode = ceph_get_snapdir(parent);
+ dout(10, "ENOENT on snapdir %p '%.*s', linking to snapdir %p\n",
+ dentry, dentry->d_name.len, dentry->d_name.name, inode);
d_add(dentry, inode);
err = 0;
}
if (d == rinfo->trace_numi-rinfo->trace_snapdirpos-1) {
struct inode *snapdir = ceph_get_snapdir(dn->d_inode);
+ dput(dn);
dn = d_find_alias(snapdir);
iput(snapdir);
dout(10, " snapdir dentry is %p\n", dn);
struct dentry *dn;
struct inode *in;
int i;
+ struct inode *snapdir = 0;
if (le32_to_cpu(rinfo->head->op) == CEPH_MDS_OP_LSSNAP) {
- in = ceph_get_snapdir(parent->d_inode);
- parent = d_find_alias(in);
- iput(in);
+ snapdir = ceph_get_snapdir(parent->d_inode);
+ parent = d_find_alias(snapdir);
+ dput(parent);
dout(10, "readdir_prepopulate %d items under SNAPDIR dn %p\n",
rinfo->dir_nr, parent);
} else {
req->r_session, req->r_from_time);
dput(dn);
}
+
+ iput(snapdir);
dout(10, "readdir_prepopulate done\n");
return 0;
}
int want_inode = 0;
struct dentry *ret;
+ if (ceph_vino(dentry->d_inode).snap == CEPH_SNAPDIR) {
+ dout(30, "getattr dentry %p inode %p SNAPDIR\n", dentry,
+ dentry->d_inode);
+ return 0;
+ }
+
dout(30, "getattr dentry %p inode %p\n", dentry,
dentry->d_inode);