From f920808ae8be66941c7ba0b9a9bed19417ccf6e9 Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Fri, 2 Jan 2009 17:04:00 -0800 Subject: [PATCH] kclient: use ceph_caps_release instead of dropping inode lease --- src/kernel/caps.c | 5 +++++ src/kernel/dir.c | 19 ++++++++++--------- src/kernel/file.c | 4 ++-- src/kernel/inode.c | 12 ++++++------ src/kernel/ioctl.c | 2 +- src/kernel/super.h | 1 + 6 files changed, 25 insertions(+), 18 deletions(-) diff --git a/src/kernel/caps.c b/src/kernel/caps.c index cfe6d2e31001e..d3c736dc00f1c 100644 --- a/src/kernel/caps.c +++ b/src/kernel/caps.c @@ -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 */ +} + diff --git a/src/kernel/dir.c b/src/kernel/dir.c index 78fe4b40eac02..cb29a9f77775f 100644 --- a/src/kernel/dir.c +++ b/src/kernel/dir.c @@ -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) { /* diff --git a/src/kernel/file.c b/src/kernel/file.c index ad8816da2cfec..f7bd10a97adef 100644 --- a/src/kernel/file.c +++ b/src/kernel/file.c @@ -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); diff --git a/src/kernel/inode.c b/src/kernel/inode.c index cd5e42fb6a64a..541c2534514b5 100644 --- a/src/kernel/inode.c +++ b/src/kernel/inode.c @@ -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; diff --git a/src/kernel/ioctl.c b/src/kernel/ioctl.c index 33a942f7e2770..294f077fbde10 100644 --- a/src/kernel/ioctl.c +++ b/src/kernel/ioctl.c @@ -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; diff --git a/src/kernel/super.h b/src/kernel/super.h index b014913dcadcb..78e9478b7e64b 100644 --- a/src/kernel/super.h +++ b/src/kernel/super.h @@ -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; -- 2.39.5