From: Sage Weil Date: Tue, 1 Apr 2008 21:29:20 +0000 (-0700) Subject: kclient: ceph_get_inode cleanup; use ceph_get_inode in ceph_fill_trace X-Git-Tag: v0.2~229^2~6 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f374d2304df556ac61a32079bebabda0d5e10718;p=ceph.git kclient: ceph_get_inode cleanup; use ceph_get_inode in ceph_fill_trace --- diff --git a/src/kernel/inode.c b/src/kernel/inode.c index fd1ed6ba481..e5ffd3304c0 100644 --- a/src/kernel/inode.c +++ b/src/kernel/inode.c @@ -16,34 +16,34 @@ int ceph_inode_debug = 50; const struct inode_operations ceph_symlink_iops; -int ceph_get_inode(struct super_block *sb, __u64 ino, struct inode **pinode) +/* + * find or create an inode, given the ceph ino number + */ +struct inode *ceph_get_inode(struct super_block *sb, __u64 ino) { + struct inode *inode; struct ceph_inode_info *ci; ino_t inot; - BUG_ON(pinode == NULL); - inot = ceph_ino_to_ino(ino); #if BITS_PER_LONG == 64 - *pinode = iget_locked(sb, ino); + inode = iget_locked(sb, ino); #else - *pinode = iget5_locked(sb, inot, ceph_ino_compare, ceph_set_ino_cb, - &ino); + inode = iget5_locked(sb, inot, ceph_ino_compare, ceph_set_ino_cb, &ino); #endif - if (*pinode == NULL) - return -ENOMEM; - if ((*pinode)->i_state & I_NEW) - unlock_new_inode(*pinode); + if (inode == NULL) + return ERR_PTR(-ENOMEM); + if (inode->i_state & I_NEW) + unlock_new_inode(inode); - ci = ceph_inode(*pinode); + ci = ceph_inode(inode); #if BITS_PER_LONG == 64 - ceph_set_ino(*pinode, ino); + ceph_set_ino(inode, ino); #endif - ci->i_hashval = (*pinode)->i_ino; + ci->i_hashval = inode->i_ino; - dout(30, "get_inode on %lu=%llx got %p\n", (*pinode)->i_ino, ino, - *pinode); - return 0; + dout(30, "get_inode on %lu=%llx got %p\n", inode->i_ino, ino, inode); + return inode; } /* @@ -362,11 +362,9 @@ int ceph_fill_trace(struct super_block *sb, struct ceph_mds_request *req, in = dn->d_inode; } else { /* first reply (i.e. mount) */ - err = ceph_get_inode(sb, - le64_to_cpu(rinfo->trace_in[0].in->ino), - &in); - if (err < 0) - return err; + in = ceph_get_inode(sb,le64_to_cpu(rinfo->trace_in[0].in->ino)); + if (IS_ERR(in)) + return PTR_ERR(in); dn = d_alloc_root(in); if (dn == NULL) { derr(0, "d_alloc_root enomem badness on root dentry\n"); @@ -441,15 +439,15 @@ int ceph_fill_trace(struct super_block *sb, struct ceph_mds_request *req, igrab(in); inc_nlink(in); } else { - in = new_inode(dn->d_sb); - } - - if (in == NULL) { - dout(30, "new_inode badness\n"); - err = -ENOMEM; - d_delete(dn); - dn = NULL; - break; + in = ceph_get_inode(dn->d_sb); + if (IS_ERR(in)) { + dout(30, "new_inode badness\n"); + err = PTR_ERR(in); + d_delete(dn); + dn = NULL; + in = NULL; + break; + } } if ((err = ceph_fill_inode(in, ininfo)) < 0) { dout(30, "ceph_fill_inode badness\n"); diff --git a/src/kernel/super.h b/src/kernel/super.h index ef7f13123a8..37032512351 100644 --- a/src/kernel/super.h +++ b/src/kernel/super.h @@ -330,8 +330,7 @@ extern const char *ceph_msg_type_name(int type); /* inode.c */ -extern int ceph_get_inode(struct super_block *sb, u64 ino, - struct inode **pinode); +extern struct inode *ceph_get_inode(struct super_block *sb, u64 ino); extern int ceph_fill_inode(struct inode *inode, struct ceph_mds_reply_inode *info); extern int ceph_fill_trace(struct super_block *sb,