spin_unlock(&mdsc->cap_delay_lock);
}
+void ceph_caps_release(struct inode *inode, int mask)
+{
+ /* TODO */
+}
+
rhead = req->r_request->front.iov_base;
rhead->args.mknod.mode = cpu_to_le32(mode);
rhead->args.mknod.rdev = cpu_to_le32(rdev);
- ceph_mdsc_lease_release(mdsc, dir, NULL, CEPH_LOCK_IFILE);
+ ceph_caps_release(dir, CEPH_CAP_FILE_RDCACHE);
err = ceph_mdsc_do_request(mdsc, req);
if (!err && req->r_reply_info.trace_numd == 0) {
/*
return PTR_ERR(req);
}
req->r_locked_dir = dir;
- ceph_mdsc_lease_release(mdsc, dir, NULL, CEPH_LOCK_IFILE);
+ ceph_caps_release(dir, CEPH_CAP_FILE_RDCACHE);
err = ceph_mdsc_do_request(mdsc, req);
ceph_mdsc_put_request(req);
if (err)
rhead = req->r_request->front.iov_base;
rhead->args.mkdir.mode = cpu_to_le32(mode);
- ceph_mdsc_lease_release(mdsc, dir, NULL, CEPH_LOCK_IFILE);
+ ceph_caps_release(dir, CEPH_CAP_FILE_RDCACHE);
err = ceph_mdsc_do_request(mdsc, req);
ceph_mdsc_put_request(req);
if (err < 0)
req->r_last_dentry = dget(dentry); /* use this dentry in fill_trace */
req->r_locked_dir = old_dentry->d_inode;
- ceph_mdsc_lease_release(mdsc, dir, NULL, CEPH_LOCK_IFILE);
+ ceph_caps_release(dir, CEPH_CAP_FILE_RDCACHE);
err = ceph_mdsc_do_request(mdsc, req);
if (err) {
d_drop(dentry);
req->r_locked_dir = dir; /* by VFS */
+ ceph_caps_release(dir, CEPH_CAP_FILE_RDCACHE);
ceph_mdsc_lease_release(mdsc, dir, dentry,
- CEPH_LOCK_DN|CEPH_LOCK_IFILE);
- ceph_mdsc_lease_release(mdsc, inode, NULL, CEPH_LOCK_ILINK);
+ CEPH_LOCK_DN);
+ ceph_caps_release(inode, CEPH_CAP_LINK_RDCACHE);
err = ceph_mdsc_do_request(mdsc, req);
ceph_mdsc_put_request(req);
req->r_old_dentry = dget(old_dentry);
req->r_last_dentry = dget(new_dentry);
req->r_locked_dir = new_dir;
+ ceph_caps_release(old_dir, CEPH_CAP_FILE_RDCACHE);
ceph_mdsc_lease_release(mdsc, old_dir, old_dentry,
- CEPH_LOCK_DN|CEPH_LOCK_IFILE);
+ CEPH_LOCK_DN);
if (new_dentry->d_inode)
- ceph_mdsc_lease_release(mdsc, new_dentry->d_inode, NULL,
- CEPH_LOCK_ILINK);
+ ceph_caps_release(new_dentry->d_inode, CEPH_CAP_FILE_RDCACHE);
err = ceph_mdsc_do_request(mdsc, req);
if (!err && req->r_reply_info.trace_numd == 0) {
/*
dentry = d_find_alias(inode);
if (!dentry)
return -ESTALE; /* yuck */
- ceph_mdsc_lease_release(mdsc, inode, NULL, CEPH_LOCK_IFILE);
+ ceph_caps_release(inode, CEPH_CAP_FILE_RDCACHE);
req = prepare_open_request(inode->i_sb, dentry, flags, 0);
if (IS_ERR(req)) {
err = PTR_ERR(req);
if (IS_ERR(req))
return ERR_PTR(PTR_ERR(req));
if (flags & O_CREAT)
- ceph_mdsc_lease_release(mdsc, dir, NULL, CEPH_LOCK_IFILE);
+ ceph_caps_release(dir, CEPH_CAP_FILE_RDCACHE);
req->r_last_dentry = dget(dentry); /* use this dentry in fill_trace */
req->r_locked_dir = dir; /* caller holds dir->i_mutex */
err = ceph_mdsc_do_request(mdsc, req);
mask |= CEPH_CHOWN_GID;
}
reqh->args.chown.mask = cpu_to_le32(mask);
- ceph_mdsc_lease_release(mdsc, inode, NULL, CEPH_LOCK_IAUTH);
+ ceph_caps_release(inode, CEPH_CAP_AUTH_RDCACHE);
err = ceph_mdsc_do_request(mdsc, req);
ceph_mdsc_put_request(req);
dout(10, "chown result %d\n", err);
return PTR_ERR(req);
reqh = req->r_request->front.iov_base;
reqh->args.chmod.mode = cpu_to_le32(attr->ia_mode);
- ceph_mdsc_lease_release(mdsc, inode, NULL, CEPH_LOCK_IAUTH);
+ ceph_caps_release(inode, CEPH_CAP_AUTH_RDCACHE);
err = ceph_mdsc_do_request(mdsc, req);
ceph_mdsc_put_request(req);
dout(10, "chmod result %d\n", err);
if (ia_valid & ATTR_MTIME)
reqh->args.utime.mask |= cpu_to_le32(CEPH_UTIME_MTIME);
- ceph_mdsc_lease_release(mdsc, inode, NULL, CEPH_CAP_FILE_RDCACHE);
+ ceph_caps_release(inode, CEPH_CAP_FILE_RDCACHE);
err = ceph_mdsc_do_request(mdsc, req);
ceph_mdsc_put_request(req);
dout(10, "utime result %d\n", err);
return PTR_ERR(req);
reqh = req->r_request->front.iov_base;
reqh->args.truncate.length = cpu_to_le64(attr->ia_size);
- ceph_mdsc_lease_release(mdsc, inode, NULL, CEPH_CAP_FILE_RDCACHE);
+ ceph_caps_release(inode, CEPH_CAP_FILE_RDCACHE);
err = ceph_mdsc_do_request(mdsc, req);
ceph_mdsc_put_request(req);
dout(10, "truncate result %d\n", err);
req->r_request->hdr.data_len = cpu_to_le32(size);
req->r_request->hdr.data_off = cpu_to_le32(0);
- ceph_mdsc_lease_release(mdsc, inode, NULL, CEPH_LOCK_IXATTR);
+ ceph_caps_release(inode, CEPH_CAP_XATTR_RDCACHE);
err = ceph_mdsc_do_request(mdsc, req);
ceph_mdsc_put_request(req);
if (IS_ERR(req))
return PTR_ERR(req);
- ceph_mdsc_lease_release(mdsc, inode, NULL, CEPH_LOCK_IXATTR);
+ ceph_caps_release(inode, CEPH_CAP_XATTR_RDCACHE);
err = ceph_mdsc_do_request(mdsc, req);
ceph_mdsc_put_request(req);
return err;
kfree(path);
reqh = req->r_request->front.iov_base;
reqh->args.setlayout.layout = layout;
- ceph_mdsc_lease_release(mdsc, inode, NULL, CEPH_LOCK_IFILE);
+ ceph_caps_release(inode, CEPH_CAP_FILE_RDCACHE);
err = ceph_mdsc_do_request(mdsc, req);
ceph_mdsc_put_request(req);
return err;
struct ceph_mds_session **psession);
extern void ceph_check_caps(struct ceph_inode_info *ci, int delayed);
extern void ceph_check_delayed_caps(struct ceph_mds_client *mdsc);
+extern void ceph_caps_release(struct inode *inode, int mask);
/* addr.c */
extern const struct address_space_operations ceph_aops;