[SCSI] hpsa: use find_first_zero_bit
Akinobu Mita [Fri, 20 Jan 2012 15:15:27 +0000 (00:15 +0900)]
Use find_first_zero_bit to find the first cleared bit in a memory region.

This also includes the following minor changes.
- Use bitmap_zero
- Reduce unnecessary atomic bitops usage

Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Acked-by: Stephen M. Cameron <scameron@beardog.cce.hp.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>

drivers/scsi/hpsa.c

index 1319507..5019bea 100644 (file)
@@ -579,21 +579,19 @@ static int hpsa_find_target_lun(struct ctlr_info *h,
        int i, found = 0;
        DECLARE_BITMAP(lun_taken, HPSA_MAX_DEVICES);
 
-       memset(&lun_taken[0], 0, HPSA_MAX_DEVICES >> 3);
+       bitmap_zero(lun_taken, HPSA_MAX_DEVICES);
 
        for (i = 0; i < h->ndevices; i++) {
                if (h->dev[i]->bus == bus && h->dev[i]->target != -1)
-                       set_bit(h->dev[i]->target, lun_taken);
+                       __set_bit(h->dev[i]->target, lun_taken);
        }
 
-       for (i = 0; i < HPSA_MAX_DEVICES; i++) {
-               if (!test_bit(i, lun_taken)) {
-                       /* *bus = 1; */
-                       *target = i;
-                       *lun = 0;
-                       found = 1;
-                       break;
-               }
+       i = find_first_zero_bit(lun_taken, HPSA_MAX_DEVICES);
+       if (i < HPSA_MAX_DEVICES) {
+               /* *bus = 1; */
+               *target = i;
+               *lun = 0;
+               found = 1;
        }
        return !found;
 }