The tt_internal's 'use' field is superfluous: the module's refcount can do
the work properly.  An acceptable side-effect is that this increases the
reference counts reported by 'lsmod'.
Remove the superfluous test when removing a target module.
[Crash possible without this on SMP - agk]
Cc: stable@kernel.org
Signed-off-by: Cheng Renquan <crquan@gmail.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
Reviewed-by: Alasdair G Kergon <agk@redhat.com>
Reviewed-by: Jonathan Brassow <jbrassow@redhat.com>
        struct target_type tt;
 
        struct list_head list;
-       long use;
 };
 
 static LIST_HEAD(_targets);
        down_read(&_lock);
 
        ti = __find_target_type(name);
-       if (ti) {
-               if ((ti->use == 0) && !try_module_get(ti->tt.module))
-                       ti = NULL;
-               else
-                       ti->use++;
-       }
+       if (ti && !try_module_get(ti->tt.module))
+               ti = NULL;
 
        up_read(&_lock);
        return ti;
        struct tt_internal *ti = (struct tt_internal *) t;
 
        down_read(&_lock);
-       if (--ti->use == 0)
-               module_put(ti->tt.module);
-
-       BUG_ON(ti->use < 0);
+       module_put(ti->tt.module);
        up_read(&_lock);
 
        return;
                BUG();
        }
 
-       if (ti->use) {
-               DMCRIT("Attempt to unregister target still in use: %s",
-                      t->name);
-               BUG();
-       }
-
        list_del(&ti->list);
        kfree(ti);