From 97ddb68790891ed568ab8212189f5173dd600ea4 Mon Sep 17 00:00:00 2001 From: Lars Ellenberg Date: Fri, 15 Jul 2011 23:52:44 +0200 Subject: [PATCH] drbd: detach must not try to abort non-local requests Signed-off-by: Philipp Reisner Signed-off-by: Lars Ellenberg --- drivers/block/drbd/drbd_main.c | 4 ++++ drivers/block/drbd/drbd_req.c | 2 ++ 2 files changed, 6 insertions(+) diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c index 2090b78231a2..edd0227f4b43 100644 --- a/drivers/block/drbd/drbd_main.c +++ b/drivers/block/drbd/drbd_main.c @@ -501,6 +501,8 @@ void tl_abort_disk_io(struct drbd_conf *mdev) while (b) { list_for_each_safe(le, tle, &b->requests) { req = list_entry(le, struct drbd_request, tl_requests); + if (!(req->rq_state & RQ_LOCAL_PENDING)) + continue; if (req->w.mdev == mdev) _req_mod(req, ABORT_DISK_IO); } @@ -509,6 +511,8 @@ void tl_abort_disk_io(struct drbd_conf *mdev) list_for_each_safe(le, tle, &tconn->barrier_acked_requests) { req = list_entry(le, struct drbd_request, tl_requests); + if (!(req->rq_state & RQ_LOCAL_PENDING)) + continue; if (req->w.mdev == mdev) _req_mod(req, ABORT_DISK_IO); } diff --git a/drivers/block/drbd/drbd_req.c b/drivers/block/drbd/drbd_req.c index d0f73b3a6796..60fc186d0a3d 100644 --- a/drivers/block/drbd/drbd_req.c +++ b/drivers/block/drbd/drbd_req.c @@ -436,6 +436,7 @@ int __req_mod(struct drbd_request *req, enum drbd_req_event what, /* so we can verify the handle in the answer packet * corresponding hlist_del is in _req_may_be_done() */ + D_ASSERT(drbd_interval_empty(&req->i)); drbd_insert_interval(&mdev->read_requests, &req->i); set_bit(UNPLUG_REMOTE, &mdev->flags); @@ -453,6 +454,7 @@ int __req_mod(struct drbd_request *req, enum drbd_req_event what, /* from __drbd_make_request only */ /* corresponding hlist_del is in _req_may_be_done() */ + D_ASSERT(drbd_interval_empty(&req->i)); drbd_insert_interval(&mdev->write_requests, &req->i); /* NOTE -- 2.11.0