From ffa7bff864bb922d57dab3fcb3b899f07a97a6e3 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 5 Mar 2008 20:49:34 -0800 Subject: [PATCH] kernel: simplify do_request error return path --- src/kernel/client.c | 19 ++++++++---------- src/kernel/dir.c | 43 ++++++++--------------------------------- src/kernel/file.c | 10 ++-------- src/kernel/inode.c | 17 ++++------------ src/kernel/mds_client.c | 7 +++---- 5 files changed, 25 insertions(+), 71 deletions(-) diff --git a/src/kernel/client.c b/src/kernel/client.c index fd71495e748a2..8e641827a04b7 100644 --- a/src/kernel/client.c +++ b/src/kernel/client.c @@ -51,7 +51,7 @@ static int open_root_inode(struct ceph_client *client, struct ceph_mount_args *a struct inode *root_inode, *mnt_inode = NULL; struct ceph_mds_request *req = 0; struct ceph_mds_request_head *reqhead; - struct ceph_mds_reply_info rinfo; + struct ceph_mds_reply_info *rinfo; int frommds; int err; struct ceph_inode_cap *cap; @@ -66,14 +66,11 @@ static int open_root_inode(struct ceph_client *client, struct ceph_mount_args *a reqhead = req->r_request->front.iov_base; reqhead->args.open.flags = O_DIRECTORY; reqhead->args.open.mode = 0; - if ((err = ceph_mdsc_do_request(mdsc, req)) < 0) - return err; - - rinfo = req->r_reply_info; - err = le32_to_cpu(rinfo.head->result); + err = ceph_mdsc_do_request(mdsc, req); + rinfo = &req->r_reply_info; if (err != 0) goto out; - if (rinfo.trace_nr == 0) { + if (rinfo->trace_nr == 0) { dout(10, "open_root_inode wtf, mds returns 0 but no trace\n"); err = -EINVAL; goto out; @@ -82,7 +79,7 @@ static int open_root_inode(struct ceph_client *client, struct ceph_mount_args *a if (client->sb->s_root == NULL) { /* get the fs root inode. Note that this is not necessarily the root of the mount */ - err = ceph_get_inode(client->sb, le64_to_cpu(rinfo.trace_in[0].in->ino), &root_inode); + err = ceph_get_inode(client->sb, le64_to_cpu(rinfo->trace_in[0].in->ino), &root_inode); if (err < 0) goto out; @@ -98,7 +95,7 @@ static int open_root_inode(struct ceph_client *client, struct ceph_mount_args *a BUG_ON (root_inode == NULL); } - if ((err = ceph_fill_trace(client->sb, &rinfo, &mnt_inode, pmnt_root)) < 0) + if ((err = ceph_fill_trace(client->sb, rinfo, &mnt_inode, pmnt_root)) < 0) goto out2; if (*pmnt_root == NULL) { err = -ENOMEM; @@ -108,8 +105,8 @@ static int open_root_inode(struct ceph_client *client, struct ceph_mount_args *a /* fill in cap */ frommds = le32_to_cpu(req->r_reply->hdr.src.name.num); cap = ceph_add_cap(mnt_inode, req->r_session, - le32_to_cpu(rinfo.head->file_caps), - le32_to_cpu(rinfo.head->file_caps_seq)); + le32_to_cpu(rinfo->head->file_caps), + le32_to_cpu(rinfo->head->file_caps_seq)); if (IS_ERR(cap)) { err = PTR_ERR(cap); goto out2; diff --git a/src/kernel/dir.c b/src/kernel/dir.c index 1cf8becabccd0..265d7c96496de 100644 --- a/src/kernel/dir.c +++ b/src/kernel/dir.c @@ -127,16 +127,13 @@ nextfrag: rhead = req->r_request->front.iov_base; rhead->args.readdir.frag = cpu_to_le32(frag); err = ceph_mdsc_do_request(mdsc, req); - if (err < 0) - return err; rinfo = &req->r_reply_info; - err = le32_to_cpu(rinfo->head->result); - dout(10, "dir_readdir got and parsed readdir result=%d" - " on frag %u\n", err, frag); if (err < 0) { ceph_mdsc_put_request(req); return err; } + dout(10, "dir_readdir got and parsed readdir result=%d" + " on frag %u\n", err, frag); fi->last_readdir = req; /* pre-populate dentry cache */ @@ -274,9 +271,6 @@ int ceph_request_lookup(struct super_block *sb, struct dentry *dentry) if (IS_ERR(req)) return PTR_ERR(req); err = ceph_mdsc_do_request(mdsc, req); - if (err < 0) - return err; - err = le32_to_cpu(req->r_reply_info.head->result); ceph_mdsc_put_request(req); dout(20, "dir_lookup result=%d\n", err); return err; @@ -339,12 +333,9 @@ static int ceph_dir_mknod(struct inode *dir, struct dentry *dentry, int mode, de rhead->args.mknod.mode = cpu_to_le32(mode); rhead->args.mknod.rdev = cpu_to_le32(rdev); err = ceph_mdsc_do_request(mdsc, req); - if (err < 0) { - d_drop(dentry); - return err; - } - err = le32_to_cpu(req->r_reply_info.head->result); ceph_mdsc_put_request(req); + if (err < 0) + d_drop(dentry); return err; } @@ -369,12 +360,9 @@ static int ceph_dir_symlink(struct inode *dir, struct dentry *dentry, const char return PTR_ERR(req); } err = ceph_mdsc_do_request(mdsc, req); - if (err < 0) { - d_drop(dentry); - return err; - } - err = le32_to_cpu(req->r_reply_info.head->result); ceph_mdsc_put_request(req); + if (err < 0) + d_drop(dentry); return err; } @@ -402,12 +390,9 @@ static int ceph_dir_mkdir(struct inode *dir, struct dentry *dentry, int mode) rhead = req->r_request->front.iov_base; rhead->args.mkdir.mode = cpu_to_le32(mode); err = ceph_mdsc_do_request(mdsc, req); - if (err < 0) { - d_drop(dentry); - return err; - } - err = le32_to_cpu(req->r_reply_info.head->result); ceph_mdsc_put_request(req); + if (err < 0) + d_drop(dentry); return err; } @@ -434,10 +419,6 @@ static int ceph_dir_unlink(struct inode *dir, struct dentry *dentry) if (IS_ERR(req)) return PTR_ERR(req); err = ceph_mdsc_do_request(mdsc, req); - if (err < 0) - return err; - - err = le32_to_cpu(req->r_reply_info.head->result); if (err == 0) { inode_dec_link_count(req->r_last_inode); /* FIXME update dir mtime etc. from reply trace */ @@ -475,10 +456,6 @@ static int ceph_dir_rename(struct inode *old_dir, struct dentry *old_dentry, if (IS_ERR(req)) return PTR_ERR(req); err = ceph_mdsc_do_request(mdsc, req); - if (err < 0) - return err; - - err = le32_to_cpu(req->r_reply_info.head->result); ceph_mdsc_put_request(req); return err; } @@ -508,10 +485,6 @@ ceph_dir_create(struct inode *dir, struct dentry *dentry, int mode, rhead->args.mknod.mode = cpu_to_le32(mode); rhead->args.mknod.rdev = 0; err = ceph_mdsc_do_request(mdsc, req); - if (err < 0) - return err; - - err = le32_to_cpu(req->r_reply_info.head->result); ceph_mdsc_put_request(req); return err; } diff --git a/src/kernel/file.c b/src/kernel/file.c index f6cf2d276feb3..a86d0c715835c 100644 --- a/src/kernel/file.c +++ b/src/kernel/file.c @@ -95,17 +95,11 @@ int ceph_open(struct inode *inode, struct file *file) if (IS_ERR(req)) return PTR_ERR(req); err = ceph_mdsc_do_request(mdsc, req); - if (err < 0) - return err; - err = le32_to_cpu(req->r_reply_info.head->result); if (err == 0) err = ceph_open_init_private_data(inode, file, file->f_flags); ceph_mdsc_put_request(req); - - if (err < 0) - return err; - dout(5, "ceph_open success, %llx\n", ceph_ino(inode)); - return 0; + dout(5, "ceph_open result=%d on %llx\n", err, ceph_ino(inode)); + return err; } diff --git a/src/kernel/inode.c b/src/kernel/inode.c index 0fd1a7f62b7c9..7d349b882bc3c 100644 --- a/src/kernel/inode.c +++ b/src/kernel/inode.c @@ -583,14 +583,11 @@ int ceph_setattr(struct dentry *dentry, struct iattr *attr) reqh->args.chown.gid = cpu_to_le32(attr->ia_gid); else reqh->args.chown.gid = cpu_to_le32(-1); - if ((err = ceph_mdsc_do_request(mdsc, req)) < 0) - return err; - err = le32_to_cpu(req->r_reply_info.head->result); + err = ceph_mdsc_do_request(mdsc, req); ceph_mdsc_put_request(req); dout(10, "chown result %d\n", err); if (err) return err; - //if (err) return err; } /* chmod? */ @@ -600,9 +597,7 @@ int ceph_setattr(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); - if ((err = ceph_mdsc_do_request(mdsc, req)) < 0) - return err; - err = le32_to_cpu(req->r_reply_info.head->result); + err = ceph_mdsc_do_request(mdsc, req); ceph_mdsc_put_request(req); dout(10, "chmod result %d\n", err); if (err) @@ -619,9 +614,7 @@ int ceph_setattr(struct dentry *dentry, struct iattr *attr) reqh = req->r_request->front.iov_base; ceph_encode_timespec(&reqh->args.utime.mtime, &attr->ia_mtime); ceph_encode_timespec(&reqh->args.utime.atime, &attr->ia_atime); - if ((err = ceph_mdsc_do_request(mdsc, req)) < 0) - return err; - err = le32_to_cpu(req->r_reply_info.head->result); + err = ceph_mdsc_do_request(mdsc, req); ceph_mdsc_put_request(req); dout(10, "utime result %d\n", err); if (err) @@ -642,9 +635,7 @@ int ceph_setattr(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); - if ((err = ceph_mdsc_do_request(mdsc, req)) < 0) - return err; - err = le32_to_cpu(req->r_reply_info.head->result); + err = ceph_mdsc_do_request(mdsc, req); ceph_mdsc_put_request(req); dout(10, "truncate result %d\n", err); if (err) diff --git a/src/kernel/mds_client.c b/src/kernel/mds_client.c index fe9943974c61b..c4bf464452b9e 100644 --- a/src/kernel/mds_client.c +++ b/src/kernel/mds_client.c @@ -773,7 +773,6 @@ retry: err = PTR_ERR(req->r_reply); req->r_reply = 0; dout(10, "do_request returning err %d from reply handler\n", err); - ceph_mdsc_put_request(req); return err; } @@ -781,10 +780,10 @@ retry: req->r_request = 0; drop_request_session_attempt_refs(req); + err = le32_to_cpu(req->r_reply_info.head->result); dout(30, "do_request done on %p result %d tracelen %d\n", req, - req->r_reply_info.head->result, - req->r_reply_info.trace_nr); - return 0; + err, req->r_reply_info.trace_nr); + return err; } void ceph_mdsc_handle_reply(struct ceph_mds_client *mdsc, struct ceph_msg *msg) -- 2.39.5