summaryrefslogtreecommitdiffstats
path: root/xlators/nfs/server/src/nfs3-helpers.c
diff options
context:
space:
mode:
authorAnand Avati <avati@gluster.com>2010-12-07 05:36:54 +0000
committerAnand V. Avati <avati@dev.gluster.com>2010-12-07 08:14:37 -0800
commit147b20c4a485ddb4b31b1811be4bf90610c91f7f (patch)
tree40393b9a2c5c226e612bf1caaafa027afc5f9555 /xlators/nfs/server/src/nfs3-helpers.c
parent64cdcbe39bcb8d52d0c6aa88ce5cd5f3d6062a9e (diff)
nfs: cleanup inode_ref/inode_unref to fix inode leaks and extra unrefsv3.1.2qa1
Signed-off-by: Anand V. Avati <avati@blackhole.gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2195 (Crash in __inode_retire on NFS failover) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2195
Diffstat (limited to 'xlators/nfs/server/src/nfs3-helpers.c')
-rw-r--r--xlators/nfs/server/src/nfs3-helpers.c25
1 files changed, 22 insertions, 3 deletions
diff --git a/xlators/nfs/server/src/nfs3-helpers.c b/xlators/nfs/server/src/nfs3-helpers.c
index f64f049a308..61ef1bef59a 100644
--- a/xlators/nfs/server/src/nfs3-helpers.c
+++ b/xlators/nfs/server/src/nfs3-helpers.c
@@ -2570,6 +2570,7 @@ nfs3_fh_resolve_entry_lookup_cbk (call_frame_t *frame, void *cookie,
struct iatt *postparent)
{
nfs3_call_state_t *cs = NULL;
+ inode_t *linked_inode = NULL;
cs = frame->local;
cs->resolve_ret = op_ret;
@@ -2583,7 +2584,12 @@ nfs3_fh_resolve_entry_lookup_cbk (call_frame_t *frame, void *cookie,
gf_log (GF_NFS3, GF_LOG_TRACE, "Entry looked up: %s",
cs->resolvedloc.path);
- inode_link (inode, cs->resolvedloc.parent, cs->resolvedloc.name, buf);
+ linked_inode = inode_link (inode, cs->resolvedloc.parent,
+ cs->resolvedloc.name, buf);
+ if (linked_inode) {
+ inode_lookup (linked_inode);
+ inode_unref (linked_inode);
+ }
err:
nfs3_call_resume (cs);
return 0;
@@ -2634,6 +2640,7 @@ nfs3_fh_resolve_parent_lookup_cbk (call_frame_t *frame, void *cookie,
struct iatt *postparent)
{
nfs3_call_state_t *cs = NULL;
+ inode_t *linked_inode = NULL;
cs = frame->local;
cs->resolve_ret = op_ret;
@@ -2648,7 +2655,12 @@ nfs3_fh_resolve_parent_lookup_cbk (call_frame_t *frame, void *cookie,
gf_log (GF_NFS3, GF_LOG_TRACE, "Entry looked up: %s",
cs->resolvedloc.path);
- inode_link (inode, cs->resolvedloc.parent, cs->resolvedloc.name, buf);
+ linked_inode = inode_link (inode, cs->resolvedloc.parent,
+ cs->resolvedloc.name, buf);
+ if (linked_inode) {
+ inode_lookup (linked_inode);
+ inode_unref (linked_inode);
+ }
nfs3_fh_resolve_entry_hard (cs);
err:
@@ -2749,6 +2761,7 @@ nfs3_fh_resolve_dir_lookup_cbk (call_frame_t *frame, void *cookie,
{
nfs3_call_state_t *cs = NULL;
nfs_user_t nfu = {0, };
+ inode_t *linked_inode = NULL;
cs = frame->local;
cs->resolve_ret = op_ret;
@@ -2764,7 +2777,13 @@ nfs3_fh_resolve_dir_lookup_cbk (call_frame_t *frame, void *cookie,
cs->resolvedloc.path);
nfs_user_root_create (&nfu);
- inode_link (inode, cs->resolvedloc.parent, cs->resolvedloc.name, buf);
+ linked_inode = inode_link (inode, cs->resolvedloc.parent,
+ cs->resolvedloc.name, buf);
+ if (linked_inode) {
+ inode_lookup (linked_inode);
+ inode_unref (linked_inode);
+ }
+
nfs_opendir (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc,
nfs3_fh_resolve_opendir_cbk, cs);