[PATCH] knfsd: lockd: fix refount on nsm
authorNeilBrown <neilb@suse.de>
Wed, 4 Oct 2006 09:16:15 +0000 (02:16 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Wed, 4 Oct 2006 14:55:20 +0000 (07:55 -0700)
If nlm_lookup_host finds what it is looking for it exits with an extra
reference on the matching 'nsm' structure.

So don't actually count the reference until we are (fairly) sure it is going
to be used.

Signed-off-by: Neil Brown <neilb@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
fs/lockd/host.c

index 0257a5594524b92e28b502cefffe80e4285f959b..fb24a97303458f1b282f81111895c105e2c0399f 100644 (file)
@@ -103,8 +103,8 @@ nlm_lookup_host(int server, const struct sockaddr_in *sin,
                        continue;
 
                /* See if we have an NSM handle for this client */
-               if (!nsm && (nsm = host->h_nsmhandle) != 0)
-                       atomic_inc(&nsm->sm_count);
+               if (!nsm)
+                       nsm = host->h_nsmhandle;
 
                if (host->h_proto != proto)
                        continue;
@@ -120,6 +120,8 @@ nlm_lookup_host(int server, const struct sockaddr_in *sin,
                nlm_get_host(host);
                goto out;
        }
+       if (nsm)
+               atomic_inc(&nsm->sm_count);
 
        host = NULL;