dout(5, "mkdir dir %p dn %p mode 0%o\n", dir, dentry, mode);
}
req = ceph_mdsc_create_request(mdsc, op, pathdentry, NULL,
- NULL, NULL, USE_AUTH_MDS);
+ NULL, snap, USE_AUTH_MDS);
if (pathdentry != dentry)
dput(pathdentry);
if (IS_ERR(req)) {
d_drop(dentry);
- return PTR_ERR(req);
+ err = PTR_ERR(req);
+ goto out;
}
req->r_locked_dir = dir;
ceph_mdsc_put_request(req);
if (err < 0)
d_drop(dentry);
+out:
+ kfree(snap);
return err;
}
dout(5, "unlink/rmdir dir %p dn %p inode %p\n",
dir, dentry, inode);
}
- req = ceph_mdsc_create_request(mdsc, op, pathdentry, NULL, NULL, NULL,
+ req = ceph_mdsc_create_request(mdsc, op, pathdentry, NULL, NULL, snap,
USE_AUTH_MDS);
if (pathdentry != dentry)
dput(pathdentry);
- if (IS_ERR(req))
- return PTR_ERR(req);
+ if (IS_ERR(req)) {
+ err = PTR_ERR(req);
+ goto out;
+ }
req->r_locked_dir = dir; /* by VFS */
ceph_release_caps(inode, CEPH_CAP_LINK_RDCACHE);
err = ceph_mdsc_do_request(mdsc, dir, req);
ceph_mdsc_put_request(req);
+out:
+ kfree(snap);
return err;
}