mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
Merge tag 'for-7.1/dm-fixes-3' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm
Pull device mapper fix from Mikulas Patocka: - fix race condition in dm-cache-policy-smq * tag 'for-7.1/dm-fixes-3' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm: dm cache policy smq: check allocation under invalidate lock
This commit is contained in:
@@ -1590,18 +1590,22 @@ static int smq_invalidate_mapping(struct dm_cache_policy *p, dm_cblock_t cblock)
|
||||
struct smq_policy *mq = to_smq_policy(p);
|
||||
struct entry *e = get_entry(&mq->cache_alloc, from_cblock(cblock));
|
||||
unsigned long flags;
|
||||
|
||||
if (!e->allocated)
|
||||
return -ENODATA;
|
||||
int r = 0;
|
||||
|
||||
spin_lock_irqsave(&mq->lock, flags);
|
||||
if (!e->allocated) {
|
||||
r = -ENODATA;
|
||||
goto out;
|
||||
}
|
||||
// FIXME: what if this block has pending background work?
|
||||
del_queue(mq, e);
|
||||
h_remove(&mq->table, e);
|
||||
free_entry(&mq->cache_alloc, e);
|
||||
|
||||
out:
|
||||
spin_unlock_irqrestore(&mq->lock, flags);
|
||||
|
||||
return 0;
|
||||
return r;
|
||||
}
|
||||
|
||||
static uint32_t smq_get_hint(struct dm_cache_policy *p, dm_cblock_t cblock)
|
||||
|
||||
Reference in New Issue
Block a user