[PATCH 2/2] rbd: don't queue lock delayed work when we are removing device

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



We should not queue a lock delayed work after cancel_delayed_work_sync(&rbd_dev->lock_dwork);

So let's don't queue lock delayed work when we are removing device.

Signed-off-by: Dongsheng Yang <dongsheng.yang@xxxxxxxxxxxx>
---
 drivers/block/rbd.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
index d1d8f46..8d9d0a6 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -3032,8 +3032,12 @@ static void rbd_acquire_lock(struct work_struct *work)
 		}
 	} else if (ret < 0) {
 		rbd_warn(rbd_dev, "error requesting lock: %d", ret);
-		mod_delayed_work(rbd_dev->task_wq, &rbd_dev->lock_dwork,
-				 RBD_RETRY_DELAY);
+		spin_lock_irq(&rbd_dev->lock);
+		if (!test_bit(RBD_DEV_FLAG_REMOVING, &rbd_dev->flags)) {
+			mod_delayed_work(rbd_dev->task_wq, &rbd_dev->lock_dwork,
+					 RBD_RETRY_DELAY);
+		}
+		spin_unlock_irq(&rbd_dev->lock);
 	} else {
 		/*
 		 * lock owner acked, but resend if we don't see them
@@ -3041,8 +3045,12 @@ static void rbd_acquire_lock(struct work_struct *work)
 		 */
 		dout("%s rbd_dev %p requeueing lock_dwork\n", __func__,
 		     rbd_dev);
-		mod_delayed_work(rbd_dev->task_wq, &rbd_dev->lock_dwork,
-		    msecs_to_jiffies(2 * RBD_NOTIFY_TIMEOUT * MSEC_PER_SEC));
+		spin_lock_irq(&rbd_dev->lock);
+		if (!test_bit(RBD_DEV_FLAG_REMOVING, &rbd_dev->flags)) {
+			mod_delayed_work(rbd_dev->task_wq, &rbd_dev->lock_dwork,
+			    msecs_to_jiffies(2 * RBD_NOTIFY_TIMEOUT * MSEC_PER_SEC));
+		}
+		spin_unlock_irq(&rbd_dev->lock);
 	}
 }
 
-- 
1.8.3.1


--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [CEPH Users]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux