]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
kclient: use ceph_caps_release instead of dropping inode lease
authorYehuda Sadeh <yehuda@hq.newdream.net>
Sat, 3 Jan 2009 01:04:00 +0000 (17:04 -0800)
committerSage Weil <sage@newdream.net>
Sun, 4 Jan 2009 18:51:29 +0000 (10:51 -0800)
src/kernel/caps.c
src/kernel/dir.c
src/kernel/file.c
src/kernel/inode.c
src/kernel/ioctl.c
src/kernel/super.h

index cfe6d2e31001e7a033fa81b2e673f9e835e9b897..d3c736dc00f1c86d7daaa3b525f47ab81f651b13 100644 (file)
@@ -1463,3 +1463,8 @@ void ceph_check_delayed_caps(struct ceph_mds_client *mdsc)
        spin_unlock(&mdsc->cap_delay_lock);
 }
 
+void ceph_caps_release(struct inode *inode, int mask)
+{
+       /* TODO */
+}
+
index 78fe4b40eac02796e65b9d5772a4bc7fe4f4b43c..cb29a9f77775f0a77af50fa0fe31f76d1d529c1d 100644 (file)
@@ -437,7 +437,7 @@ static int ceph_mknod(struct inode *dir, struct dentry *dentry,
        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) {
                /*
@@ -511,7 +511,7 @@ static int ceph_symlink(struct inode *dir, struct dentry *dentry,
                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)
@@ -567,7 +567,7 @@ static int ceph_mkdir(struct inode *dir, struct dentry *dentry, int mode)
        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)
@@ -613,7 +613,7 @@ static int ceph_link(struct dentry *old_dentry, struct inode *dir,
        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);
@@ -677,9 +677,10 @@ static int ceph_unlink(struct inode *dir, struct dentry *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);
 
@@ -724,11 +725,11 @@ static int ceph_rename(struct inode *old_dir, struct dentry *old_dentry,
        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) {
                /*
index ad8816da2cfecd6ff012fb7998c4e92566755aaf..f7bd10a97adef62614043500218160dd76bb6b66 100644 (file)
@@ -130,7 +130,7 @@ int ceph_open(struct inode *inode, struct file *file)
        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);
@@ -178,7 +178,7 @@ struct dentry *ceph_lookup_open(struct inode *dir, struct dentry *dentry,
        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);
index cd5e42fb6a64a84671daeaa68566919277152f78..541c2534514b55edc16b9e09021ce762cd49d7e6 100644 (file)
@@ -1366,7 +1366,7 @@ static int ceph_setattr_chown(struct dentry *dentry, struct iattr *attr)
                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);
@@ -1387,7 +1387,7 @@ static int ceph_setattr_chmod(struct dentry *dentry, struct iattr *attr)
                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);
@@ -1454,7 +1454,7 @@ static int ceph_setattr_time(struct dentry *dentry, struct iattr *attr)
        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);
@@ -1497,7 +1497,7 @@ static int ceph_setattr_size(struct dentry *dentry, struct iattr *attr)
                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);
@@ -1921,7 +1921,7 @@ int ceph_setxattr(struct dentry *dentry, const char *name,
        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);
 
@@ -1965,7 +1965,7 @@ int ceph_removexattr(struct dentry *dentry, const char *name)
        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;
index 33a942f7e277029d8ecab22f86acc1df52d6ddcd..294f077fbde10833184fc26152dccbd6c442b540 100644 (file)
@@ -51,7 +51,7 @@ static long ceph_ioctl_set_layout(struct file *file, void __user *arg)
        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;
index b014913dcadcbeeb61c5344d0606f726fb7b1d63..78e9478b7e64bc712c0de9f51e63cf6a15bc31ef 100644 (file)
@@ -646,6 +646,7 @@ extern void __ceph_flush_snaps(struct ceph_inode_info *ci,
                               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;