Re: [PATCH v3 13/17] lockd: use new hashtable implementation

2012-08-22 Thread Sasha Levin
On 08/22/2012 03:22 PM, Mathieu Desnoyers wrote:
> * Sasha Levin (levinsasha...@gmail.com) wrote:
>> On 08/22/2012 01:47 PM, J. Bruce Fields wrote:
>>> On Wed, Aug 22, 2012 at 04:27:08AM +0200, Sasha Levin wrote:
 +static int __init nlm_init(void)
 +{
 +  hash_init(nlm_files);
 +  return 0;
 +}
 +
 +module_init(nlm_init);
>>>
>>> That's giving me:
>>>
>>> fs/lockd/svcsubs.o: In function `nlm_init':
>>> /home/bfields/linux-2.6/fs/lockd/svcsubs.c:454: multiple definition of 
>>> `init_module'
>>> fs/lockd/svc.o:/home/bfields/linux-2.6/fs/lockd/svc.c:606: first defined 
>>> here
>>> make[2]: *** [fs/lockd/lockd.o] Error 1
>>> make[1]: *** [fs/lockd] Error 2
>>> make[1]: *** Waiting for unfinished jobs
>>
>> I tested this entire patch set both with linux-next and Linus' latest master,
>> and it worked fine in both places.
>>
>> Is it possible that lockd has a -next tree which isn't pulled into 
>> linux-next?
>> (there's nothing listed in MAINTAINERS that I could see).
> 
> fs/lockd/Makefile:
> 
> obj-$(CONFIG_LOCKD) += lockd.o
> 
> lockd-objs-y := clntlock.o clntproc.o clntxdr.o host.o svc.o svclock.o \
> svcshare.o svcproc.o svcsubs.o mon.o xdr.o grace.o
> 
> your patch adds a module_init to svcsubs.c.
> However, there is already one in svc.c, pulled into the same module.
> 
> in your test build, is CONFIG_LOCKD defined as "m" or "y" ? You should
> always test both.
> 
> One solution here is to create a "local" init function in svcsubs.c and
> expose it to svc.c, so the latter can call it from its module init
> function.

Ah yes, it was on =y and I didn't notice :/

I'll fix that.

> Thanks,
> 
> Mathieu
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v3 13/17] lockd: use new hashtable implementation

2012-08-22 Thread Mathieu Desnoyers
* Sasha Levin (levinsasha...@gmail.com) wrote:
> On 08/22/2012 01:47 PM, J. Bruce Fields wrote:
> > On Wed, Aug 22, 2012 at 04:27:08AM +0200, Sasha Levin wrote:
> >> +static int __init nlm_init(void)
> >> +{
> >> +  hash_init(nlm_files);
> >> +  return 0;
> >> +}
> >> +
> >> +module_init(nlm_init);
> > 
> > That's giving me:
> > 
> > fs/lockd/svcsubs.o: In function `nlm_init':
> > /home/bfields/linux-2.6/fs/lockd/svcsubs.c:454: multiple definition of 
> > `init_module'
> > fs/lockd/svc.o:/home/bfields/linux-2.6/fs/lockd/svc.c:606: first defined 
> > here
> > make[2]: *** [fs/lockd/lockd.o] Error 1
> > make[1]: *** [fs/lockd] Error 2
> > make[1]: *** Waiting for unfinished jobs
> 
> I tested this entire patch set both with linux-next and Linus' latest master,
> and it worked fine in both places.
> 
> Is it possible that lockd has a -next tree which isn't pulled into linux-next?
> (there's nothing listed in MAINTAINERS that I could see).

fs/lockd/Makefile:

obj-$(CONFIG_LOCKD) += lockd.o

lockd-objs-y := clntlock.o clntproc.o clntxdr.o host.o svc.o svclock.o \
svcshare.o svcproc.o svcsubs.o mon.o xdr.o grace.o

your patch adds a module_init to svcsubs.c.
However, there is already one in svc.c, pulled into the same module.

in your test build, is CONFIG_LOCKD defined as "m" or "y" ? You should
always test both.

One solution here is to create a "local" init function in svcsubs.c and
expose it to svc.c, so the latter can call it from its module init
function.

Thanks,

Mathieu

-- 
Mathieu Desnoyers
Operating System Efficiency R Consultant
EfficiOS Inc.
http://www.efficios.com
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v3 13/17] lockd: use new hashtable implementation

2012-08-22 Thread J. Bruce Fields
On Wed, Aug 22, 2012 at 02:13:54PM +0200, Sasha Levin wrote:
> On 08/22/2012 01:47 PM, J. Bruce Fields wrote:
> > On Wed, Aug 22, 2012 at 04:27:08AM +0200, Sasha Levin wrote:
> >> +static int __init nlm_init(void)
> >> +{
> >> +  hash_init(nlm_files);
> >> +  return 0;
> >> +}
> >> +
> >> +module_init(nlm_init);
> > 
> > That's giving me:
> > 
> > fs/lockd/svcsubs.o: In function `nlm_init':
> > /home/bfields/linux-2.6/fs/lockd/svcsubs.c:454: multiple definition of 
> > `init_module'
> > fs/lockd/svc.o:/home/bfields/linux-2.6/fs/lockd/svc.c:606: first defined 
> > here
> > make[2]: *** [fs/lockd/lockd.o] Error 1
> > make[1]: *** [fs/lockd] Error 2
> > make[1]: *** Waiting for unfinished jobs
> 
> I tested this entire patch set both with linux-next and Linus' latest master,
> and it worked fine in both places.
> 
> Is it possible that lockd has a -next tree which isn't pulled into linux-next?
> (there's nothing listed in MAINTAINERS that I could see).

No, there's the same problem with Linus's latest.

I'm applying just patches 1 and 13--but doesn't look like your earlier
patches touch lockd.

Are you actually building lockd?  (CONFIG_LOCKD).

--b.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v3 13/17] lockd: use new hashtable implementation

2012-08-22 Thread Sasha Levin
On 08/22/2012 01:47 PM, J. Bruce Fields wrote:
> On Wed, Aug 22, 2012 at 04:27:08AM +0200, Sasha Levin wrote:
>> +static int __init nlm_init(void)
>> +{
>> +hash_init(nlm_files);
>> +return 0;
>> +}
>> +
>> +module_init(nlm_init);
> 
> That's giving me:
> 
> fs/lockd/svcsubs.o: In function `nlm_init':
> /home/bfields/linux-2.6/fs/lockd/svcsubs.c:454: multiple definition of 
> `init_module'
> fs/lockd/svc.o:/home/bfields/linux-2.6/fs/lockd/svc.c:606: first defined here
> make[2]: *** [fs/lockd/lockd.o] Error 1
> make[1]: *** [fs/lockd] Error 2
> make[1]: *** Waiting for unfinished jobs

I tested this entire patch set both with linux-next and Linus' latest master,
and it worked fine in both places.

Is it possible that lockd has a -next tree which isn't pulled into linux-next?
(there's nothing listed in MAINTAINERS that I could see).
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v3 13/17] lockd: use new hashtable implementation

2012-08-22 Thread J. Bruce Fields
On Wed, Aug 22, 2012 at 04:27:08AM +0200, Sasha Levin wrote:
> +static int __init nlm_init(void)
> +{
> + hash_init(nlm_files);
> + return 0;
> +}
> +
> +module_init(nlm_init);

That's giving me:

fs/lockd/svcsubs.o: In function `nlm_init':
/home/bfields/linux-2.6/fs/lockd/svcsubs.c:454: multiple definition of 
`init_module'
fs/lockd/svc.o:/home/bfields/linux-2.6/fs/lockd/svc.c:606: first defined here
make[2]: *** [fs/lockd/lockd.o] Error 1
make[1]: *** [fs/lockd] Error 2
make[1]: *** Waiting for unfinished jobs

--b.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v3 13/17] lockd: use new hashtable implementation

2012-08-22 Thread J. Bruce Fields
On Wed, Aug 22, 2012 at 04:27:08AM +0200, Sasha Levin wrote:
 +static int __init nlm_init(void)
 +{
 + hash_init(nlm_files);
 + return 0;
 +}
 +
 +module_init(nlm_init);

That's giving me:

fs/lockd/svcsubs.o: In function `nlm_init':
/home/bfields/linux-2.6/fs/lockd/svcsubs.c:454: multiple definition of 
`init_module'
fs/lockd/svc.o:/home/bfields/linux-2.6/fs/lockd/svc.c:606: first defined here
make[2]: *** [fs/lockd/lockd.o] Error 1
make[1]: *** [fs/lockd] Error 2
make[1]: *** Waiting for unfinished jobs

--b.
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v3 13/17] lockd: use new hashtable implementation

2012-08-22 Thread Sasha Levin
On 08/22/2012 01:47 PM, J. Bruce Fields wrote:
 On Wed, Aug 22, 2012 at 04:27:08AM +0200, Sasha Levin wrote:
 +static int __init nlm_init(void)
 +{
 +hash_init(nlm_files);
 +return 0;
 +}
 +
 +module_init(nlm_init);
 
 That's giving me:
 
 fs/lockd/svcsubs.o: In function `nlm_init':
 /home/bfields/linux-2.6/fs/lockd/svcsubs.c:454: multiple definition of 
 `init_module'
 fs/lockd/svc.o:/home/bfields/linux-2.6/fs/lockd/svc.c:606: first defined here
 make[2]: *** [fs/lockd/lockd.o] Error 1
 make[1]: *** [fs/lockd] Error 2
 make[1]: *** Waiting for unfinished jobs

I tested this entire patch set both with linux-next and Linus' latest master,
and it worked fine in both places.

Is it possible that lockd has a -next tree which isn't pulled into linux-next?
(there's nothing listed in MAINTAINERS that I could see).
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v3 13/17] lockd: use new hashtable implementation

2012-08-22 Thread J. Bruce Fields
On Wed, Aug 22, 2012 at 02:13:54PM +0200, Sasha Levin wrote:
 On 08/22/2012 01:47 PM, J. Bruce Fields wrote:
  On Wed, Aug 22, 2012 at 04:27:08AM +0200, Sasha Levin wrote:
  +static int __init nlm_init(void)
  +{
  +  hash_init(nlm_files);
  +  return 0;
  +}
  +
  +module_init(nlm_init);
  
  That's giving me:
  
  fs/lockd/svcsubs.o: In function `nlm_init':
  /home/bfields/linux-2.6/fs/lockd/svcsubs.c:454: multiple definition of 
  `init_module'
  fs/lockd/svc.o:/home/bfields/linux-2.6/fs/lockd/svc.c:606: first defined 
  here
  make[2]: *** [fs/lockd/lockd.o] Error 1
  make[1]: *** [fs/lockd] Error 2
  make[1]: *** Waiting for unfinished jobs
 
 I tested this entire patch set both with linux-next and Linus' latest master,
 and it worked fine in both places.
 
 Is it possible that lockd has a -next tree which isn't pulled into linux-next?
 (there's nothing listed in MAINTAINERS that I could see).

No, there's the same problem with Linus's latest.

I'm applying just patches 1 and 13--but doesn't look like your earlier
patches touch lockd.

Are you actually building lockd?  (CONFIG_LOCKD).

--b.
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v3 13/17] lockd: use new hashtable implementation

2012-08-22 Thread Mathieu Desnoyers
* Sasha Levin (levinsasha...@gmail.com) wrote:
 On 08/22/2012 01:47 PM, J. Bruce Fields wrote:
  On Wed, Aug 22, 2012 at 04:27:08AM +0200, Sasha Levin wrote:
  +static int __init nlm_init(void)
  +{
  +  hash_init(nlm_files);
  +  return 0;
  +}
  +
  +module_init(nlm_init);
  
  That's giving me:
  
  fs/lockd/svcsubs.o: In function `nlm_init':
  /home/bfields/linux-2.6/fs/lockd/svcsubs.c:454: multiple definition of 
  `init_module'
  fs/lockd/svc.o:/home/bfields/linux-2.6/fs/lockd/svc.c:606: first defined 
  here
  make[2]: *** [fs/lockd/lockd.o] Error 1
  make[1]: *** [fs/lockd] Error 2
  make[1]: *** Waiting for unfinished jobs
 
 I tested this entire patch set both with linux-next and Linus' latest master,
 and it worked fine in both places.
 
 Is it possible that lockd has a -next tree which isn't pulled into linux-next?
 (there's nothing listed in MAINTAINERS that I could see).

fs/lockd/Makefile:

obj-$(CONFIG_LOCKD) += lockd.o

lockd-objs-y := clntlock.o clntproc.o clntxdr.o host.o svc.o svclock.o \
svcshare.o svcproc.o svcsubs.o mon.o xdr.o grace.o

your patch adds a module_init to svcsubs.c.
However, there is already one in svc.c, pulled into the same module.

in your test build, is CONFIG_LOCKD defined as m or y ? You should
always test both.

One solution here is to create a local init function in svcsubs.c and
expose it to svc.c, so the latter can call it from its module init
function.

Thanks,

Mathieu

-- 
Mathieu Desnoyers
Operating System Efficiency RD Consultant
EfficiOS Inc.
http://www.efficios.com
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v3 13/17] lockd: use new hashtable implementation

2012-08-22 Thread Sasha Levin
On 08/22/2012 03:22 PM, Mathieu Desnoyers wrote:
 * Sasha Levin (levinsasha...@gmail.com) wrote:
 On 08/22/2012 01:47 PM, J. Bruce Fields wrote:
 On Wed, Aug 22, 2012 at 04:27:08AM +0200, Sasha Levin wrote:
 +static int __init nlm_init(void)
 +{
 +  hash_init(nlm_files);
 +  return 0;
 +}
 +
 +module_init(nlm_init);

 That's giving me:

 fs/lockd/svcsubs.o: In function `nlm_init':
 /home/bfields/linux-2.6/fs/lockd/svcsubs.c:454: multiple definition of 
 `init_module'
 fs/lockd/svc.o:/home/bfields/linux-2.6/fs/lockd/svc.c:606: first defined 
 here
 make[2]: *** [fs/lockd/lockd.o] Error 1
 make[1]: *** [fs/lockd] Error 2
 make[1]: *** Waiting for unfinished jobs

 I tested this entire patch set both with linux-next and Linus' latest master,
 and it worked fine in both places.

 Is it possible that lockd has a -next tree which isn't pulled into 
 linux-next?
 (there's nothing listed in MAINTAINERS that I could see).
 
 fs/lockd/Makefile:
 
 obj-$(CONFIG_LOCKD) += lockd.o
 
 lockd-objs-y := clntlock.o clntproc.o clntxdr.o host.o svc.o svclock.o \
 svcshare.o svcproc.o svcsubs.o mon.o xdr.o grace.o
 
 your patch adds a module_init to svcsubs.c.
 However, there is already one in svc.c, pulled into the same module.
 
 in your test build, is CONFIG_LOCKD defined as m or y ? You should
 always test both.
 
 One solution here is to create a local init function in svcsubs.c and
 expose it to svc.c, so the latter can call it from its module init
 function.

Ah yes, it was on =y and I didn't notice :/

I'll fix that.

 Thanks,
 
 Mathieu
 

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH v3 13/17] lockd: use new hashtable implementation

2012-08-21 Thread Sasha Levin
Switch lockd to use the new hashtable implementation. This reduces the amount of
generic unrelated code in lockd.

Signed-off-by: Sasha Levin 
---
 fs/lockd/svcsubs.c |   66 ---
 1 files changed, 36 insertions(+), 30 deletions(-)

diff --git a/fs/lockd/svcsubs.c b/fs/lockd/svcsubs.c
index 0deb5f6..d223a1f 100644
--- a/fs/lockd/svcsubs.c
+++ b/fs/lockd/svcsubs.c
@@ -20,6 +20,7 @@
 #include 
 #include 
 #include 
+#include 
 
 #define NLMDBG_FACILITYNLMDBG_SVCSUBS
 
@@ -28,8 +29,7 @@
  * Global file hash table
  */
 #define FILE_HASH_BITS 7
-#define FILE_NRHASH(1f_handle, f))
goto found;
 
@@ -123,7 +123,7 @@ nlm_lookup_file(struct svc_rqst *rqstp, struct nlm_file 
**result,
goto out_free;
}
 
-   hlist_add_head(>f_list, _files[hash]);
+   hash_add(nlm_files, >f_list, key);
 
 found:
dprintk("lockd: found file %p (count %d)\n", file, file->f_count);
@@ -147,8 +147,8 @@ static inline void
 nlm_delete_file(struct nlm_file *file)
 {
nlm_debug_print_file("closing file", file);
-   if (!hlist_unhashed(>f_list)) {
-   hlist_del(>f_list);
+   if (hash_hashed(>f_list)) {
+   hash_del(>f_list);
nlmsvc_ops->fclose(file->f_file);
kfree(file);
} else {
@@ -253,27 +253,25 @@ nlm_traverse_files(void *data, nlm_host_match_fn_t match,
int i, ret = 0;
 
mutex_lock(_file_mutex);
-   for (i = 0; i < FILE_NRHASH; i++) {
-   hlist_for_each_entry_safe(file, pos, next, _files[i], 
f_list) {
-   if (is_failover_file && !is_failover_file(data, file))
-   continue;
-   file->f_count++;
-   mutex_unlock(_file_mutex);
-
-   /* Traverse locks, blocks and shares of this file
-* and update file->f_locks count */
-   if (nlm_inspect_file(data, file, match))
-   ret = 1;
-
-   mutex_lock(_file_mutex);
-   file->f_count--;
-   /* No more references to this file. Let go of it. */
-   if (list_empty(>f_blocks) && !file->f_locks
-&& !file->f_shares && !file->f_count) {
-   hlist_del(>f_list);
-   nlmsvc_ops->fclose(file->f_file);
-   kfree(file);
-   }
+   hash_for_each_safe(nlm_files, i, pos, next, file, f_list) {
+   if (is_failover_file && !is_failover_file(data, file))
+   continue;
+   file->f_count++;
+   mutex_unlock(_file_mutex);
+
+   /* Traverse locks, blocks and shares of this file
+* and update file->f_locks count */
+   if (nlm_inspect_file(data, file, match))
+   ret = 1;
+
+   mutex_lock(_file_mutex);
+   file->f_count--;
+   /* No more references to this file. Let go of it. */
+   if (list_empty(>f_blocks) && !file->f_locks
+&& !file->f_shares && !file->f_count) {
+   hash_del(>f_list);
+   nlmsvc_ops->fclose(file->f_file);
+   kfree(file);
}
}
mutex_unlock(_file_mutex);
@@ -451,3 +449,11 @@ nlmsvc_unlock_all_by_ip(struct sockaddr *server_addr)
return ret ? -EIO : 0;
 }
 EXPORT_SYMBOL_GPL(nlmsvc_unlock_all_by_ip);
+
+static int __init nlm_init(void)
+{
+   hash_init(nlm_files);
+   return 0;
+}
+
+module_init(nlm_init);
-- 
1.7.8.6

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH v3 13/17] lockd: use new hashtable implementation

2012-08-21 Thread Sasha Levin
Switch lockd to use the new hashtable implementation. This reduces the amount of
generic unrelated code in lockd.

Signed-off-by: Sasha Levin levinsasha...@gmail.com
---
 fs/lockd/svcsubs.c |   66 ---
 1 files changed, 36 insertions(+), 30 deletions(-)

diff --git a/fs/lockd/svcsubs.c b/fs/lockd/svcsubs.c
index 0deb5f6..d223a1f 100644
--- a/fs/lockd/svcsubs.c
+++ b/fs/lockd/svcsubs.c
@@ -20,6 +20,7 @@
 #include linux/lockd/share.h
 #include linux/module.h
 #include linux/mount.h
+#include linux/hashtable.h
 
 #define NLMDBG_FACILITYNLMDBG_SVCSUBS
 
@@ -28,8 +29,7 @@
  * Global file hash table
  */
 #define FILE_HASH_BITS 7
-#define FILE_NRHASH(1FILE_HASH_BITS)
-static struct hlist_head   nlm_files[FILE_NRHASH];
+static DEFINE_HASHTABLE(nlm_files, FILE_HASH_BITS);
 static DEFINE_MUTEX(nlm_file_mutex);
 
 #ifdef NFSD_DEBUG
@@ -68,7 +68,7 @@ static inline unsigned int file_hash(struct nfs_fh *f)
int i;
for (i=0; iNFS2_FHSIZE;i++)
tmp += f-data[i];
-   return tmp  (FILE_NRHASH - 1);
+   return tmp;
 }
 
 /*
@@ -86,17 +86,17 @@ nlm_lookup_file(struct svc_rqst *rqstp, struct nlm_file 
**result,
 {
struct hlist_node *pos;
struct nlm_file *file;
-   unsigned inthash;
+   unsigned intkey;
__be32  nfserr;
 
nlm_debug_print_fh(nlm_lookup_file, f);
 
-   hash = file_hash(f);
+   key = file_hash(f);
 
/* Lock file table */
mutex_lock(nlm_file_mutex);
 
-   hlist_for_each_entry(file, pos, nlm_files[hash], f_list)
+   hash_for_each_possible(nlm_files, file, pos, f_list, file_hash(f))
if (!nfs_compare_fh(file-f_handle, f))
goto found;
 
@@ -123,7 +123,7 @@ nlm_lookup_file(struct svc_rqst *rqstp, struct nlm_file 
**result,
goto out_free;
}
 
-   hlist_add_head(file-f_list, nlm_files[hash]);
+   hash_add(nlm_files, file-f_list, key);
 
 found:
dprintk(lockd: found file %p (count %d)\n, file, file-f_count);
@@ -147,8 +147,8 @@ static inline void
 nlm_delete_file(struct nlm_file *file)
 {
nlm_debug_print_file(closing file, file);
-   if (!hlist_unhashed(file-f_list)) {
-   hlist_del(file-f_list);
+   if (hash_hashed(file-f_list)) {
+   hash_del(file-f_list);
nlmsvc_ops-fclose(file-f_file);
kfree(file);
} else {
@@ -253,27 +253,25 @@ nlm_traverse_files(void *data, nlm_host_match_fn_t match,
int i, ret = 0;
 
mutex_lock(nlm_file_mutex);
-   for (i = 0; i  FILE_NRHASH; i++) {
-   hlist_for_each_entry_safe(file, pos, next, nlm_files[i], 
f_list) {
-   if (is_failover_file  !is_failover_file(data, file))
-   continue;
-   file-f_count++;
-   mutex_unlock(nlm_file_mutex);
-
-   /* Traverse locks, blocks and shares of this file
-* and update file-f_locks count */
-   if (nlm_inspect_file(data, file, match))
-   ret = 1;
-
-   mutex_lock(nlm_file_mutex);
-   file-f_count--;
-   /* No more references to this file. Let go of it. */
-   if (list_empty(file-f_blocks)  !file-f_locks
- !file-f_shares  !file-f_count) {
-   hlist_del(file-f_list);
-   nlmsvc_ops-fclose(file-f_file);
-   kfree(file);
-   }
+   hash_for_each_safe(nlm_files, i, pos, next, file, f_list) {
+   if (is_failover_file  !is_failover_file(data, file))
+   continue;
+   file-f_count++;
+   mutex_unlock(nlm_file_mutex);
+
+   /* Traverse locks, blocks and shares of this file
+* and update file-f_locks count */
+   if (nlm_inspect_file(data, file, match))
+   ret = 1;
+
+   mutex_lock(nlm_file_mutex);
+   file-f_count--;
+   /* No more references to this file. Let go of it. */
+   if (list_empty(file-f_blocks)  !file-f_locks
+ !file-f_shares  !file-f_count) {
+   hash_del(file-f_list);
+   nlmsvc_ops-fclose(file-f_file);
+   kfree(file);
}
}
mutex_unlock(nlm_file_mutex);
@@ -451,3 +449,11 @@ nlmsvc_unlock_all_by_ip(struct sockaddr *server_addr)
return ret ? -EIO : 0;
 }
 EXPORT_SYMBOL_GPL(nlmsvc_unlock_all_by_ip);
+
+static int __init nlm_init(void)
+{
+   hash_init(nlm_files);
+   return 0;
+}
+
+module_init(nlm_init);
-- 
1.7.8.6

--
To unsubscribe from this list: send the line unsubscribe linux-kernel