diff options
author | Philipp Reisner <philipp.reisner@linbit.com> | 2012-08-29 09:23:14 -0400 |
---|---|---|
committer | Philipp Reisner <philipp.reisner@linbit.com> | 2012-11-09 08:11:37 -0500 |
commit | 76590cd1fc338fd1c50f7121636db421deb8b881 (patch) | |
tree | b73e77a7594fbdf2f4250e2c4700b273e3625899 | |
parent | 19fffd7b0303e8843aa2decfd43fa57c9d511409 (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.c | 5 |
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), " |