You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
drbd: Finished the "on-no-data-accessible suspend-io;" functionality
When no data is accessible (no connection to the peer, nor a local disk) allow the user to select to freeze all IO operations instead of getting IO errors. Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com> Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
This commit is contained in:
@@ -226,6 +226,8 @@ void _req_may_be_done(struct drbd_request *req, struct bio_and_error *m)
|
||||
return;
|
||||
if (s & RQ_LOCAL_PENDING)
|
||||
return;
|
||||
if (mdev->state.susp)
|
||||
return;
|
||||
|
||||
if (req->master_bio) {
|
||||
/* this is data_received (remote read)
|
||||
@@ -634,6 +636,28 @@ int __req_mod(struct drbd_request *req, enum drbd_req_event what,
|
||||
/* else: done by handed_over_to_network */
|
||||
break;
|
||||
|
||||
case fail_frozen_disk_io:
|
||||
if (!(req->rq_state & RQ_LOCAL_COMPLETED))
|
||||
break;
|
||||
|
||||
_req_may_be_done(req, m);
|
||||
break;
|
||||
|
||||
case restart_frozen_disk_io:
|
||||
if (!(req->rq_state & RQ_LOCAL_COMPLETED))
|
||||
break;
|
||||
|
||||
req->rq_state &= ~RQ_LOCAL_COMPLETED;
|
||||
|
||||
rv = MR_READ;
|
||||
if (bio_data_dir(req->master_bio) == WRITE)
|
||||
rv = MR_WRITE;
|
||||
|
||||
get_ldev(mdev);
|
||||
req->w.cb = w_restart_disk_io;
|
||||
drbd_queue_work(&mdev->data.work, &req->w);
|
||||
break;
|
||||
|
||||
case resend:
|
||||
/* If RQ_NET_OK is already set, we got a P_WRITE_ACK or P_RECV_ACK
|
||||
before the connection loss; only P_BARRIER_ACK was missing.
|
||||
|
||||
Reference in New Issue
Block a user