title: Sending a pointer to hashtable causes a compilation error
body: <p>Below is  a kernel module which can be compiled and run nicely. I have written a method <code>show</code> which gets the pointer to a hashtable and prints it. But if I use the methods argument, b, I get a compilation error. I can only use the global variable a.</p>
  
  <pre><code>#include &lt;linux/module.h&gt;
  #include &lt;linux/kernel.h&gt;
  #include &lt;linux/slab.h&gt;
  #include &lt;linux/hashtable.h&gt;
  
  MODULE_LICENSE("GPL");
  
  typedef struct {
      int age;
      struct hlist_node my_next;
  } my_type;
  
  DEFINE_HASHTABLE(a, 3);
  my_type *node1, *node2, *node3;
  
  void show(struct hlist_head b[]){
      int i;
      my_type *temp;
  
      printk(KERN_INFO "a: %p \tb: %p \n", a, b);    // Always the same address.
  
      hash_for_each(a, i, temp, my_next){           // Change the a to b
          printk(KERN_INFO "%d\n", temp-&gt;age);
      }
  }
  
  
  int init_module(void){
      printk(KERN_INFO "Hi.\n");
  
      node1 = kmalloc(sizeof(my_type), GFP_KERNEL);
      node1-&gt;age = 28;
      node2 = kmalloc(sizeof(my_type), GFP_KERNEL);
      node2-&gt;age = 27;
      node3 = kmalloc(sizeof(my_type), GFP_KERNEL);
      node3-&gt;age = 20;
  
      show(a);
      hash_add(a, &amp;node1-&gt;my_next, 0);
      hash_add(a, &amp;node2-&gt;my_next, 1);
      hash_add(a, &amp;node3-&gt;my_next, 1);
      show(a);
  
      return 0;
  }
  
  
  void cleanup_module(void){
      kfree(node1);
      kfree(node2);
      kfree(node);
      printk(KERN_INFO "Bye.\n");
  }
  </code></pre>
  
  <p>The error I get is:</p>
  
  <pre><code>In file included from include/linux/thread_info.h:11:0,
               from /usr/src/kernels/3.15.8-200.fc20.x86_64/arch/x86/include/asm/preempt.h:6,
               from include/linux/preempt.h:18,
               from include/linux/spinlock.h:50,
               from include/linux/seqlock.h:35,
               from include/linux/time.h:5,
               from include/linux/stat.h:18,
               from include/linux/module.h:10,
               from /home/k/development/hash2/main.c:1:
  /home/k/development/hash2/main.c: In function ‘show’:
  include/linux/bug.h:33:45: error: negative width in bit-field ‘&lt;anonymous&gt;’
   #define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))
                                           ^
  </code></pre>
  
  <p>I have tried playing with the definitions like using <code>struct hlist_head * b[]</code> and using in the <code>hash_for_each</code> macro the <code>*b</code> but non worked.<br>
  I also tried defining <code>DEFINE_HASHTABLE(c, 3);</code> inside the method <code>show()</code> as shown below works, but it's quite useless.</p>
  
  <pre><code>void show(struct hlist_head b[]){
      int i;
      my_type *temp;
  
      DEFINE_HASHTABLE(c, 3);
      printk(KERN_INFO "a: %p \tb: %p \n", a, b);
  
      hash_for_each(c, i, temp, my_next){
          printk(KERN_INFO "%d\n", temp-&gt;age);
      }
  }
  </code></pre>
  
  <p>So, why do I get this error? How do I solve it?</p>