Merge tag 'block-5.19-2022-07-01' of git://git.kernel.dk/linux-block
Pull block fixes from Jens Axboe:
- Fix for batch getting of tags in sbitmap (wuchi)
- NVMe pull request via Christoph:
- More quirks (Lamarque Vieira Souza, Pablo Greco)
- Fix a fabrics disconnect regression (Ruozhu Li)
- Fix a nvmet-tcp data_digest calculation regression (Sagi
Grimberg)
- Fix nvme-tcp send failure handling (Sagi Grimberg)
- Fix a regression with nvmet-loop and passthrough controllers
(Alan Adamson)
* tag 'block-5.19-2022-07-01' of git://git.kernel.dk/linux-block:
nvme-pci: add NVME_QUIRK_BOGUS_NID for ADATA IM2P33F8ABR1
nvmet: add a clear_ids attribute for passthru targets
nvme: fix regression when disconnect a recovering ctrl
nvme-pci: add NVME_QUIRK_BOGUS_NID for ADATA XPG SX6000LNP (AKA SPECTRIX S40G)
nvme-tcp: always fail a request when sending it failed
nvmet-tcp: fix regression in data_digest calculation
lib/sbitmap: Fix invalid loop in __sbitmap_queue_get_batch()
This commit is contained in:
@@ -528,7 +528,7 @@ unsigned long __sbitmap_queue_get_batch(struct sbitmap_queue *sbq, int nr_tags,
|
||||
|
||||
sbitmap_deferred_clear(map);
|
||||
if (map->word == (1UL << (map_depth - 1)) - 1)
|
||||
continue;
|
||||
goto next;
|
||||
|
||||
nr = find_first_zero_bit(&map->word, map_depth);
|
||||
if (nr + nr_tags <= map_depth) {
|
||||
@@ -539,6 +539,8 @@ unsigned long __sbitmap_queue_get_batch(struct sbitmap_queue *sbq, int nr_tags,
|
||||
get_mask = ((1UL << map_tags) - 1) << nr;
|
||||
do {
|
||||
val = READ_ONCE(map->word);
|
||||
if ((val & ~get_mask) != val)
|
||||
goto next;
|
||||
ret = atomic_long_cmpxchg(ptr, val, get_mask | val);
|
||||
} while (ret != val);
|
||||
get_mask = (get_mask & ~ret) >> nr;
|
||||
@@ -549,6 +551,7 @@ unsigned long __sbitmap_queue_get_batch(struct sbitmap_queue *sbq, int nr_tags,
|
||||
return get_mask;
|
||||
}
|
||||
}
|
||||
next:
|
||||
/* Jump to next index. */
|
||||
if (++index >= sb->map_nr)
|
||||
index = 0;
|
||||
|
||||
Reference in New Issue
Block a user