aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilipp Reisner <philipp.reisner@linbit.com>2012-08-29 09:23:14 -0400
committerPhilipp Reisner <philipp.reisner@linbit.com>2012-11-09 08:11:37 -0500
commit76590cd1fc338fd1c50f7121636db421deb8b881 (patch)
treeb73e77a7594fbdf2f4250e2c4700b273e3625899
parent19fffd7b0303e8843aa2decfd43fa57c9d511409 (diff)
drbd: Fix postponed requests
A postponed request might has RQ_IN_ACT_LOG already set, but is POSTPONED before it gets something in the RQ_LOCAL_MASK set. Up to now this caused a left-over active extent. Fix that by only testing for the RQ_IN_ACT_LOG bit in drbd_req_destroy() Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com> Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
-rw-r--r--drivers/block/drbd/drbd_req.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/drivers/block/drbd/drbd_req.c b/drivers/block/drbd/drbd_req.c
index 57cbef2ecee1..d1d17fcd9232 100644
--- a/drivers/block/drbd/drbd_req.c
+++ b/drivers/block/drbd/drbd_req.c
@@ -141,10 +141,9 @@ void drbd_req_destroy(struct kref *kref)
141 * but after the extent has been dropped from the al, 141 * but after the extent has been dropped from the al,
142 * we would forget to resync the corresponding extent. 142 * we would forget to resync the corresponding extent.
143 */ 143 */
144 if (s & RQ_LOCAL_MASK) { 144 if (s & RQ_IN_ACT_LOG) {
145 if (get_ldev_if_state(mdev, D_FAILED)) { 145 if (get_ldev_if_state(mdev, D_FAILED)) {
146 if (s & RQ_IN_ACT_LOG) 146 drbd_al_complete_io(mdev, &req->i);
147 drbd_al_complete_io(mdev, &req->i);
148 put_ldev(mdev); 147 put_ldev(mdev);
149 } else if (__ratelimit(&drbd_ratelimit_state)) { 148 } else if (__ratelimit(&drbd_ratelimit_state)) {
150 dev_warn(DEV, "Should have called drbd_al_complete_io(, %llu, %u), " 149 dev_warn(DEV, "Should have called drbd_al_complete_io(, %llu, %u), "