These locks are used in both interrupt and user context so we must preserve interrupts state.
https://virtuozzo.atlassian.net/browse/VSTOR-98471 Signed-off-by: Alexander Atanasov <alexander.atana...@virtuozzo.com> --- drivers/md/dm-ploop-map.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/md/dm-ploop-map.c b/drivers/md/dm-ploop-map.c index a47341f40627..c6c46b49bccf 100644 --- a/drivers/md/dm-ploop-map.c +++ b/drivers/md/dm-ploop-map.c @@ -1408,6 +1408,7 @@ static void ploop_check_standby_mode(struct ploop *ploop, long res) { struct request_queue *q = ploop_blk_queue(ploop); int prev; + unsigned long flags; if (!blk_queue_standby_en(q)) return; @@ -1416,9 +1417,9 @@ static void ploop_check_standby_mode(struct ploop *ploop, long res) if (res != -EBUSY && res != -ENOTCONN && res != -EIO) return; - spin_lock_irq(&q->queue_lock); + spin_lock_irqsave(&q->queue_lock, flags); prev = blk_queue_flag_test_and_set(QUEUE_FLAG_STANDBY, q); - spin_unlock_irq(&q->queue_lock); + spin_unlock_irqrestore(&q->queue_lock, flags); if (!prev) PL_INFO("was switched into the standby mode"); @@ -1540,12 +1541,13 @@ static bool ploop_postpone_if_cluster_locked(struct ploop *ploop, struct pio *pio, u32 clu) { struct pio *e_h; /* Exclusively locked */ + unsigned long flags; - spin_lock_irq(&ploop->deferred_lock); + spin_lock_irqsave(&ploop->deferred_lock, flags); e_h = ploop_find_lk_of_cluster(ploop, clu); if (e_h && pio) ploop_add_endio_pio(e_h, pio); - spin_unlock_irq(&ploop->deferred_lock); + spin_unlock_irqrestore(&ploop->deferred_lock, flags); return e_h != NULL; } -- 2.43.0 _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel