blob: f2ba43e78377352fca65bfd1c2971bfb794f529a [file] [log] [blame]
Philipp Reisnerb411b362009-09-25 16:07:19 -07001/*
2 drbd_req.c
3
4 This file is part of DRBD by Philipp Reisner and Lars Ellenberg.
5
6 Copyright (C) 2001-2008, LINBIT Information Technologies GmbH.
7 Copyright (C) 1999-2008, Philipp Reisner <philipp.reisner@linbit.com>.
8 Copyright (C) 2002-2008, Lars Ellenberg <lars.ellenberg@linbit.com>.
9
10 drbd is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 2, or (at your option)
13 any later version.
14
15 drbd is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with drbd; see the file COPYING. If not, write to
22 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
23
24 */
25
Philipp Reisnerb411b362009-09-25 16:07:19 -070026#include <linux/module.h>
27
28#include <linux/slab.h>
29#include <linux/drbd.h>
30#include "drbd_int.h"
Philipp Reisnerb411b362009-09-25 16:07:19 -070031#include "drbd_req.h"
32
33
Philipp Reisner57bcb6c2011-12-03 11:18:56 +010034static bool drbd_may_do_local_read(struct drbd_conf *mdev, sector_t sector, int size);
35
Philipp Reisnerb411b362009-09-25 16:07:19 -070036/* Update disk stats at start of I/O request */
37static void _drbd_start_io_acct(struct drbd_conf *mdev, struct drbd_request *req, struct bio *bio)
38{
39 const int rw = bio_data_dir(bio);
40 int cpu;
41 cpu = part_stat_lock();
Philipp Reisner72585d22012-02-23 12:56:26 +010042 part_round_stats(cpu, &mdev->vdisk->part0);
Philipp Reisnerb411b362009-09-25 16:07:19 -070043 part_stat_inc(cpu, &mdev->vdisk->part0, ios[rw]);
44 part_stat_add(cpu, &mdev->vdisk->part0, sectors[rw], bio_sectors(bio));
Philipp Reisner376694a2011-11-07 10:54:28 +010045 (void) cpu; /* The macro invocations above want the cpu argument, I do not like
46 the compiler warning about cpu only assigned but never used... */
Philipp Reisner753c8912009-11-18 15:52:51 +010047 part_inc_in_flight(&mdev->vdisk->part0, rw);
Philipp Reisnerb411b362009-09-25 16:07:19 -070048 part_stat_unlock();
Philipp Reisnerb411b362009-09-25 16:07:19 -070049}
50
51/* Update disk stats when completing request upwards */
52static void _drbd_end_io_acct(struct drbd_conf *mdev, struct drbd_request *req)
53{
54 int rw = bio_data_dir(req->master_bio);
55 unsigned long duration = jiffies - req->start_time;
56 int cpu;
57 cpu = part_stat_lock();
58 part_stat_add(cpu, &mdev->vdisk->part0, ticks[rw], duration);
59 part_round_stats(cpu, &mdev->vdisk->part0);
Philipp Reisner753c8912009-11-18 15:52:51 +010060 part_dec_in_flight(&mdev->vdisk->part0, rw);
Philipp Reisnerb411b362009-09-25 16:07:19 -070061 part_stat_unlock();
Philipp Reisnerb411b362009-09-25 16:07:19 -070062}
63
Andreas Gruenbacher9e204cd2011-01-26 18:45:11 +010064static struct drbd_request *drbd_req_new(struct drbd_conf *mdev,
65 struct bio *bio_src)
66{
67 struct drbd_request *req;
68
69 req = mempool_alloc(drbd_request_mempool, GFP_NOIO);
70 if (!req)
71 return NULL;
72
73 drbd_req_make_private_bio(req, bio_src);
74 req->rq_state = bio_data_dir(bio_src) == WRITE ? RQ_WRITE : 0;
Philipp Reisnera21e9292011-02-08 15:08:49 +010075 req->w.mdev = mdev;
Andreas Gruenbacher9e204cd2011-01-26 18:45:11 +010076 req->master_bio = bio_src;
77 req->epoch = 0;
Andreas Gruenbacher53840642011-01-28 10:31:04 +010078
Andreas Gruenbacher9e204cd2011-01-26 18:45:11 +010079 drbd_clear_interval(&req->i);
80 req->i.sector = bio_src->bi_sector;
81 req->i.size = bio_src->bi_size;
Andreas Gruenbacher5e472262011-01-27 14:42:51 +010082 req->i.local = true;
Andreas Gruenbacher53840642011-01-28 10:31:04 +010083 req->i.waiting = false;
84
Andreas Gruenbacher9e204cd2011-01-26 18:45:11 +010085 INIT_LIST_HEAD(&req->tl_requests);
86 INIT_LIST_HEAD(&req->w.list);
87
Lars Ellenberga0d856d2012-01-24 17:19:42 +010088 /* one reference to be put by __drbd_make_request */
Lars Ellenbergb4067772012-01-24 16:58:11 +010089 atomic_set(&req->completion_ref, 1);
Lars Ellenberga0d856d2012-01-24 17:19:42 +010090 /* one kref as long as completion_ref > 0 */
Lars Ellenbergb4067772012-01-24 16:58:11 +010091 kref_init(&req->kref);
Andreas Gruenbacher9e204cd2011-01-26 18:45:11 +010092 return req;
93}
94
Lars Ellenbergb4067772012-01-24 16:58:11 +010095static void drbd_req_destroy(struct kref *kref)
Andreas Gruenbacher9e204cd2011-01-26 18:45:11 +010096{
Lars Ellenbergb4067772012-01-24 16:58:11 +010097 struct drbd_request *req = container_of(kref, struct drbd_request, kref);
98 struct drbd_conf *mdev = req->w.mdev;
Lars Ellenberga0d856d2012-01-24 17:19:42 +010099 const unsigned s = req->rq_state;
100
101 if ((req->master_bio && !(s & RQ_POSTPONED)) ||
102 atomic_read(&req->completion_ref) ||
103 (s & RQ_LOCAL_PENDING) ||
104 ((s & RQ_NET_MASK) && !(s & RQ_NET_DONE))) {
105 dev_err(DEV, "drbd_req_destroy: Logic BUG rq_state = 0x%x, completion_ref = %d\n",
106 s, atomic_read(&req->completion_ref));
107 return;
108 }
Philipp Reisner288f4222010-05-27 15:07:43 +0200109
110 /* remove it from the transfer log.
111 * well, only if it had been there in the first
112 * place... if it had not (local only or conflicting
113 * and never sent), it should still be "empty" as
114 * initialized in drbd_req_new(), so we can list_del() it
115 * here unconditionally */
Lars Ellenberg2312f0b32011-11-24 10:36:25 +0100116 list_del_init(&req->tl_requests);
Philipp Reisner288f4222010-05-27 15:07:43 +0200117
Philipp Reisnerb411b362009-09-25 16:07:19 -0700118 /* if it was a write, we may have to set the corresponding
119 * bit(s) out-of-sync first. If it had a local part, we need to
120 * release the reference to the activity log. */
Lars Ellenbergb4067772012-01-24 16:58:11 +0100121 if (s & RQ_WRITE) {
Philipp Reisnerb411b362009-09-25 16:07:19 -0700122 /* Set out-of-sync unless both OK flags are set
123 * (local only or remote failed).
124 * Other places where we set out-of-sync:
125 * READ with local io-error */
126 if (!(s & RQ_NET_OK) || !(s & RQ_LOCAL_OK))
Andreas Gruenbacherace652a2011-01-03 17:09:58 +0100127 drbd_set_out_of_sync(mdev, req->i.sector, req->i.size);
Philipp Reisnerb411b362009-09-25 16:07:19 -0700128
129 if ((s & RQ_NET_OK) && (s & RQ_LOCAL_OK) && (s & RQ_NET_SIS))
Andreas Gruenbacherace652a2011-01-03 17:09:58 +0100130 drbd_set_in_sync(mdev, req->i.sector, req->i.size);
Philipp Reisnerb411b362009-09-25 16:07:19 -0700131
132 /* one might be tempted to move the drbd_al_complete_io
Andreas Gruenbacherfcefa622011-02-17 16:46:59 +0100133 * to the local io completion callback drbd_request_endio.
Philipp Reisnerb411b362009-09-25 16:07:19 -0700134 * but, if this was a mirror write, we may only
135 * drbd_al_complete_io after this is RQ_NET_DONE,
136 * otherwise the extent could be dropped from the al
137 * before it has actually been written on the peer.
138 * if we crash before our peer knows about the request,
139 * but after the extent has been dropped from the al,
140 * we would forget to resync the corresponding extent.
141 */
142 if (s & RQ_LOCAL_MASK) {
143 if (get_ldev_if_state(mdev, D_FAILED)) {
Philipp Reisner07782862010-08-31 12:00:50 +0200144 if (s & RQ_IN_ACT_LOG)
Lars Ellenberg181286a2011-03-31 15:18:56 +0200145 drbd_al_complete_io(mdev, &req->i);
Philipp Reisnerb411b362009-09-25 16:07:19 -0700146 put_ldev(mdev);
147 } else if (__ratelimit(&drbd_ratelimit_state)) {
Lars Ellenberg181286a2011-03-31 15:18:56 +0200148 dev_warn(DEV, "Should have called drbd_al_complete_io(, %llu, %u), "
149 "but my Disk seems to have failed :(\n",
150 (unsigned long long) req->i.sector, req->i.size);
Philipp Reisnerb411b362009-09-25 16:07:19 -0700151 }
152 }
153 }
154
Lars Ellenberg2312f0b32011-11-24 10:36:25 +0100155 if (s & RQ_POSTPONED)
Lars Ellenberg9d05e7c2012-07-17 10:05:04 +0200156 drbd_restart_request(req);
Lars Ellenberg2312f0b32011-11-24 10:36:25 +0100157 else
Lars Ellenbergb4067772012-01-24 16:58:11 +0100158 mempool_free(req, drbd_request_mempool);
Philipp Reisnerb411b362009-09-25 16:07:19 -0700159}
160
Lars Ellenbergb6dd1a82011-11-28 15:04:49 +0100161static void wake_all_senders(struct drbd_tconn *tconn) {
162 wake_up(&tconn->sender_work.q_wait);
Philipp Reisnerb411b362009-09-25 16:07:19 -0700163}
164
Lars Ellenbergb6dd1a82011-11-28 15:04:49 +0100165/* must hold resource->req_lock */
166static void start_new_tl_epoch(struct drbd_tconn *tconn)
Philipp Reisnerb411b362009-09-25 16:07:19 -0700167{
Lars Ellenbergb6dd1a82011-11-28 15:04:49 +0100168 tconn->current_tle_writes = 0;
169 atomic_inc(&tconn->current_tle_nr);
170 wake_all_senders(tconn);
Philipp Reisnerb411b362009-09-25 16:07:19 -0700171}
172
173void complete_master_bio(struct drbd_conf *mdev,
174 struct bio_and_error *m)
175{
Philipp Reisnerb411b362009-09-25 16:07:19 -0700176 bio_endio(m->bio, m->error);
177 dec_ap_bio(mdev);
178}
179
Andreas Gruenbacher53840642011-01-28 10:31:04 +0100180
181static void drbd_remove_request_interval(struct rb_root *root,
182 struct drbd_request *req)
183{
Philipp Reisnera21e9292011-02-08 15:08:49 +0100184 struct drbd_conf *mdev = req->w.mdev;
Andreas Gruenbacher53840642011-01-28 10:31:04 +0100185 struct drbd_interval *i = &req->i;
186
187 drbd_remove_interval(root, i);
188
189 /* Wake up any processes waiting for this request to complete. */
190 if (i->waiting)
191 wake_up(&mdev->misc_wait);
192}
193
Philipp Reisnerb411b362009-09-25 16:07:19 -0700194/* Helper for __req_mod().
195 * Set m->bio to the master bio, if it is fit to be completed,
196 * or leave it alone (it is initialized to NULL in __req_mod),
197 * if it has already been completed, or cannot be completed yet.
198 * If m->bio is set, the error status to be returned is placed in m->error.
199 */
Lars Ellenberg6870ca62012-03-26 17:02:45 +0200200static
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100201void drbd_req_complete(struct drbd_request *req, struct bio_and_error *m)
Philipp Reisnerb411b362009-09-25 16:07:19 -0700202{
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100203 const unsigned s = req->rq_state;
Philipp Reisnera21e9292011-02-08 15:08:49 +0100204 struct drbd_conf *mdev = req->w.mdev;
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100205 int rw;
206 int error, ok;
Philipp Reisnerb411b362009-09-25 16:07:19 -0700207
Philipp Reisnerb411b362009-09-25 16:07:19 -0700208 /* we must not complete the master bio, while it is
209 * still being processed by _drbd_send_zc_bio (drbd_send_dblock)
210 * not yet acknowledged by the peer
211 * not yet completed by the local io subsystem
212 * these flags may get cleared in any order by
213 * the worker,
214 * the receiver,
215 * the bio_endio completion callbacks.
216 */
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100217 if ((s & RQ_LOCAL_PENDING && !(s & RQ_LOCAL_ABORTED)) ||
218 (s & RQ_NET_QUEUED) || (s & RQ_NET_PENDING) ||
219 (s & RQ_COMPLETION_SUSP)) {
220 dev_err(DEV, "drbd_req_complete: Logic BUG rq_state = 0x%x\n", s);
Andreas Gruenbacher7be8da02011-02-22 02:15:32 +0100221 return;
Philipp Reisnerb411b362009-09-25 16:07:19 -0700222 }
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100223
224 if (!req->master_bio) {
225 dev_err(DEV, "drbd_req_complete: Logic BUG, master_bio == NULL!\n");
226 return;
227 }
228
229 rw = bio_rw(req->master_bio);
230
231 /*
232 * figure out whether to report success or failure.
233 *
234 * report success when at least one of the operations succeeded.
235 * or, to put the other way,
236 * only report failure, when both operations failed.
237 *
238 * what to do about the failures is handled elsewhere.
239 * what we need to do here is just: complete the master_bio.
240 *
241 * local completion error, if any, has been stored as ERR_PTR
242 * in private_bio within drbd_request_endio.
243 */
244 ok = (s & RQ_LOCAL_OK) || (s & RQ_NET_OK);
245 error = PTR_ERR(req->private_bio);
246
247 /* remove the request from the conflict detection
248 * respective block_id verification hash */
249 if (!drbd_interval_empty(&req->i)) {
250 struct rb_root *root;
251
252 if (rw == WRITE)
253 root = &mdev->write_requests;
254 else
255 root = &mdev->read_requests;
256 drbd_remove_request_interval(root, req);
257 } else if (!(s & RQ_POSTPONED))
258 D_ASSERT((s & (RQ_NET_MASK & ~RQ_NET_DONE)) == 0);
259
260 /* Before we can signal completion to the upper layers,
261 * we may need to close the current transfer log epoch.
262 * We are within the request lock, so we can simply compare
263 * the request epoch number with the current transfer log
264 * epoch number. If they match, increase the current_tle_nr,
265 * and reset the transfer log epoch write_cnt.
266 */
267 if (rw == WRITE &&
268 req->epoch == atomic_read(&mdev->tconn->current_tle_nr))
269 start_new_tl_epoch(mdev->tconn);
270
271 /* Update disk stats */
272 _drbd_end_io_acct(mdev, req);
273
274 /* If READ failed,
275 * have it be pushed back to the retry work queue,
276 * so it will re-enter __drbd_make_request(),
277 * and be re-assigned to a suitable local or remote path,
278 * or failed if we do not have access to good data anymore.
279 *
280 * Unless it was failed early by __drbd_make_request(),
281 * because no path was available, in which case
282 * it was not even added to the transfer_log.
283 *
284 * READA may fail, and will not be retried.
285 *
286 * WRITE should have used all available paths already.
287 */
288 if (!ok && rw == READ && !list_empty(&req->tl_requests))
289 req->rq_state |= RQ_POSTPONED;
290
291 if (!(req->rq_state & RQ_POSTPONED)) {
292 m->error = ok ? 0 : (error ?: -EIO);
293 m->bio = req->master_bio;
294 req->master_bio = NULL;
295 } else {
296 /* Assert that this will be drbd_req_destroy()ed
297 * with this very invokation. */
298 D_ASSERT(atomic_read(&req->kref.refcount) == 1);
299 }
Philipp Reisnerb411b362009-09-25 16:07:19 -0700300}
301
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100302static int drbd_req_put_completion_ref(struct drbd_request *req, struct bio_and_error *m, int put)
Philipp Reisnercfa03412010-06-23 17:18:51 +0200303{
Philipp Reisnera21e9292011-02-08 15:08:49 +0100304 struct drbd_conf *mdev = req->w.mdev;
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100305 D_ASSERT(m || (req->rq_state & RQ_POSTPONED));
Philipp Reisnercfa03412010-06-23 17:18:51 +0200306
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100307 if (!atomic_sub_and_test(put, &req->completion_ref))
308 return 0;
309
310 if (drbd_suspended(mdev)) {
311 /* We do not allow completion while suspended. Re-get a
312 * reference, so whatever happens when this is resumed
313 * may put and complete. */
314
315 D_ASSERT(!(req->rq_state & RQ_COMPLETION_SUSP));
316 req->rq_state |= RQ_COMPLETION_SUSP;
317 atomic_inc(&req->completion_ref);
318 return 0;
319 }
320
321 /* else */
322 drbd_req_complete(req, m);
323 return 1;
324}
325
326/* I'd like this to be the only place that manipulates
327 * req->completion_ref and req->kref. */
328static void mod_rq_state(struct drbd_request *req, struct bio_and_error *m,
329 int clear, int set)
330{
331 struct drbd_conf *mdev = req->w.mdev;
332 unsigned s = req->rq_state;
333 int c_put = 0;
334 int k_put = 0;
335
336 /* apply */
337
338 req->rq_state &= ~clear;
339 req->rq_state |= set;
340
341 /* no change? */
342 if (req->rq_state == s)
343 return;
344
345 /* intent: get references */
346
347 if (!(s & RQ_LOCAL_PENDING) && (set & RQ_LOCAL_PENDING))
348 atomic_inc(&req->completion_ref);
349
350 if (!(s & RQ_NET_PENDING) && (set & RQ_NET_PENDING)) {
351 inc_ap_pending(mdev);
352 atomic_inc(&req->completion_ref);
353 }
354
355 if (!(s & RQ_NET_QUEUED) && (set & RQ_NET_QUEUED))
356 atomic_inc(&req->completion_ref);
357
358 if (!(s & RQ_EXP_BARR_ACK) && (set & RQ_EXP_BARR_ACK))
359 kref_get(&req->kref); /* wait for the DONE */
360
361 if (!(s & RQ_NET_SENT) && (set & RQ_NET_SENT))
362 atomic_add(req->i.size >> 9, &mdev->ap_in_flight);
363
364 /* progress: put references */
365
366 if ((s & RQ_COMPLETION_SUSP) && (clear & RQ_COMPLETION_SUSP))
367 ++c_put;
368
369 if (!(s & RQ_LOCAL_ABORTED) && (set & RQ_LOCAL_ABORTED)) {
370 D_ASSERT(req->rq_state & RQ_LOCAL_PENDING);
371 /* local completion may still come in later,
372 * we need to keep the req object around. */
373 kref_get(&req->kref);
374 ++c_put;
375 }
376
377 if ((s & RQ_LOCAL_PENDING) && (clear & RQ_LOCAL_PENDING)) {
378 if (req->rq_state & RQ_LOCAL_ABORTED)
379 ++k_put;
380 else
381 ++c_put;
382 }
383
384 if ((s & RQ_NET_PENDING) && (clear & RQ_NET_PENDING)) {
385 dec_ap_pending(mdev);
386 ++c_put;
387 }
388
389 if ((s & RQ_NET_QUEUED) && (clear & RQ_NET_QUEUED))
390 ++c_put;
391
392 if ((s & RQ_EXP_BARR_ACK) && !(s & RQ_NET_DONE) && (set & RQ_NET_DONE)) {
393 if (req->rq_state & RQ_NET_SENT)
394 atomic_sub(req->i.size >> 9, &mdev->ap_in_flight);
395 ++k_put;
396 }
397
398 /* potentially complete and destroy */
399
400 if (k_put || c_put) {
401 /* Completion does it's own kref_put. If we are going to
402 * kref_sub below, we need req to be still around then. */
403 int at_least = k_put + !!c_put;
404 int refcount = atomic_read(&req->kref.refcount);
405 if (refcount < at_least)
406 dev_err(DEV,
407 "mod_rq_state: Logic BUG: %x -> %x: refcount = %d, should be >= %d\n",
408 s, req->rq_state, refcount, at_least);
409 }
410
411 /* If we made progress, retry conflicting peer requests, if any. */
412 if (req->i.waiting)
413 wake_up(&mdev->misc_wait);
414
415 if (c_put)
416 k_put += drbd_req_put_completion_ref(req, m, c_put);
417 if (k_put)
418 kref_sub(&req->kref, k_put, drbd_req_destroy);
Philipp Reisnercfa03412010-06-23 17:18:51 +0200419}
420
Philipp Reisnerb411b362009-09-25 16:07:19 -0700421/* obviously this could be coded as many single functions
422 * instead of one huge switch,
423 * or by putting the code directly in the respective locations
424 * (as it has been before).
425 *
426 * but having it this way
427 * enforces that it is all in this one place, where it is easier to audit,
428 * it makes it obvious that whatever "event" "happens" to a request should
429 * happen "atomically" within the req_lock,
430 * and it enforces that we have to think in a very structured manner
431 * about the "events" that may happen to a request during its life time ...
432 */
Philipp Reisner2a806992010-06-09 14:07:43 +0200433int __req_mod(struct drbd_request *req, enum drbd_req_event what,
Philipp Reisnerb411b362009-09-25 16:07:19 -0700434 struct bio_and_error *m)
435{
Philipp Reisnera21e9292011-02-08 15:08:49 +0100436 struct drbd_conf *mdev = req->w.mdev;
Philipp Reisner44ed1672011-04-19 17:10:19 +0200437 struct net_conf *nc;
Philipp Reisner303d1442011-04-13 16:24:47 -0700438 int p, rv = 0;
Andreas Gruenbacher7be8da02011-02-22 02:15:32 +0100439
440 if (m)
441 m->bio = NULL;
Philipp Reisnerb411b362009-09-25 16:07:19 -0700442
Philipp Reisnerb411b362009-09-25 16:07:19 -0700443 switch (what) {
444 default:
445 dev_err(DEV, "LOGIC BUG in %s:%u\n", __FILE__ , __LINE__);
446 break;
447
448 /* does not happen...
449 * initialization done in drbd_req_new
Andreas Gruenbacher8554df12011-01-25 15:37:43 +0100450 case CREATED:
Philipp Reisnerb411b362009-09-25 16:07:19 -0700451 break;
452 */
453
Andreas Gruenbacher8554df12011-01-25 15:37:43 +0100454 case TO_BE_SENT: /* via network */
Andreas Gruenbacher7be8da02011-02-22 02:15:32 +0100455 /* reached via __drbd_make_request
Philipp Reisnerb411b362009-09-25 16:07:19 -0700456 * and from w_read_retry_remote */
457 D_ASSERT(!(req->rq_state & RQ_NET_MASK));
Philipp Reisner44ed1672011-04-19 17:10:19 +0200458 rcu_read_lock();
459 nc = rcu_dereference(mdev->tconn->net_conf);
460 p = nc->wire_protocol;
461 rcu_read_unlock();
Philipp Reisner303d1442011-04-13 16:24:47 -0700462 req->rq_state |=
463 p == DRBD_PROT_C ? RQ_EXP_WRITE_ACK :
464 p == DRBD_PROT_B ? RQ_EXP_RECEIVE_ACK : 0;
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100465 mod_rq_state(req, m, 0, RQ_NET_PENDING);
Philipp Reisnerb411b362009-09-25 16:07:19 -0700466 break;
467
Andreas Gruenbacher8554df12011-01-25 15:37:43 +0100468 case TO_BE_SUBMITTED: /* locally */
Andreas Gruenbacher7be8da02011-02-22 02:15:32 +0100469 /* reached via __drbd_make_request */
Philipp Reisnerb411b362009-09-25 16:07:19 -0700470 D_ASSERT(!(req->rq_state & RQ_LOCAL_MASK));
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100471 mod_rq_state(req, m, 0, RQ_LOCAL_PENDING);
Philipp Reisnerb411b362009-09-25 16:07:19 -0700472 break;
473
Andreas Gruenbacher8554df12011-01-25 15:37:43 +0100474 case COMPLETED_OK:
Philipp Reisnercdfda632011-07-05 15:38:59 +0200475 if (req->rq_state & RQ_WRITE)
Andreas Gruenbacherace652a2011-01-03 17:09:58 +0100476 mdev->writ_cnt += req->i.size >> 9;
Philipp Reisnerb411b362009-09-25 16:07:19 -0700477 else
Andreas Gruenbacherace652a2011-01-03 17:09:58 +0100478 mdev->read_cnt += req->i.size >> 9;
Philipp Reisnerb411b362009-09-25 16:07:19 -0700479
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100480 mod_rq_state(req, m, RQ_LOCAL_PENDING,
481 RQ_LOCAL_COMPLETED|RQ_LOCAL_OK);
Philipp Reisnerb411b362009-09-25 16:07:19 -0700482 break;
483
Philipp Reisnercdfda632011-07-05 15:38:59 +0200484 case ABORT_DISK_IO:
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100485 mod_rq_state(req, m, 0, RQ_LOCAL_ABORTED);
Philipp Reisnerb411b362009-09-25 16:07:19 -0700486 break;
487
Andreas Gruenbacher8554df12011-01-25 15:37:43 +0100488 case READ_COMPLETED_WITH_ERROR:
Andreas Gruenbacherace652a2011-01-03 17:09:58 +0100489 drbd_set_out_of_sync(mdev, req->i.sector, req->i.size);
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100490 /* fall through. */
491 case WRITE_COMPLETED_WITH_ERROR:
Andreas Gruenbacher81e84652010-12-09 15:03:57 +0100492 __drbd_chk_io_error(mdev, false);
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100493 /* fall through. */
494 case READ_AHEAD_COMPLETED_WITH_ERROR:
495 /* it is legal to fail READA, no __drbd_chk_io_error in that case. */
496 mod_rq_state(req, m, RQ_LOCAL_PENDING, RQ_LOCAL_COMPLETED);
Lars Ellenberg4439c402012-03-26 17:29:30 +0200497 break;
Philipp Reisnerb411b362009-09-25 16:07:19 -0700498
Andreas Gruenbacher8554df12011-01-25 15:37:43 +0100499 case QUEUE_FOR_NET_READ:
Philipp Reisnerb411b362009-09-25 16:07:19 -0700500 /* READ or READA, and
501 * no local disk,
502 * or target area marked as invalid,
503 * or just got an io-error. */
Andreas Gruenbacher7be8da02011-02-22 02:15:32 +0100504 /* from __drbd_make_request
Philipp Reisnerb411b362009-09-25 16:07:19 -0700505 * or from bio_endio during read io-error recovery */
506
Lars Ellenberg6870ca62012-03-26 17:02:45 +0200507 /* So we can verify the handle in the answer packet.
508 * Corresponding drbd_remove_request_interval is in
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100509 * drbd_req_complete() */
Lars Ellenberg97ddb682011-07-15 23:52:44 +0200510 D_ASSERT(drbd_interval_empty(&req->i));
Andreas Gruenbacherdac13892011-01-21 17:18:39 +0100511 drbd_insert_interval(&mdev->read_requests, &req->i);
Philipp Reisnerb411b362009-09-25 16:07:19 -0700512
Lars Ellenberg83c38832009-11-03 02:22:06 +0100513 set_bit(UNPLUG_REMOTE, &mdev->flags);
Philipp Reisnerb411b362009-09-25 16:07:19 -0700514
515 D_ASSERT(req->rq_state & RQ_NET_PENDING);
Lars Ellenberg4439c402012-03-26 17:29:30 +0200516 D_ASSERT((req->rq_state & RQ_LOCAL_MASK) == 0);
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100517 mod_rq_state(req, m, 0, RQ_NET_QUEUED);
Lars Ellenberg4439c402012-03-26 17:29:30 +0200518 req->w.cb = w_send_read_req;
Lars Ellenbergd5b27b02011-11-14 15:42:37 +0100519 drbd_queue_work(&mdev->tconn->sender_work, &req->w);
Philipp Reisnerb411b362009-09-25 16:07:19 -0700520 break;
521
Andreas Gruenbacher8554df12011-01-25 15:37:43 +0100522 case QUEUE_FOR_NET_WRITE:
Philipp Reisnerb411b362009-09-25 16:07:19 -0700523 /* assert something? */
Andreas Gruenbacher7be8da02011-02-22 02:15:32 +0100524 /* from __drbd_make_request only */
Philipp Reisnerb411b362009-09-25 16:07:19 -0700525
Lars Ellenberg6870ca62012-03-26 17:02:45 +0200526 /* Corresponding drbd_remove_request_interval is in
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100527 * drbd_req_complete() */
Lars Ellenberg97ddb682011-07-15 23:52:44 +0200528 D_ASSERT(drbd_interval_empty(&req->i));
Andreas Gruenbacherde696712011-01-20 15:00:24 +0100529 drbd_insert_interval(&mdev->write_requests, &req->i);
Philipp Reisnerb411b362009-09-25 16:07:19 -0700530
531 /* NOTE
532 * In case the req ended up on the transfer log before being
533 * queued on the worker, it could lead to this request being
534 * missed during cleanup after connection loss.
535 * So we have to do both operations here,
536 * within the same lock that protects the transfer log.
537 *
538 * _req_add_to_epoch(req); this has to be after the
539 * _maybe_start_new_epoch(req); which happened in
Andreas Gruenbacher7be8da02011-02-22 02:15:32 +0100540 * __drbd_make_request, because we now may set the bit
Philipp Reisnerb411b362009-09-25 16:07:19 -0700541 * again ourselves to close the current epoch.
542 *
543 * Add req to the (now) current epoch (barrier). */
544
Lars Ellenberg83c38832009-11-03 02:22:06 +0100545 /* otherwise we may lose an unplug, which may cause some remote
546 * io-scheduler timeout to expire, increasing maximum latency,
547 * hurting performance. */
548 set_bit(UNPLUG_REMOTE, &mdev->flags);
549
Philipp Reisnerb411b362009-09-25 16:07:19 -0700550 /* queue work item to send data */
551 D_ASSERT(req->rq_state & RQ_NET_PENDING);
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100552 mod_rq_state(req, m, 0, RQ_NET_QUEUED|RQ_EXP_BARR_ACK);
Philipp Reisnerb411b362009-09-25 16:07:19 -0700553 req->w.cb = w_send_dblock;
Lars Ellenbergd5b27b02011-11-14 15:42:37 +0100554 drbd_queue_work(&mdev->tconn->sender_work, &req->w);
Philipp Reisnerb411b362009-09-25 16:07:19 -0700555
556 /* close the epoch, in case it outgrew the limit */
Philipp Reisner44ed1672011-04-19 17:10:19 +0200557 rcu_read_lock();
558 nc = rcu_dereference(mdev->tconn->net_conf);
559 p = nc->max_epoch_size;
560 rcu_read_unlock();
Lars Ellenbergb6dd1a82011-11-28 15:04:49 +0100561 if (mdev->tconn->current_tle_writes >= p)
562 start_new_tl_epoch(mdev->tconn);
Philipp Reisnerb411b362009-09-25 16:07:19 -0700563
564 break;
565
Andreas Gruenbacher8554df12011-01-25 15:37:43 +0100566 case QUEUE_FOR_SEND_OOS:
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100567 mod_rq_state(req, m, 0, RQ_NET_QUEUED);
Andreas Gruenbacher8f7bed72010-12-19 23:53:14 +0100568 req->w.cb = w_send_out_of_sync;
Lars Ellenbergd5b27b02011-11-14 15:42:37 +0100569 drbd_queue_work(&mdev->tconn->sender_work, &req->w);
Philipp Reisner73a01a12010-10-27 14:33:00 +0200570 break;
571
Lars Ellenbergea9d6722012-03-26 16:46:39 +0200572 case READ_RETRY_REMOTE_CANCELED:
Andreas Gruenbacher8554df12011-01-25 15:37:43 +0100573 case SEND_CANCELED:
Andreas Gruenbacher8554df12011-01-25 15:37:43 +0100574 case SEND_FAILED:
Philipp Reisnerb411b362009-09-25 16:07:19 -0700575 /* real cleanup will be done from tl_clear. just update flags
576 * so it is no longer marked as on the worker queue */
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100577 mod_rq_state(req, m, RQ_NET_QUEUED, 0);
Philipp Reisnerb411b362009-09-25 16:07:19 -0700578 break;
579
Andreas Gruenbacher8554df12011-01-25 15:37:43 +0100580 case HANDED_OVER_TO_NETWORK:
Philipp Reisnerb411b362009-09-25 16:07:19 -0700581 /* assert something? */
582 if (bio_data_dir(req->master_bio) == WRITE &&
Philipp Reisner303d1442011-04-13 16:24:47 -0700583 !(req->rq_state & (RQ_EXP_RECEIVE_ACK | RQ_EXP_WRITE_ACK))) {
Philipp Reisnerb411b362009-09-25 16:07:19 -0700584 /* this is what is dangerous about protocol A:
585 * pretend it was successfully written on the peer. */
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100586 if (req->rq_state & RQ_NET_PENDING)
587 mod_rq_state(req, m, RQ_NET_PENDING, RQ_NET_OK);
588 /* else: neg-ack was faster... */
Philipp Reisnerb411b362009-09-25 16:07:19 -0700589 /* it is still not yet RQ_NET_DONE until the
590 * corresponding epoch barrier got acked as well,
591 * so we know what to dirty on connection loss */
592 }
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100593 mod_rq_state(req, m, RQ_NET_QUEUED, RQ_NET_SENT);
Lars Ellenberg27a434f2012-03-26 16:44:59 +0200594 break;
595
596 case OOS_HANDED_TO_NETWORK:
597 /* Was not set PENDING, no longer QUEUED, so is now DONE
598 * as far as this connection is concerned. */
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100599 mod_rq_state(req, m, RQ_NET_QUEUED, RQ_NET_DONE);
Philipp Reisnerb411b362009-09-25 16:07:19 -0700600 break;
601
Andreas Gruenbacher8554df12011-01-25 15:37:43 +0100602 case CONNECTION_LOST_WHILE_PENDING:
Philipp Reisnerb411b362009-09-25 16:07:19 -0700603 /* transfer log cleanup after connection loss */
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100604 mod_rq_state(req, m,
605 RQ_NET_OK|RQ_NET_PENDING|RQ_COMPLETION_SUSP,
606 RQ_NET_DONE);
Philipp Reisnerb411b362009-09-25 16:07:19 -0700607 break;
608
Andreas Gruenbacher7be8da02011-02-22 02:15:32 +0100609 case DISCARD_WRITE:
Philipp Reisnerb411b362009-09-25 16:07:19 -0700610 /* for discarded conflicting writes of multiple primaries,
611 * there is no need to keep anything in the tl, potential
Lars Ellenberg934722a2012-07-24 09:31:18 +0200612 * node crashes are covered by the activity log.
613 *
614 * If this request had been marked as RQ_POSTPONED before,
615 * it will actually not be discarded, but "restarted",
616 * resubmitted from the retry worker context. */
617 D_ASSERT(req->rq_state & RQ_NET_PENDING);
618 D_ASSERT(req->rq_state & RQ_EXP_WRITE_ACK);
619 mod_rq_state(req, m, RQ_NET_PENDING, RQ_NET_DONE|RQ_NET_OK);
620 break;
621
Lars Ellenberg0afd5692012-03-26 16:51:11 +0200622 case WRITE_ACKED_BY_PEER_AND_SIS:
Lars Ellenberg934722a2012-07-24 09:31:18 +0200623 req->rq_state |= RQ_NET_SIS;
Andreas Gruenbacher8554df12011-01-25 15:37:43 +0100624 case WRITE_ACKED_BY_PEER:
Philipp Reisner303d1442011-04-13 16:24:47 -0700625 D_ASSERT(req->rq_state & RQ_EXP_WRITE_ACK);
Philipp Reisnerb411b362009-09-25 16:07:19 -0700626 /* protocol C; successfully written on peer.
Lars Ellenberg0afd5692012-03-26 16:51:11 +0200627 * Nothing more to do here.
Philipp Reisnerb411b362009-09-25 16:07:19 -0700628 * We want to keep the tl in place for all protocols, to cater
Lars Ellenberg0afd5692012-03-26 16:51:11 +0200629 * for volatile write-back caches on lower level devices. */
Philipp Reisnerb411b362009-09-25 16:07:19 -0700630
Philipp Reisner303d1442011-04-13 16:24:47 -0700631 goto ack_common;
Andreas Gruenbacher8554df12011-01-25 15:37:43 +0100632 case RECV_ACKED_BY_PEER:
Philipp Reisner303d1442011-04-13 16:24:47 -0700633 D_ASSERT(req->rq_state & RQ_EXP_RECEIVE_ACK);
Philipp Reisnerb411b362009-09-25 16:07:19 -0700634 /* protocol B; pretends to be successfully written on peer.
Andreas Gruenbacher8554df12011-01-25 15:37:43 +0100635 * see also notes above in HANDED_OVER_TO_NETWORK about
Philipp Reisnerb411b362009-09-25 16:07:19 -0700636 * protocol != C */
Philipp Reisner303d1442011-04-13 16:24:47 -0700637 ack_common:
Philipp Reisnerb411b362009-09-25 16:07:19 -0700638 D_ASSERT(req->rq_state & RQ_NET_PENDING);
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100639 mod_rq_state(req, m, RQ_NET_PENDING, RQ_NET_OK);
Philipp Reisnerb411b362009-09-25 16:07:19 -0700640 break;
641
Andreas Gruenbacher7be8da02011-02-22 02:15:32 +0100642 case POSTPONE_WRITE:
Philipp Reisner303d1442011-04-13 16:24:47 -0700643 D_ASSERT(req->rq_state & RQ_EXP_WRITE_ACK);
644 /* If this node has already detected the write conflict, the
Andreas Gruenbacher7be8da02011-02-22 02:15:32 +0100645 * worker will be waiting on misc_wait. Wake it up once this
646 * request has completed locally.
647 */
648 D_ASSERT(req->rq_state & RQ_NET_PENDING);
649 req->rq_state |= RQ_POSTPONED;
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100650 if (req->i.waiting)
651 wake_up(&mdev->misc_wait);
652 /* Do not clear RQ_NET_PENDING. This request will make further
653 * progress via restart_conflicting_writes() or
654 * fail_postponed_requests(). Hopefully. */
Andreas Gruenbacher7be8da02011-02-22 02:15:32 +0100655 break;
656
Andreas Gruenbacher8554df12011-01-25 15:37:43 +0100657 case NEG_ACKED:
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100658 mod_rq_state(req, m, RQ_NET_OK|RQ_NET_PENDING, RQ_NET_DONE);
Philipp Reisnerb411b362009-09-25 16:07:19 -0700659 break;
660
Andreas Gruenbacher8554df12011-01-25 15:37:43 +0100661 case FAIL_FROZEN_DISK_IO:
Philipp Reisner265be2d2010-05-31 10:14:17 +0200662 if (!(req->rq_state & RQ_LOCAL_COMPLETED))
663 break;
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100664 mod_rq_state(req, m, RQ_COMPLETION_SUSP, 0);
Philipp Reisner265be2d2010-05-31 10:14:17 +0200665 break;
666
Andreas Gruenbacher8554df12011-01-25 15:37:43 +0100667 case RESTART_FROZEN_DISK_IO:
Philipp Reisner265be2d2010-05-31 10:14:17 +0200668 if (!(req->rq_state & RQ_LOCAL_COMPLETED))
669 break;
670
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100671 mod_rq_state(req, m,
672 RQ_COMPLETION_SUSP|RQ_LOCAL_COMPLETED,
673 RQ_LOCAL_PENDING);
Philipp Reisner265be2d2010-05-31 10:14:17 +0200674
675 rv = MR_READ;
676 if (bio_data_dir(req->master_bio) == WRITE)
677 rv = MR_WRITE;
678
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100679 get_ldev(mdev); /* always succeeds in this call path */
Philipp Reisner265be2d2010-05-31 10:14:17 +0200680 req->w.cb = w_restart_disk_io;
Lars Ellenbergd5b27b02011-11-14 15:42:37 +0100681 drbd_queue_work(&mdev->tconn->sender_work, &req->w);
Philipp Reisner265be2d2010-05-31 10:14:17 +0200682 break;
683
Andreas Gruenbacher8554df12011-01-25 15:37:43 +0100684 case RESEND:
Philipp Reisner11b58e72010-05-12 17:08:26 +0200685 /* If RQ_NET_OK is already set, we got a P_WRITE_ACK or P_RECV_ACK
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100686 before the connection loss (B&C only); only P_BARRIER_ACK
687 (or the local completion?) was missing when we suspended.
Lars Ellenberg6870ca62012-03-26 17:02:45 +0200688 Throwing them out of the TL here by pretending we got a BARRIER_ACK.
689 During connection handshake, we ensure that the peer was not rebooted. */
Philipp Reisner11b58e72010-05-12 17:08:26 +0200690 if (!(req->rq_state & RQ_NET_OK)) {
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100691 /* FIXME could this possibly be a req->w.cb == w_send_out_of_sync?
692 * in that case we must not set RQ_NET_PENDING. */
693
694 mod_rq_state(req, m, RQ_COMPLETION_SUSP, RQ_NET_QUEUED|RQ_NET_PENDING);
Philipp Reisner11b58e72010-05-12 17:08:26 +0200695 if (req->w.cb) {
Lars Ellenbergd5b27b02011-11-14 15:42:37 +0100696 drbd_queue_work(&mdev->tconn->sender_work, &req->w);
Philipp Reisner11b58e72010-05-12 17:08:26 +0200697 rv = req->rq_state & RQ_WRITE ? MR_WRITE : MR_READ;
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100698 } /* else: FIXME can this happen? */
Philipp Reisner11b58e72010-05-12 17:08:26 +0200699 break;
700 }
Andreas Gruenbacher8554df12011-01-25 15:37:43 +0100701 /* else, fall through to BARRIER_ACKED */
Philipp Reisner11b58e72010-05-12 17:08:26 +0200702
Andreas Gruenbacher8554df12011-01-25 15:37:43 +0100703 case BARRIER_ACKED:
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100704 /* barrier ack for READ requests does not make sense */
Philipp Reisner288f4222010-05-27 15:07:43 +0200705 if (!(req->rq_state & RQ_WRITE))
706 break;
707
Philipp Reisnerb411b362009-09-25 16:07:19 -0700708 if (req->rq_state & RQ_NET_PENDING) {
Andreas Gruenbachera209b4a2011-08-17 12:43:25 +0200709 /* barrier came in before all requests were acked.
Philipp Reisnerb411b362009-09-25 16:07:19 -0700710 * this is bad, because if the connection is lost now,
711 * we won't be able to clean them up... */
Andreas Gruenbacher8554df12011-01-25 15:37:43 +0100712 dev_err(DEV, "FIXME (BARRIER_ACKED but pending)\n");
Philipp Reisnerb411b362009-09-25 16:07:19 -0700713 }
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100714 /* Allowed to complete requests, even while suspended.
715 * As this is called for all requests within a matching epoch,
716 * we need to filter, and only set RQ_NET_DONE for those that
717 * have actually been on the wire. */
718 mod_rq_state(req, m, RQ_COMPLETION_SUSP,
719 (req->rq_state & RQ_NET_MASK) ? RQ_NET_DONE : 0);
Philipp Reisnerb411b362009-09-25 16:07:19 -0700720 break;
721
Andreas Gruenbacher8554df12011-01-25 15:37:43 +0100722 case DATA_RECEIVED:
Philipp Reisnerb411b362009-09-25 16:07:19 -0700723 D_ASSERT(req->rq_state & RQ_NET_PENDING);
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100724 mod_rq_state(req, m, RQ_NET_PENDING, RQ_NET_OK|RQ_NET_DONE);
Philipp Reisnerb411b362009-09-25 16:07:19 -0700725 break;
726 };
Philipp Reisner2a806992010-06-09 14:07:43 +0200727
728 return rv;
Philipp Reisnerb411b362009-09-25 16:07:19 -0700729}
730
731/* we may do a local read if:
732 * - we are consistent (of course),
733 * - or we are generally inconsistent,
734 * BUT we are still/already IN SYNC for this area.
735 * since size may be bigger than BM_BLOCK_SIZE,
736 * we may need to check several bits.
737 */
Andreas Gruenbacher0da34df2010-12-19 20:48:29 +0100738static bool drbd_may_do_local_read(struct drbd_conf *mdev, sector_t sector, int size)
Philipp Reisnerb411b362009-09-25 16:07:19 -0700739{
740 unsigned long sbnr, ebnr;
741 sector_t esector, nr_sectors;
742
743 if (mdev->state.disk == D_UP_TO_DATE)
Andreas Gruenbacher0da34df2010-12-19 20:48:29 +0100744 return true;
Lars Ellenberg8c387de2011-02-18 14:13:07 +0100745 if (mdev->state.disk != D_INCONSISTENT)
Andreas Gruenbacher0da34df2010-12-19 20:48:29 +0100746 return false;
Philipp Reisnerb411b362009-09-25 16:07:19 -0700747 esector = sector + (size >> 9) - 1;
Andreas Gruenbacher8ca98442011-02-21 12:34:58 +0100748 nr_sectors = drbd_get_capacity(mdev->this_bdev);
Philipp Reisnerb411b362009-09-25 16:07:19 -0700749 D_ASSERT(sector < nr_sectors);
750 D_ASSERT(esector < nr_sectors);
751
752 sbnr = BM_SECT_TO_BIT(sector);
753 ebnr = BM_SECT_TO_BIT(esector);
754
Andreas Gruenbacher0da34df2010-12-19 20:48:29 +0100755 return drbd_bm_count_bits(mdev, sbnr, ebnr) == 0;
Philipp Reisnerb411b362009-09-25 16:07:19 -0700756}
757
Lars Ellenberg5da9c832012-03-29 17:04:14 +0200758static bool remote_due_to_read_balancing(struct drbd_conf *mdev, sector_t sector,
759 enum drbd_read_balancing rbm)
Philipp Reisner380207d2011-11-11 12:31:20 +0100760{
Philipp Reisner380207d2011-11-11 12:31:20 +0100761 struct backing_dev_info *bdi;
Philipp Reisnerd60de032011-11-17 10:12:31 +0100762 int stripe_shift;
Philipp Reisner380207d2011-11-11 12:31:20 +0100763
Philipp Reisner380207d2011-11-11 12:31:20 +0100764 switch (rbm) {
765 case RB_CONGESTED_REMOTE:
766 bdi = &mdev->ldev->backing_bdev->bd_disk->queue->backing_dev_info;
767 return bdi_read_congested(bdi);
768 case RB_LEAST_PENDING:
769 return atomic_read(&mdev->local_cnt) >
770 atomic_read(&mdev->ap_pending_cnt) + atomic_read(&mdev->rs_pending_cnt);
Philipp Reisnerd60de032011-11-17 10:12:31 +0100771 case RB_32K_STRIPING: /* stripe_shift = 15 */
772 case RB_64K_STRIPING:
773 case RB_128K_STRIPING:
774 case RB_256K_STRIPING:
775 case RB_512K_STRIPING:
776 case RB_1M_STRIPING: /* stripe_shift = 20 */
777 stripe_shift = (rbm - RB_32K_STRIPING + 15);
778 return (sector >> (stripe_shift - 9)) & 1;
Philipp Reisner380207d2011-11-11 12:31:20 +0100779 case RB_ROUND_ROBIN:
780 return test_and_change_bit(READ_BALANCE_RR, &mdev->flags);
781 case RB_PREFER_REMOTE:
782 return true;
783 case RB_PREFER_LOCAL:
784 default:
785 return false;
786 }
787}
788
Andreas Gruenbacher6024fec2011-01-28 15:53:51 +0100789/*
790 * complete_conflicting_writes - wait for any conflicting write requests
791 *
792 * The write_requests tree contains all active write requests which we
793 * currently know about. Wait for any requests to complete which conflict with
794 * the new one.
Lars Ellenberg648e46b2012-03-26 20:12:24 +0200795 *
796 * Only way out: remove the conflicting intervals from the tree.
Andreas Gruenbacher6024fec2011-01-28 15:53:51 +0100797 */
Lars Ellenberg648e46b2012-03-26 20:12:24 +0200798static void complete_conflicting_writes(struct drbd_request *req)
Andreas Gruenbacher6024fec2011-01-28 15:53:51 +0100799{
Lars Ellenberg648e46b2012-03-26 20:12:24 +0200800 DEFINE_WAIT(wait);
801 struct drbd_conf *mdev = req->w.mdev;
802 struct drbd_interval *i;
803 sector_t sector = req->i.sector;
804 int size = req->i.size;
Andreas Gruenbacher6024fec2011-01-28 15:53:51 +0100805
Lars Ellenberg648e46b2012-03-26 20:12:24 +0200806 i = drbd_find_overlap(&mdev->write_requests, sector, size);
807 if (!i)
808 return;
809
810 for (;;) {
811 prepare_to_wait(&mdev->misc_wait, &wait, TASK_UNINTERRUPTIBLE);
Andreas Gruenbacher6024fec2011-01-28 15:53:51 +0100812 i = drbd_find_overlap(&mdev->write_requests, sector, size);
813 if (!i)
Lars Ellenberg648e46b2012-03-26 20:12:24 +0200814 break;
815 /* Indicate to wake up device->misc_wait on progress. */
816 i->waiting = true;
817 spin_unlock_irq(&mdev->tconn->req_lock);
818 schedule();
819 spin_lock_irq(&mdev->tconn->req_lock);
Andreas Gruenbacher6024fec2011-01-28 15:53:51 +0100820 }
Lars Ellenberg648e46b2012-03-26 20:12:24 +0200821 finish_wait(&mdev->misc_wait, &wait);
Andreas Gruenbacher6024fec2011-01-28 15:53:51 +0100822}
823
Lars Ellenberg5da9c832012-03-29 17:04:14 +0200824/* called within req_lock and rcu_read_lock() */
825static bool conn_check_congested(struct drbd_conf *mdev)
826{
827 struct drbd_tconn *tconn = mdev->tconn;
828 struct net_conf *nc;
829 bool congested = false;
830 enum drbd_on_congestion on_congestion;
831
832 nc = rcu_dereference(tconn->net_conf);
833 on_congestion = nc ? nc->on_congestion : OC_BLOCK;
834 if (on_congestion == OC_BLOCK ||
835 tconn->agreed_pro_version < 96)
836 return false;
837
838 if (nc->cong_fill &&
839 atomic_read(&mdev->ap_in_flight) >= nc->cong_fill) {
840 dev_info(DEV, "Congestion-fill threshold reached\n");
841 congested = true;
842 }
843
844 if (mdev->act_log->used >= nc->cong_extents) {
845 dev_info(DEV, "Congestion-extents threshold reached\n");
846 congested = true;
847 }
848
849 if (congested) {
850 if (mdev->tconn->current_tle_writes)
851 /* start a new epoch for non-mirrored writes */
852 start_new_tl_epoch(mdev->tconn);
853
854 if (on_congestion == OC_PULL_AHEAD)
855 _drbd_set_state(_NS(mdev, conn, C_AHEAD), 0, NULL);
856 else /*nc->on_congestion == OC_DISCONNECT */
857 _drbd_set_state(_NS(mdev, conn, C_DISCONNECTING), 0, NULL);
858 }
859
860 return congested;
861}
862
863/* If this returns false, and req->private_bio is still set,
864 * this should be submitted locally.
865 *
866 * If it returns false, but req->private_bio is not set,
867 * we do not have access to good data :(
868 *
869 * Otherwise, this destroys req->private_bio, if any,
870 * and returns true.
871 */
872static bool do_remote_read(struct drbd_request *req)
873{
874 struct drbd_conf *mdev = req->w.mdev;
875 enum drbd_read_balancing rbm;
876
877 if (req->private_bio) {
878 if (!drbd_may_do_local_read(mdev,
879 req->i.sector, req->i.size)) {
880 bio_put(req->private_bio);
881 req->private_bio = NULL;
882 put_ldev(mdev);
883 }
884 }
885
886 if (mdev->state.pdsk != D_UP_TO_DATE)
887 return false;
888
Lars Ellenberga0d856d2012-01-24 17:19:42 +0100889 if (req->private_bio == NULL)
890 return true;
891
Lars Ellenberg5da9c832012-03-29 17:04:14 +0200892 /* TODO: improve read balancing decisions, take into account drbd
893 * protocol, pending requests etc. */
894
895 rcu_read_lock();
896 rbm = rcu_dereference(mdev->ldev->disk_conf)->read_balancing;
897 rcu_read_unlock();
898
899 if (rbm == RB_PREFER_LOCAL && req->private_bio)
900 return false; /* submit locally */
901
Lars Ellenberg5da9c832012-03-29 17:04:14 +0200902 if (remote_due_to_read_balancing(mdev, req->i.sector, rbm)) {
903 if (req->private_bio) {
904 bio_put(req->private_bio);
905 req->private_bio = NULL;
906 put_ldev(mdev);
907 }
908 return true;
909 }
910
911 return false;
912}
913
914/* returns number of connections (== 1, for drbd 8.4)
915 * expected to actually write this data,
916 * which does NOT include those that we are L_AHEAD for. */
917static int drbd_process_write_request(struct drbd_request *req)
918{
919 struct drbd_conf *mdev = req->w.mdev;
920 int remote, send_oos;
921
922 rcu_read_lock();
923 remote = drbd_should_do_remote(mdev->state);
924 if (remote) {
925 conn_check_congested(mdev);
926 remote = drbd_should_do_remote(mdev->state);
927 }
928 send_oos = drbd_should_send_out_of_sync(mdev->state);
929 rcu_read_unlock();
930
931 if (!remote && !send_oos)
932 return 0;
933
934 D_ASSERT(!(remote && send_oos));
935
936 if (remote) {
937 _req_mod(req, TO_BE_SENT);
938 _req_mod(req, QUEUE_FOR_NET_WRITE);
939 } else if (drbd_set_out_of_sync(mdev, req->i.sector, req->i.size))
940 _req_mod(req, QUEUE_FOR_SEND_OOS);
941
942 return remote;
943}
944
945static void
946drbd_submit_req_private_bio(struct drbd_request *req)
947{
948 struct drbd_conf *mdev = req->w.mdev;
949 struct bio *bio = req->private_bio;
950 const int rw = bio_rw(bio);
951
952 bio->bi_bdev = mdev->ldev->backing_bdev;
953
954 /* State may have changed since we grabbed our reference on the
955 * ->ldev member. Double check, and short-circuit to endio.
956 * In case the last activity log transaction failed to get on
957 * stable storage, and this is a WRITE, we may not even submit
958 * this bio. */
959 if (get_ldev(mdev)) {
960 if (drbd_insert_fault(mdev,
961 rw == WRITE ? DRBD_FAULT_DT_WR
962 : rw == READ ? DRBD_FAULT_DT_RD
963 : DRBD_FAULT_DT_RA))
964 bio_endio(bio, -EIO);
965 else
966 generic_make_request(bio);
967 put_ldev(mdev);
968 } else
969 bio_endio(bio, -EIO);
970}
971
Lars Ellenberg5df69ec2012-01-24 16:49:58 +0100972void __drbd_make_request(struct drbd_conf *mdev, struct bio *bio, unsigned long start_time)
Philipp Reisnerb411b362009-09-25 16:07:19 -0700973{
974 const int rw = bio_rw(bio);
Lars Ellenberg5da9c832012-03-29 17:04:14 +0200975 struct bio_and_error m = { NULL, };
Philipp Reisnerb411b362009-09-25 16:07:19 -0700976 struct drbd_request *req;
Lars Ellenberg5da9c832012-03-29 17:04:14 +0200977 bool no_remote = false;
Philipp Reisnerb411b362009-09-25 16:07:19 -0700978
979 /* allocate outside of all locks; */
980 req = drbd_req_new(mdev, bio);
981 if (!req) {
982 dec_ap_bio(mdev);
983 /* only pass the error to the upper layers.
984 * if user cannot handle io errors, that's not our business. */
985 dev_err(DEV, "could not kmalloc() req\n");
986 bio_endio(bio, -ENOMEM);
Lars Ellenberg5df69ec2012-01-24 16:49:58 +0100987 return;
Philipp Reisnerb411b362009-09-25 16:07:19 -0700988 }
Philipp Reisneraeda1cd62010-11-09 17:45:06 +0100989 req->start_time = start_time;
Philipp Reisnerb411b362009-09-25 16:07:19 -0700990
Lars Ellenberg5da9c832012-03-29 17:04:14 +0200991 if (!get_ldev(mdev)) {
992 bio_put(req->private_bio);
Philipp Reisnerb411b362009-09-25 16:07:19 -0700993 req->private_bio = NULL;
994 }
Philipp Reisnerb411b362009-09-25 16:07:19 -0700995
996 /* For WRITES going to the local disk, grab a reference on the target
997 * extent. This waits for any resync activity in the corresponding
998 * resync extent to finish, and, if necessary, pulls in the target
999 * extent into the activity log, which involves further disk io because
1000 * of transactional on-disk meta data updates. */
Lars Ellenberg5da9c832012-03-29 17:04:14 +02001001 if (rw == WRITE && req->private_bio
1002 && !test_bit(AL_SUSPENDED, &mdev->flags)) {
Philipp Reisner07782862010-08-31 12:00:50 +02001003 req->rq_state |= RQ_IN_ACT_LOG;
Lars Ellenberg181286a2011-03-31 15:18:56 +02001004 drbd_al_begin_io(mdev, &req->i);
Philipp Reisner07782862010-08-31 12:00:50 +02001005 }
Philipp Reisnerb411b362009-09-25 16:07:19 -07001006
Philipp Reisner87eeee42011-01-19 14:16:30 +01001007 spin_lock_irq(&mdev->tconn->req_lock);
Andreas Gruenbacher6024fec2011-01-28 15:53:51 +01001008 if (rw == WRITE) {
Lars Ellenberg648e46b2012-03-26 20:12:24 +02001009 /* This may temporarily give up the req_lock,
1010 * but will re-aquire it before it returns here.
1011 * Needs to be before the check on drbd_suspended() */
1012 complete_conflicting_writes(req);
Andreas Gruenbacher6024fec2011-01-28 15:53:51 +01001013 }
1014
Lars Ellenberg5da9c832012-03-29 17:04:14 +02001015 /* no more giving up req_lock from now on! */
1016
Philipp Reisner2aebfab2011-03-28 16:48:11 +02001017 if (drbd_suspended(mdev)) {
Lars Ellenberg5da9c832012-03-29 17:04:14 +02001018 /* push back and retry: */
1019 req->rq_state |= RQ_POSTPONED;
1020 if (req->private_bio) {
1021 bio_put(req->private_bio);
1022 req->private_bio = NULL;
Philipp Reisnerb411b362009-09-25 16:07:19 -07001023 }
Lars Ellenberg5da9c832012-03-29 17:04:14 +02001024 goto out;
Philipp Reisnerb411b362009-09-25 16:07:19 -07001025 }
1026
Philipp Reisnerb411b362009-09-25 16:07:19 -07001027 /* Update disk stats */
1028 _drbd_start_io_acct(mdev, req, bio);
1029
Lars Ellenberg5da9c832012-03-29 17:04:14 +02001030 /* We fail READ/READA early, if we can not serve it.
1031 * We must do this before req is registered on any lists.
Lars Ellenberga0d856d2012-01-24 17:19:42 +01001032 * Otherwise, drbd_req_complete() will queue failed READ for retry. */
Lars Ellenberg5da9c832012-03-29 17:04:14 +02001033 if (rw != WRITE) {
1034 if (!do_remote_read(req) && !req->private_bio)
1035 goto nodata;
1036 }
Philipp Reisnerb411b362009-09-25 16:07:19 -07001037
Lars Ellenbergb6dd1a82011-11-28 15:04:49 +01001038 /* which transfer log epoch does this belong to? */
1039 req->epoch = atomic_read(&mdev->tconn->current_tle_nr);
1040 if (rw == WRITE)
1041 mdev->tconn->current_tle_writes++;
1042
1043 list_add_tail(&req->tl_requests, &mdev->tconn->transfer_log);
Philipp Reisner288f4222010-05-27 15:07:43 +02001044
Lars Ellenberg5da9c832012-03-29 17:04:14 +02001045 if (rw == WRITE) {
1046 if (!drbd_process_write_request(req))
1047 no_remote = true;
1048 } else {
1049 /* We either have a private_bio, or we can read from remote.
1050 * Otherwise we had done the goto nodata above. */
1051 if (req->private_bio == NULL) {
1052 _req_mod(req, TO_BE_SENT);
1053 _req_mod(req, QUEUE_FOR_NET_READ);
1054 } else
1055 no_remote = true;
Philipp Reisnerb411b362009-09-25 16:07:19 -07001056 }
Philipp Reisner67531712010-10-27 12:21:30 +02001057
Lars Ellenberg5da9c832012-03-29 17:04:14 +02001058 if (req->private_bio) {
1059 /* needs to be marked within the same spinlock */
1060 _req_mod(req, TO_BE_SUBMITTED);
1061 /* but we need to give up the spinlock to submit */
1062 spin_unlock_irq(&mdev->tconn->req_lock);
1063 drbd_submit_req_private_bio(req);
Lars Ellenberga0d856d2012-01-24 17:19:42 +01001064 spin_lock_irq(&mdev->tconn->req_lock);
Lars Ellenberg5da9c832012-03-29 17:04:14 +02001065 } else if (no_remote) {
1066nodata:
1067 if (__ratelimit(&drbd_ratelimit_state))
1068 dev_err(DEV, "IO ERROR: neither local nor remote disk\n");
1069 /* A write may have been queued for send_oos, however.
Lars Ellenberga0d856d2012-01-24 17:19:42 +01001070 * So we can not simply free it, we must go through drbd_req_put_completion_ref() */
Philipp Reisner67531712010-10-27 12:21:30 +02001071 }
1072
Lars Ellenberg5da9c832012-03-29 17:04:14 +02001073out:
Lars Ellenberga0d856d2012-01-24 17:19:42 +01001074 if (drbd_req_put_completion_ref(req, &m, 1))
1075 kref_put(&req->kref, drbd_req_destroy);
Philipp Reisner87eeee42011-01-19 14:16:30 +01001076 spin_unlock_irq(&mdev->tconn->req_lock);
Philipp Reisnerb411b362009-09-25 16:07:19 -07001077
Lars Ellenberg5da9c832012-03-29 17:04:14 +02001078 if (m.bio)
1079 complete_master_bio(mdev, &m);
Lars Ellenberg5df69ec2012-01-24 16:49:58 +01001080 return;
Philipp Reisnerb411b362009-09-25 16:07:19 -07001081}
1082
Andreas Gruenbacher2f58dcf2010-12-13 17:48:19 +01001083int drbd_make_request(struct request_queue *q, struct bio *bio)
Philipp Reisnerb411b362009-09-25 16:07:19 -07001084{
Philipp Reisnerb411b362009-09-25 16:07:19 -07001085 struct drbd_conf *mdev = (struct drbd_conf *) q->queuedata;
Philipp Reisneraeda1cd62010-11-09 17:45:06 +01001086 unsigned long start_time;
Philipp Reisnerb411b362009-09-25 16:07:19 -07001087
Philipp Reisneraeda1cd62010-11-09 17:45:06 +01001088 start_time = jiffies;
1089
Philipp Reisnerb411b362009-09-25 16:07:19 -07001090 /*
1091 * what we "blindly" assume:
1092 */
1093 D_ASSERT(bio->bi_size > 0);
Andreas Gruenbacherc670a392011-02-21 12:41:39 +01001094 D_ASSERT(IS_ALIGNED(bio->bi_size, 512));
Philipp Reisnerb411b362009-09-25 16:07:19 -07001095
Lars Ellenberg5df69ec2012-01-24 16:49:58 +01001096 inc_ap_bio(mdev);
1097 __drbd_make_request(mdev, bio, start_time);
Philipp Reisner69b6a3b2011-12-20 11:49:58 +01001098
1099 return 0;
Philipp Reisnerb411b362009-09-25 16:07:19 -07001100}
1101
Lars Ellenberg23361cf2011-03-31 16:36:43 +02001102/* This is called by bio_add_page().
Philipp Reisnerb411b362009-09-25 16:07:19 -07001103 *
Lars Ellenberg23361cf2011-03-31 16:36:43 +02001104 * q->max_hw_sectors and other global limits are already enforced there.
1105 *
1106 * We need to call down to our lower level device,
1107 * in case it has special restrictions.
1108 *
1109 * We also may need to enforce configured max-bio-bvecs limits.
Philipp Reisnerb411b362009-09-25 16:07:19 -07001110 *
1111 * As long as the BIO is empty we have to allow at least one bvec,
Lars Ellenberg23361cf2011-03-31 16:36:43 +02001112 * regardless of size and offset, so no need to ask lower levels.
Philipp Reisnerb411b362009-09-25 16:07:19 -07001113 */
1114int drbd_merge_bvec(struct request_queue *q, struct bvec_merge_data *bvm, struct bio_vec *bvec)
1115{
1116 struct drbd_conf *mdev = (struct drbd_conf *) q->queuedata;
Philipp Reisnerb411b362009-09-25 16:07:19 -07001117 unsigned int bio_size = bvm->bi_size;
Lars Ellenberg23361cf2011-03-31 16:36:43 +02001118 int limit = DRBD_MAX_BIO_SIZE;
1119 int backing_limit;
Philipp Reisnerb411b362009-09-25 16:07:19 -07001120
Lars Ellenberg23361cf2011-03-31 16:36:43 +02001121 if (bio_size && get_ldev(mdev)) {
Philipp Reisnerb411b362009-09-25 16:07:19 -07001122 struct request_queue * const b =
1123 mdev->ldev->backing_bdev->bd_disk->queue;
Lars Ellenberga1c88d02010-05-14 19:16:41 +02001124 if (b->merge_bvec_fn) {
Philipp Reisnerb411b362009-09-25 16:07:19 -07001125 backing_limit = b->merge_bvec_fn(b, bvm, bvec);
1126 limit = min(limit, backing_limit);
1127 }
1128 put_ldev(mdev);
1129 }
1130 return limit;
1131}
Philipp Reisner7fde2be2011-03-01 11:08:28 +01001132
Lars Ellenbergb6dd1a82011-11-28 15:04:49 +01001133struct drbd_request *find_oldest_request(struct drbd_tconn *tconn)
1134{
1135 /* Walk the transfer log,
1136 * and find the oldest not yet completed request */
1137 struct drbd_request *r;
1138 list_for_each_entry(r, &tconn->transfer_log, tl_requests) {
Lars Ellenbergb4067772012-01-24 16:58:11 +01001139 if (atomic_read(&r->completion_ref))
Lars Ellenbergb6dd1a82011-11-28 15:04:49 +01001140 return r;
1141 }
1142 return NULL;
1143}
1144
Philipp Reisner7fde2be2011-03-01 11:08:28 +01001145void request_timer_fn(unsigned long data)
1146{
1147 struct drbd_conf *mdev = (struct drbd_conf *) data;
Philipp Reisner8b924f12011-03-01 11:08:28 +01001148 struct drbd_tconn *tconn = mdev->tconn;
Philipp Reisner7fde2be2011-03-01 11:08:28 +01001149 struct drbd_request *req; /* oldest request */
Philipp Reisner44ed1672011-04-19 17:10:19 +02001150 struct net_conf *nc;
Philipp Reisner3b03ad52011-07-15 13:53:06 +02001151 unsigned long ent = 0, dt = 0, et, nt; /* effective timeout = ko_count * timeout */
Lars Ellenberg07be15b2012-05-07 11:53:08 +02001152 unsigned long now;
Philipp Reisner7fde2be2011-03-01 11:08:28 +01001153
Philipp Reisner44ed1672011-04-19 17:10:19 +02001154 rcu_read_lock();
1155 nc = rcu_dereference(tconn->net_conf);
Lars Ellenberg07be15b2012-05-07 11:53:08 +02001156 if (nc && mdev->state.conn >= C_WF_REPORT_PARAMS)
1157 ent = nc->timeout * HZ/10 * nc->ko_count;
Philipp Reisnercdfda632011-07-05 15:38:59 +02001158
Lars Ellenberg07be15b2012-05-07 11:53:08 +02001159 if (get_ldev(mdev)) { /* implicit state.disk >= D_INCONSISTENT */
Philipp Reisnercdfda632011-07-05 15:38:59 +02001160 dt = rcu_dereference(mdev->ldev->disk_conf)->disk_timeout * HZ / 10;
1161 put_ldev(mdev);
1162 }
Philipp Reisner44ed1672011-04-19 17:10:19 +02001163 rcu_read_unlock();
1164
Philipp Reisnercdfda632011-07-05 15:38:59 +02001165 et = min_not_zero(dt, ent);
1166
Lars Ellenberg07be15b2012-05-07 11:53:08 +02001167 if (!et)
Philipp Reisner7fde2be2011-03-01 11:08:28 +01001168 return; /* Recurring timer stopped */
1169
Lars Ellenberg07be15b2012-05-07 11:53:08 +02001170 now = jiffies;
1171
Philipp Reisner8b924f12011-03-01 11:08:28 +01001172 spin_lock_irq(&tconn->req_lock);
Lars Ellenbergb6dd1a82011-11-28 15:04:49 +01001173 req = find_oldest_request(tconn);
1174 if (!req) {
Philipp Reisner8b924f12011-03-01 11:08:28 +01001175 spin_unlock_irq(&tconn->req_lock);
Lars Ellenberg07be15b2012-05-07 11:53:08 +02001176 mod_timer(&mdev->request_timer, now + et);
Philipp Reisner7fde2be2011-03-01 11:08:28 +01001177 return;
1178 }
1179
Lars Ellenberg07be15b2012-05-07 11:53:08 +02001180 /* The request is considered timed out, if
1181 * - we have some effective timeout from the configuration,
1182 * with above state restrictions applied,
1183 * - the oldest request is waiting for a response from the network
1184 * resp. the local disk,
1185 * - the oldest request is in fact older than the effective timeout,
1186 * - the connection was established (resp. disk was attached)
1187 * for longer than the timeout already.
1188 * Note that for 32bit jiffies and very stable connections/disks,
1189 * we may have a wrap around, which is catched by
1190 * !time_in_range(now, last_..._jif, last_..._jif + timeout).
1191 *
1192 * Side effect: once per 32bit wrap-around interval, which means every
1193 * ~198 days with 250 HZ, we have a window where the timeout would need
1194 * to expire twice (worst case) to become effective. Good enough.
1195 */
1196 if (ent && req->rq_state & RQ_NET_PENDING &&
1197 time_after(now, req->start_time + ent) &&
1198 !time_in_range(now, tconn->last_reconnect_jif, tconn->last_reconnect_jif + ent)) {
1199 dev_warn(DEV, "Remote failed to finish a request within ko-count * timeout\n");
1200 _drbd_set_state(_NS(mdev, conn, C_TIMEOUT), CS_VERBOSE | CS_HARD, NULL);
Philipp Reisner7fde2be2011-03-01 11:08:28 +01001201 }
Lars Ellenberg07be15b2012-05-07 11:53:08 +02001202 if (dt && req->rq_state & RQ_LOCAL_PENDING && req->w.mdev == mdev &&
1203 time_after(now, req->start_time + dt) &&
1204 !time_in_range(now, mdev->last_reattach_jif, mdev->last_reattach_jif + dt)) {
1205 dev_warn(DEV, "Local backing device failed to meet the disk-timeout\n");
1206 __drbd_chk_io_error(mdev, 1);
Philipp Reisnercdfda632011-07-05 15:38:59 +02001207 }
Lars Ellenberg07be15b2012-05-07 11:53:08 +02001208 nt = (time_after(now, req->start_time + et) ? now : req->start_time) + et;
Philipp Reisner8b924f12011-03-01 11:08:28 +01001209 spin_unlock_irq(&tconn->req_lock);
Philipp Reisner3b03ad52011-07-15 13:53:06 +02001210 mod_timer(&mdev->request_timer, nt);
Philipp Reisner7fde2be2011-03-01 11:08:28 +01001211}