* [PATCH 0/5] drbd: rename worker to sender
@ 2023-09-28 9:38 ` Christoph Böhmwalder
0 siblings, 0 replies; 15+ messages in thread
From: Christoph Böhmwalder @ 2023-09-28 9:38 UTC (permalink / raw)
To: Jens Axboe
Cc: Philipp Reisner, Lars Ellenberg, drbd-dev, linux-block,
linux-kernel, Christoph Hellwig, Joel Colledge,
Christoph Böhmwalder
Some more refactoring commits from out-of-tree drbd.
Intended for 6.7.
Christoph Böhmwalder (5):
drbd: Rename per-connection "worker" thread to "sender"
drbd: Add new per-resource "worker" thread
drbd: Move connection independent work from "sender" to "worker"
drbd: Keep connection threads running while connection is up only
drbd: Get rid of conn_reconfig_start() and conn_reconfig_done()
drivers/block/drbd/Makefile | 2 +-
drivers/block/drbd/drbd_int.h | 12 ++--
drivers/block/drbd/drbd_main.c | 21 +++---
drivers/block/drbd/drbd_nl.c | 48 +++-----------
drivers/block/drbd/drbd_receiver.c | 2 +-
drivers/block/drbd/drbd_req.c | 7 +-
.../drbd/{drbd_worker.c => drbd_sender.c} | 64 ++++++++++++++++---
drivers/block/drbd/drbd_state.c | 31 ++-------
drivers/block/drbd/drbd_state.h | 1 -
9 files changed, 95 insertions(+), 93 deletions(-)
rename drivers/block/drbd/{drbd_worker.c => drbd_sender.c} (97%)
base-commit: aa511ff8218b3fb328181fbaac48aa5e9c5c6d93
--
2.41.0
^ permalink raw reply [flat|nested] 15+ messages in thread* [Drbd-dev] [PATCH 0/5] drbd: rename worker to sender @ 2023-09-28 9:38 ` Christoph Böhmwalder 0 siblings, 0 replies; 15+ messages in thread From: Christoph Böhmwalder @ 2023-09-28 9:38 UTC (permalink / raw) To: Jens Axboe Cc: Lars Ellenberg, linux-kernel, Philipp Reisner, linux-block, Christoph Hellwig, drbd-dev Some more refactoring commits from out-of-tree drbd. Intended for 6.7. Christoph Böhmwalder (5): drbd: Rename per-connection "worker" thread to "sender" drbd: Add new per-resource "worker" thread drbd: Move connection independent work from "sender" to "worker" drbd: Keep connection threads running while connection is up only drbd: Get rid of conn_reconfig_start() and conn_reconfig_done() drivers/block/drbd/Makefile | 2 +- drivers/block/drbd/drbd_int.h | 12 ++-- drivers/block/drbd/drbd_main.c | 21 +++--- drivers/block/drbd/drbd_nl.c | 48 +++----------- drivers/block/drbd/drbd_receiver.c | 2 +- drivers/block/drbd/drbd_req.c | 7 +- .../drbd/{drbd_worker.c => drbd_sender.c} | 64 ++++++++++++++++--- drivers/block/drbd/drbd_state.c | 31 ++------- drivers/block/drbd/drbd_state.h | 1 - 9 files changed, 95 insertions(+), 93 deletions(-) rename drivers/block/drbd/{drbd_worker.c => drbd_sender.c} (97%) base-commit: aa511ff8218b3fb328181fbaac48aa5e9c5c6d93 -- 2.41.0 ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 1/5] drbd: Rename per-connection "worker" thread to "sender" 2023-09-28 9:38 ` [Drbd-dev] " Christoph Böhmwalder @ 2023-09-28 9:38 ` Christoph Böhmwalder -1 siblings, 0 replies; 15+ messages in thread From: Christoph Böhmwalder @ 2023-09-28 9:38 UTC (permalink / raw) To: Jens Axboe Cc: Philipp Reisner, Lars Ellenberg, drbd-dev, linux-block, linux-kernel, Christoph Hellwig, Joel Colledge, Christoph Böhmwalder Originally-from: Andreas Gruenbacher <agruen@linbit.com> Reviewed-by: Joel Colledge <joel.colledge@linbit.com> Signed-off-by: Christoph Böhmwalder <christoph.boehmwalder@linbit.com> --- drivers/block/drbd/Makefile | 2 +- drivers/block/drbd/drbd_int.h | 10 +++++----- drivers/block/drbd/drbd_main.c | 16 ++++++++-------- drivers/block/drbd/drbd_nl.c | 16 ++++++++-------- drivers/block/drbd/drbd_req.c | 4 +++- .../drbd/{drbd_worker.c => drbd_sender.c} | 18 +++++++++--------- drivers/block/drbd/drbd_state.c | 10 +++++----- 7 files changed, 39 insertions(+), 37 deletions(-) rename drivers/block/drbd/{drbd_worker.c => drbd_sender.c} (99%) diff --git a/drivers/block/drbd/Makefile b/drivers/block/drbd/Makefile index 67a8b352a1d5..cddece877b25 100644 --- a/drivers/block/drbd/Makefile +++ b/drivers/block/drbd/Makefile @@ -1,6 +1,6 @@ # SPDX-License-Identifier: GPL-2.0-only drbd-y := drbd_buildtag.o drbd_bitmap.o drbd_proc.o -drbd-y += drbd_worker.o drbd_receiver.o drbd_req.o drbd_actlog.o +drbd-y += drbd_sender.o drbd_receiver.o drbd_req.o drbd_actlog.o drbd-y += drbd_main.o drbd_strings.o drbd_nl.o drbd-y += drbd_interval.o drbd_state.o drbd-y += drbd_nla.o diff --git a/drivers/block/drbd/drbd_int.h b/drivers/block/drbd/drbd_int.h index a30a5ed811be..a53e63af23f1 100644 --- a/drivers/block/drbd/drbd_int.h +++ b/drivers/block/drbd/drbd_int.h @@ -665,7 +665,7 @@ struct drbd_connection { /* empty member on older kernels without blk_start_plug() */ struct blk_plug receiver_plug; struct drbd_thread receiver; - struct drbd_thread worker; + struct drbd_thread sender; struct drbd_thread ack_receiver; struct workqueue_struct *ack_sender; @@ -1075,7 +1075,7 @@ extern int drbd_bitmap_io(struct drbd_device *device, int (*io_fn)(struct drbd_device *, struct drbd_peer_device *), char *why, enum bm_flag flags, struct drbd_peer_device *peer_device); -extern int drbd_bitmap_io_from_worker(struct drbd_device *device, +extern int drbd_bitmap_io_from_sender(struct drbd_device *device, int (*io_fn)(struct drbd_device *, struct drbd_peer_device *), char *why, enum bm_flag flags, struct drbd_peer_device *peer_device); @@ -1422,12 +1422,12 @@ extern void conn_try_outdate_peer_async(struct drbd_connection *connection); extern enum drbd_peer_state conn_khelper(struct drbd_connection *connection, char *cmd); extern int drbd_khelper(struct drbd_device *device, char *cmd); -/* drbd_worker.c */ +/* drbd_sender.c */ /* bi_end_io handlers */ extern void drbd_md_endio(struct bio *bio); extern void drbd_peer_request_endio(struct bio *bio); extern void drbd_request_endio(struct bio *bio); -extern int drbd_worker(struct drbd_thread *thi); +extern int drbd_sender(struct drbd_thread *thi); enum drbd_ret_code drbd_resync_after_valid(struct drbd_device *device, int o_minor); void drbd_resync_after_changed(struct drbd_device *device); extern void drbd_start_resync(struct drbd_device *device, enum drbd_conns side); @@ -1912,7 +1912,7 @@ static inline void drbd_thread_restart_nowait(struct drbd_thread *thi) * w_send_barrier * _req_mod(req, QUEUE_FOR_NET_WRITE or QUEUE_FOR_NET_READ); * it is much easier and equally valid to count what we queue for the - * worker, even before it actually was queued or send. + * sender, even before it actually was queued or send. * (drbd_make_request_common; recovery path on read io-error) * decreased: * got_BarrierAck (respective tl_clear, tl_clear_barrier) diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c index 6bc86106c7b2..a14c1e9ee327 100644 --- a/drivers/block/drbd/drbd_main.c +++ b/drivers/block/drbd/drbd_main.c @@ -279,7 +279,7 @@ void tl_restart(struct drbd_connection *connection, enum drbd_req_event what) * * This is called after the connection to the peer was lost. The storage covered * by the requests on the transfer gets marked as our of sync. Called from the - * receiver thread and the worker thread. + * receiver thread and the sender thread. */ void tl_clear(struct drbd_connection *connection) { @@ -2533,7 +2533,7 @@ int set_resource_options(struct drbd_resource *resource, struct res_opts *res_op for_each_connection_rcu(connection, resource) { connection->receiver.reset_cpu_mask = 1; connection->ack_receiver.reset_cpu_mask = 1; - connection->worker.reset_cpu_mask = 1; + connection->sender.reset_cpu_mask = 1; } } err = 0; @@ -2619,8 +2619,8 @@ struct drbd_connection *conn_create(const char *name, struct res_opts *res_opts) drbd_thread_init(resource, &connection->receiver, drbd_receiver, "receiver"); connection->receiver.connection = connection; - drbd_thread_init(resource, &connection->worker, drbd_worker, "worker"); - connection->worker.connection = connection; + drbd_thread_init(resource, &connection->sender, drbd_sender, "sender"); + connection->sender.connection = connection; drbd_thread_init(resource, &connection->ack_receiver, drbd_ack_receiver, "ack_recv"); connection->ack_receiver.connection = connection; @@ -3497,7 +3497,7 @@ static int w_bitmap_io(struct drbd_work *w, int unused) * * While IO on the bitmap happens we freeze application IO thus we ensure * that drbd_set_out_of_sync() can not be called. This function MAY ONLY be - * called from worker context. It MUST NOT be used while a previous such + * called from sender context. It MUST NOT be used while a previous such * work is still pending! * * Its worker function encloses the call of io_fn() by get_ldev() and @@ -3509,7 +3509,7 @@ void drbd_queue_bitmap_io(struct drbd_device *device, char *why, enum bm_flag flags, struct drbd_peer_device *peer_device) { - D_ASSERT(device, current == peer_device->connection->worker.task); + D_ASSERT(device, current == peer_device->connection->sender.task); D_ASSERT(device, !test_bit(BITMAP_IO_QUEUED, &device->flags)); D_ASSERT(device, !test_bit(BITMAP_IO, &device->flags)); @@ -3544,7 +3544,7 @@ void drbd_queue_bitmap_io(struct drbd_device *device, * @flags: Bitmap flags * * freezes application IO while that the actual IO operations runs. This - * functions MAY NOT be called from worker context. + * functions MAY NOT be called from sender context. */ int drbd_bitmap_io(struct drbd_device *device, int (*io_fn)(struct drbd_device *, struct drbd_peer_device *), @@ -3555,7 +3555,7 @@ int drbd_bitmap_io(struct drbd_device *device, const bool do_suspend_io = flags & (BM_DONT_CLEAR|BM_DONT_SET|BM_DONT_TEST); int rv; - D_ASSERT(device, current != first_peer_device(device)->connection->worker.task); + D_ASSERT(device, current != first_peer_device(device)->connection->sender.task); if (do_suspend_io) drbd_suspend_io(device); diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c index d3538bd83fb3..a5844819d1c3 100644 --- a/drivers/block/drbd/drbd_nl.c +++ b/drivers/block/drbd/drbd_nl.c @@ -365,7 +365,7 @@ int drbd_khelper(struct drbd_device *device, char *cmd) struct sib_info sib; int ret; - if (current == connection->worker.task) + if (current == connection->sender.task) set_bit(CALLBACK_PENDING, &connection->flags); snprintf(mb, 14, "minor-%d", device_to_minor(device)); @@ -394,7 +394,7 @@ int drbd_khelper(struct drbd_device *device, char *cmd) drbd_bcast_event(device, &sib); notify_helper(NOTIFY_RESPONSE, device, connection, cmd, ret); - if (current == connection->worker.task) + if (current == connection->sender.task) clear_bit(CALLBACK_PENDING, &connection->flags); if (ret < 0) /* Ignore any ERRNOs we got. */ @@ -1349,14 +1349,14 @@ void drbd_reconsider_queue_parameters(struct drbd_device *device, struct drbd_ba drbd_setup_queue_param(device, bdev, new, o); } -/* Starts the worker thread */ +/* Starts the sender thread */ static void conn_reconfig_start(struct drbd_connection *connection) { - drbd_thread_start(&connection->worker); + drbd_thread_start(&connection->sender); drbd_flush_workqueue(&connection->sender_work); } -/* if still unconfigured, stops worker again. */ +/* if still unconfigured, stops sender again. */ static void conn_reconfig_done(struct drbd_connection *connection) { bool stop_threads; @@ -1368,7 +1368,7 @@ static void conn_reconfig_done(struct drbd_connection *connection) /* ack_receiver thread and ack_sender workqueue are implicitly * stopped by receiver in conn_disconnect() */ drbd_thread_stop(&connection->receiver); - drbd_thread_stop(&connection->worker); + drbd_thread_stop(&connection->sender); } } @@ -4362,7 +4362,7 @@ static enum drbd_ret_code adm_del_minor(struct drbd_device *device) /* If the state engine hasn't stopped the sender thread yet, we * need to flush the sender work queue before generating the * DESTROY events here. */ - if (get_t_state(&connection->worker) == RUNNING) + if (get_t_state(&connection->sender) == RUNNING) drbd_flush_workqueue(&connection->sender_work); mutex_lock(¬ification_mutex); @@ -4424,7 +4424,7 @@ static int adm_del_resource(struct drbd_resource *resource) /* Make sure all threads have actually stopped: state handling only * does drbd_thread_stop_nowait(). */ list_for_each_entry(connection, &resource->connections, connections) - drbd_thread_stop(&connection->worker); + drbd_thread_stop(&connection->sender); synchronize_rcu(); drbd_free_resource(resource); return NO_ERROR; diff --git a/drivers/block/drbd/drbd_req.c b/drivers/block/drbd/drbd_req.c index 380e6584a4ee..cd56fd0f3b06 100644 --- a/drivers/block/drbd/drbd_req.c +++ b/drivers/block/drbd/drbd_req.c @@ -202,6 +202,7 @@ void drbd_req_complete(struct drbd_request *req, struct bio_and_error *m) * not yet completed by the local io subsystem * these flags may get cleared in any order by * the worker, + * the sender, * the receiver, * the bio_endio completion callbacks. */ @@ -717,7 +718,8 @@ int __req_mod(struct drbd_request *req, enum drbd_req_event what, case SEND_CANCELED: case SEND_FAILED: /* real cleanup will be done from tl_clear. just update flags - * so it is no longer marked as on the worker queue */ + * so it is no longer marked as on the sender queue + */ mod_rq_state(req, m, RQ_NET_QUEUED, 0); break; diff --git a/drivers/block/drbd/drbd_worker.c b/drivers/block/drbd/drbd_sender.c similarity index 99% rename from drivers/block/drbd/drbd_worker.c rename to drivers/block/drbd/drbd_sender.c index 4352a50fbb3f..fcc8a43efdca 100644 --- a/drivers/block/drbd/drbd_worker.c +++ b/drivers/block/drbd/drbd_sender.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only /* - drbd_worker.c + drbd_sender.c This file is part of DRBD by Philipp Reisner and Lars Ellenberg. @@ -865,7 +865,7 @@ int drbd_resync_finished(struct drbd_peer_device *peer_device) * resync LRU would be wrong. */ if (drbd_rs_del_all(device)) { /* In case this is not possible now, most probably because - * there are P_RS_DATA_REPLY Packets lingering on the worker's + * there are P_RS_DATA_REPLY Packets lingering on the sender's * queue (or even the read operations for those packets * is not finished by now). Retry in 100ms. */ @@ -1587,7 +1587,7 @@ static bool drbd_pause_after(struct drbd_device *device) * drbd_resume_next() - Resume resync on all devices that may resync now * @device: DRBD device. * - * Called from process context only (admin command and worker). + * Called from process context only (admin command and sender). */ static bool drbd_resume_next(struct drbd_device *device) { @@ -1783,8 +1783,8 @@ void drbd_start_resync(struct drbd_device *device, enum drbd_conns side) } } - if (current == connection->worker.task) { - /* The worker should not sleep waiting for state_mutex, + if (current == connection->sender.task) { + /* The sender should not sleep waiting for state_mutex, that can take long */ if (!mutex_trylock(device->state_mutex)) { set_bit(B_RS_H_DONE, &device->flags); @@ -1977,7 +1977,7 @@ static void go_diskless(struct drbd_device *device) * while we detach. * Any modifications would not be expected anymore, though. */ - if (drbd_bitmap_io_from_worker(device, drbd_bm_write, + if (drbd_bitmap_io_from_sender(device, drbd_bm_write, "detach", BM_LOCKED_TEST_ALLOWED, peer_device)) { if (test_bit(WAS_READ_ERROR, &device->flags)) { drbd_md_set_flag(device, MDF_FULL_SYNC); @@ -2142,7 +2142,7 @@ static void wait_for_work(struct drbd_connection *connection, struct list_head * break; /* drbd_send() may have called flush_signals() */ - if (get_t_state(&connection->worker) != RUNNING) + if (get_t_state(&connection->sender) != RUNNING) break; schedule(); @@ -2167,7 +2167,7 @@ static void wait_for_work(struct drbd_connection *connection, struct list_head * mutex_unlock(&connection->data.mutex); } -int drbd_worker(struct drbd_thread *thi) +int drbd_sender(struct drbd_thread *thi) { struct drbd_connection *connection = thi->connection; struct drbd_work *w = NULL; @@ -2191,7 +2191,7 @@ int drbd_worker(struct drbd_thread *thi) if (signal_pending(current)) { flush_signals(current); if (get_t_state(thi) == RUNNING) { - drbd_warn(connection, "Worker got an unexpected signal\n"); + drbd_warn(connection, "Sender got an unexpected signal\n"); continue; } break; diff --git a/drivers/block/drbd/drbd_state.c b/drivers/block/drbd/drbd_state.c index 287a8d1d3f70..c623769abc1a 100644 --- a/drivers/block/drbd/drbd_state.c +++ b/drivers/block/drbd/drbd_state.c @@ -622,7 +622,7 @@ drbd_req_state(struct drbd_device *device, union drbd_state mask, spin_unlock_irqrestore(&device->resource->req_lock, flags); if (f & CS_WAIT_COMPLETE && rv == SS_SUCCESS) { - D_ASSERT(device, current != first_peer_device(device)->connection->worker.task); + D_ASSERT(device, current != first_peer_device(device)->connection->sender.task); wait_for_completion(&done); } @@ -1519,14 +1519,14 @@ static void abw_start_sync(struct drbd_device *device, int rv) } } -int drbd_bitmap_io_from_worker(struct drbd_device *device, +int drbd_bitmap_io_from_sender(struct drbd_device *device, int (*io_fn)(struct drbd_device *, struct drbd_peer_device *), char *why, enum bm_flag flags, struct drbd_peer_device *peer_device) { int rv; - D_ASSERT(device, current == first_peer_device(device)->connection->worker.task); + D_ASSERT(device, current == first_peer_device(device)->connection->sender.task); /* open coded non-blocking drbd_suspend_io(device); */ atomic_inc(&device->suspend_cnt); @@ -1841,7 +1841,7 @@ static void after_state_ch(struct drbd_device *device, union drbd_state os, /* We may still be Primary ourselves. * No harm done if the bitmap still changes, * redirtied pages will follow later. */ - drbd_bitmap_io_from_worker(device, &drbd_bm_write, + drbd_bitmap_io_from_sender(device, &drbd_bm_write, "demote diskless peer", BM_LOCKED_SET_ALLOWED, peer_device); put_ldev(device); } @@ -1853,7 +1853,7 @@ static void after_state_ch(struct drbd_device *device, union drbd_state os, device->state.conn <= C_CONNECTED && get_ldev(device)) { /* No changes to the bitmap expected this time, so assert that, * even though no harm was done if it did change. */ - drbd_bitmap_io_from_worker(device, &drbd_bm_write, + drbd_bitmap_io_from_sender(device, &drbd_bm_write, "demote", BM_LOCKED_TEST_ALLOWED, peer_device); put_ldev(device); } -- 2.41.0 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [Drbd-dev] [PATCH 1/5] drbd: Rename per-connection "worker" thread to "sender" @ 2023-09-28 9:38 ` Christoph Böhmwalder 0 siblings, 0 replies; 15+ messages in thread From: Christoph Böhmwalder @ 2023-09-28 9:38 UTC (permalink / raw) To: Jens Axboe Cc: Lars Ellenberg, linux-kernel, Philipp Reisner, linux-block, Christoph Hellwig, drbd-dev Originally-from: Andreas Gruenbacher <agruen@linbit.com> Reviewed-by: Joel Colledge <joel.colledge@linbit.com> Signed-off-by: Christoph Böhmwalder <christoph.boehmwalder@linbit.com> --- drivers/block/drbd/Makefile | 2 +- drivers/block/drbd/drbd_int.h | 10 +++++----- drivers/block/drbd/drbd_main.c | 16 ++++++++-------- drivers/block/drbd/drbd_nl.c | 16 ++++++++-------- drivers/block/drbd/drbd_req.c | 4 +++- .../drbd/{drbd_worker.c => drbd_sender.c} | 18 +++++++++--------- drivers/block/drbd/drbd_state.c | 10 +++++----- 7 files changed, 39 insertions(+), 37 deletions(-) rename drivers/block/drbd/{drbd_worker.c => drbd_sender.c} (99%) diff --git a/drivers/block/drbd/Makefile b/drivers/block/drbd/Makefile index 67a8b352a1d5..cddece877b25 100644 --- a/drivers/block/drbd/Makefile +++ b/drivers/block/drbd/Makefile @@ -1,6 +1,6 @@ # SPDX-License-Identifier: GPL-2.0-only drbd-y := drbd_buildtag.o drbd_bitmap.o drbd_proc.o -drbd-y += drbd_worker.o drbd_receiver.o drbd_req.o drbd_actlog.o +drbd-y += drbd_sender.o drbd_receiver.o drbd_req.o drbd_actlog.o drbd-y += drbd_main.o drbd_strings.o drbd_nl.o drbd-y += drbd_interval.o drbd_state.o drbd-y += drbd_nla.o diff --git a/drivers/block/drbd/drbd_int.h b/drivers/block/drbd/drbd_int.h index a30a5ed811be..a53e63af23f1 100644 --- a/drivers/block/drbd/drbd_int.h +++ b/drivers/block/drbd/drbd_int.h @@ -665,7 +665,7 @@ struct drbd_connection { /* empty member on older kernels without blk_start_plug() */ struct blk_plug receiver_plug; struct drbd_thread receiver; - struct drbd_thread worker; + struct drbd_thread sender; struct drbd_thread ack_receiver; struct workqueue_struct *ack_sender; @@ -1075,7 +1075,7 @@ extern int drbd_bitmap_io(struct drbd_device *device, int (*io_fn)(struct drbd_device *, struct drbd_peer_device *), char *why, enum bm_flag flags, struct drbd_peer_device *peer_device); -extern int drbd_bitmap_io_from_worker(struct drbd_device *device, +extern int drbd_bitmap_io_from_sender(struct drbd_device *device, int (*io_fn)(struct drbd_device *, struct drbd_peer_device *), char *why, enum bm_flag flags, struct drbd_peer_device *peer_device); @@ -1422,12 +1422,12 @@ extern void conn_try_outdate_peer_async(struct drbd_connection *connection); extern enum drbd_peer_state conn_khelper(struct drbd_connection *connection, char *cmd); extern int drbd_khelper(struct drbd_device *device, char *cmd); -/* drbd_worker.c */ +/* drbd_sender.c */ /* bi_end_io handlers */ extern void drbd_md_endio(struct bio *bio); extern void drbd_peer_request_endio(struct bio *bio); extern void drbd_request_endio(struct bio *bio); -extern int drbd_worker(struct drbd_thread *thi); +extern int drbd_sender(struct drbd_thread *thi); enum drbd_ret_code drbd_resync_after_valid(struct drbd_device *device, int o_minor); void drbd_resync_after_changed(struct drbd_device *device); extern void drbd_start_resync(struct drbd_device *device, enum drbd_conns side); @@ -1912,7 +1912,7 @@ static inline void drbd_thread_restart_nowait(struct drbd_thread *thi) * w_send_barrier * _req_mod(req, QUEUE_FOR_NET_WRITE or QUEUE_FOR_NET_READ); * it is much easier and equally valid to count what we queue for the - * worker, even before it actually was queued or send. + * sender, even before it actually was queued or send. * (drbd_make_request_common; recovery path on read io-error) * decreased: * got_BarrierAck (respective tl_clear, tl_clear_barrier) diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c index 6bc86106c7b2..a14c1e9ee327 100644 --- a/drivers/block/drbd/drbd_main.c +++ b/drivers/block/drbd/drbd_main.c @@ -279,7 +279,7 @@ void tl_restart(struct drbd_connection *connection, enum drbd_req_event what) * * This is called after the connection to the peer was lost. The storage covered * by the requests on the transfer gets marked as our of sync. Called from the - * receiver thread and the worker thread. + * receiver thread and the sender thread. */ void tl_clear(struct drbd_connection *connection) { @@ -2533,7 +2533,7 @@ int set_resource_options(struct drbd_resource *resource, struct res_opts *res_op for_each_connection_rcu(connection, resource) { connection->receiver.reset_cpu_mask = 1; connection->ack_receiver.reset_cpu_mask = 1; - connection->worker.reset_cpu_mask = 1; + connection->sender.reset_cpu_mask = 1; } } err = 0; @@ -2619,8 +2619,8 @@ struct drbd_connection *conn_create(const char *name, struct res_opts *res_opts) drbd_thread_init(resource, &connection->receiver, drbd_receiver, "receiver"); connection->receiver.connection = connection; - drbd_thread_init(resource, &connection->worker, drbd_worker, "worker"); - connection->worker.connection = connection; + drbd_thread_init(resource, &connection->sender, drbd_sender, "sender"); + connection->sender.connection = connection; drbd_thread_init(resource, &connection->ack_receiver, drbd_ack_receiver, "ack_recv"); connection->ack_receiver.connection = connection; @@ -3497,7 +3497,7 @@ static int w_bitmap_io(struct drbd_work *w, int unused) * * While IO on the bitmap happens we freeze application IO thus we ensure * that drbd_set_out_of_sync() can not be called. This function MAY ONLY be - * called from worker context. It MUST NOT be used while a previous such + * called from sender context. It MUST NOT be used while a previous such * work is still pending! * * Its worker function encloses the call of io_fn() by get_ldev() and @@ -3509,7 +3509,7 @@ void drbd_queue_bitmap_io(struct drbd_device *device, char *why, enum bm_flag flags, struct drbd_peer_device *peer_device) { - D_ASSERT(device, current == peer_device->connection->worker.task); + D_ASSERT(device, current == peer_device->connection->sender.task); D_ASSERT(device, !test_bit(BITMAP_IO_QUEUED, &device->flags)); D_ASSERT(device, !test_bit(BITMAP_IO, &device->flags)); @@ -3544,7 +3544,7 @@ void drbd_queue_bitmap_io(struct drbd_device *device, * @flags: Bitmap flags * * freezes application IO while that the actual IO operations runs. This - * functions MAY NOT be called from worker context. + * functions MAY NOT be called from sender context. */ int drbd_bitmap_io(struct drbd_device *device, int (*io_fn)(struct drbd_device *, struct drbd_peer_device *), @@ -3555,7 +3555,7 @@ int drbd_bitmap_io(struct drbd_device *device, const bool do_suspend_io = flags & (BM_DONT_CLEAR|BM_DONT_SET|BM_DONT_TEST); int rv; - D_ASSERT(device, current != first_peer_device(device)->connection->worker.task); + D_ASSERT(device, current != first_peer_device(device)->connection->sender.task); if (do_suspend_io) drbd_suspend_io(device); diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c index d3538bd83fb3..a5844819d1c3 100644 --- a/drivers/block/drbd/drbd_nl.c +++ b/drivers/block/drbd/drbd_nl.c @@ -365,7 +365,7 @@ int drbd_khelper(struct drbd_device *device, char *cmd) struct sib_info sib; int ret; - if (current == connection->worker.task) + if (current == connection->sender.task) set_bit(CALLBACK_PENDING, &connection->flags); snprintf(mb, 14, "minor-%d", device_to_minor(device)); @@ -394,7 +394,7 @@ int drbd_khelper(struct drbd_device *device, char *cmd) drbd_bcast_event(device, &sib); notify_helper(NOTIFY_RESPONSE, device, connection, cmd, ret); - if (current == connection->worker.task) + if (current == connection->sender.task) clear_bit(CALLBACK_PENDING, &connection->flags); if (ret < 0) /* Ignore any ERRNOs we got. */ @@ -1349,14 +1349,14 @@ void drbd_reconsider_queue_parameters(struct drbd_device *device, struct drbd_ba drbd_setup_queue_param(device, bdev, new, o); } -/* Starts the worker thread */ +/* Starts the sender thread */ static void conn_reconfig_start(struct drbd_connection *connection) { - drbd_thread_start(&connection->worker); + drbd_thread_start(&connection->sender); drbd_flush_workqueue(&connection->sender_work); } -/* if still unconfigured, stops worker again. */ +/* if still unconfigured, stops sender again. */ static void conn_reconfig_done(struct drbd_connection *connection) { bool stop_threads; @@ -1368,7 +1368,7 @@ static void conn_reconfig_done(struct drbd_connection *connection) /* ack_receiver thread and ack_sender workqueue are implicitly * stopped by receiver in conn_disconnect() */ drbd_thread_stop(&connection->receiver); - drbd_thread_stop(&connection->worker); + drbd_thread_stop(&connection->sender); } } @@ -4362,7 +4362,7 @@ static enum drbd_ret_code adm_del_minor(struct drbd_device *device) /* If the state engine hasn't stopped the sender thread yet, we * need to flush the sender work queue before generating the * DESTROY events here. */ - if (get_t_state(&connection->worker) == RUNNING) + if (get_t_state(&connection->sender) == RUNNING) drbd_flush_workqueue(&connection->sender_work); mutex_lock(¬ification_mutex); @@ -4424,7 +4424,7 @@ static int adm_del_resource(struct drbd_resource *resource) /* Make sure all threads have actually stopped: state handling only * does drbd_thread_stop_nowait(). */ list_for_each_entry(connection, &resource->connections, connections) - drbd_thread_stop(&connection->worker); + drbd_thread_stop(&connection->sender); synchronize_rcu(); drbd_free_resource(resource); return NO_ERROR; diff --git a/drivers/block/drbd/drbd_req.c b/drivers/block/drbd/drbd_req.c index 380e6584a4ee..cd56fd0f3b06 100644 --- a/drivers/block/drbd/drbd_req.c +++ b/drivers/block/drbd/drbd_req.c @@ -202,6 +202,7 @@ void drbd_req_complete(struct drbd_request *req, struct bio_and_error *m) * not yet completed by the local io subsystem * these flags may get cleared in any order by * the worker, + * the sender, * the receiver, * the bio_endio completion callbacks. */ @@ -717,7 +718,8 @@ int __req_mod(struct drbd_request *req, enum drbd_req_event what, case SEND_CANCELED: case SEND_FAILED: /* real cleanup will be done from tl_clear. just update flags - * so it is no longer marked as on the worker queue */ + * so it is no longer marked as on the sender queue + */ mod_rq_state(req, m, RQ_NET_QUEUED, 0); break; diff --git a/drivers/block/drbd/drbd_worker.c b/drivers/block/drbd/drbd_sender.c similarity index 99% rename from drivers/block/drbd/drbd_worker.c rename to drivers/block/drbd/drbd_sender.c index 4352a50fbb3f..fcc8a43efdca 100644 --- a/drivers/block/drbd/drbd_worker.c +++ b/drivers/block/drbd/drbd_sender.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only /* - drbd_worker.c + drbd_sender.c This file is part of DRBD by Philipp Reisner and Lars Ellenberg. @@ -865,7 +865,7 @@ int drbd_resync_finished(struct drbd_peer_device *peer_device) * resync LRU would be wrong. */ if (drbd_rs_del_all(device)) { /* In case this is not possible now, most probably because - * there are P_RS_DATA_REPLY Packets lingering on the worker's + * there are P_RS_DATA_REPLY Packets lingering on the sender's * queue (or even the read operations for those packets * is not finished by now). Retry in 100ms. */ @@ -1587,7 +1587,7 @@ static bool drbd_pause_after(struct drbd_device *device) * drbd_resume_next() - Resume resync on all devices that may resync now * @device: DRBD device. * - * Called from process context only (admin command and worker). + * Called from process context only (admin command and sender). */ static bool drbd_resume_next(struct drbd_device *device) { @@ -1783,8 +1783,8 @@ void drbd_start_resync(struct drbd_device *device, enum drbd_conns side) } } - if (current == connection->worker.task) { - /* The worker should not sleep waiting for state_mutex, + if (current == connection->sender.task) { + /* The sender should not sleep waiting for state_mutex, that can take long */ if (!mutex_trylock(device->state_mutex)) { set_bit(B_RS_H_DONE, &device->flags); @@ -1977,7 +1977,7 @@ static void go_diskless(struct drbd_device *device) * while we detach. * Any modifications would not be expected anymore, though. */ - if (drbd_bitmap_io_from_worker(device, drbd_bm_write, + if (drbd_bitmap_io_from_sender(device, drbd_bm_write, "detach", BM_LOCKED_TEST_ALLOWED, peer_device)) { if (test_bit(WAS_READ_ERROR, &device->flags)) { drbd_md_set_flag(device, MDF_FULL_SYNC); @@ -2142,7 +2142,7 @@ static void wait_for_work(struct drbd_connection *connection, struct list_head * break; /* drbd_send() may have called flush_signals() */ - if (get_t_state(&connection->worker) != RUNNING) + if (get_t_state(&connection->sender) != RUNNING) break; schedule(); @@ -2167,7 +2167,7 @@ static void wait_for_work(struct drbd_connection *connection, struct list_head * mutex_unlock(&connection->data.mutex); } -int drbd_worker(struct drbd_thread *thi) +int drbd_sender(struct drbd_thread *thi) { struct drbd_connection *connection = thi->connection; struct drbd_work *w = NULL; @@ -2191,7 +2191,7 @@ int drbd_worker(struct drbd_thread *thi) if (signal_pending(current)) { flush_signals(current); if (get_t_state(thi) == RUNNING) { - drbd_warn(connection, "Worker got an unexpected signal\n"); + drbd_warn(connection, "Sender got an unexpected signal\n"); continue; } break; diff --git a/drivers/block/drbd/drbd_state.c b/drivers/block/drbd/drbd_state.c index 287a8d1d3f70..c623769abc1a 100644 --- a/drivers/block/drbd/drbd_state.c +++ b/drivers/block/drbd/drbd_state.c @@ -622,7 +622,7 @@ drbd_req_state(struct drbd_device *device, union drbd_state mask, spin_unlock_irqrestore(&device->resource->req_lock, flags); if (f & CS_WAIT_COMPLETE && rv == SS_SUCCESS) { - D_ASSERT(device, current != first_peer_device(device)->connection->worker.task); + D_ASSERT(device, current != first_peer_device(device)->connection->sender.task); wait_for_completion(&done); } @@ -1519,14 +1519,14 @@ static void abw_start_sync(struct drbd_device *device, int rv) } } -int drbd_bitmap_io_from_worker(struct drbd_device *device, +int drbd_bitmap_io_from_sender(struct drbd_device *device, int (*io_fn)(struct drbd_device *, struct drbd_peer_device *), char *why, enum bm_flag flags, struct drbd_peer_device *peer_device) { int rv; - D_ASSERT(device, current == first_peer_device(device)->connection->worker.task); + D_ASSERT(device, current == first_peer_device(device)->connection->sender.task); /* open coded non-blocking drbd_suspend_io(device); */ atomic_inc(&device->suspend_cnt); @@ -1841,7 +1841,7 @@ static void after_state_ch(struct drbd_device *device, union drbd_state os, /* We may still be Primary ourselves. * No harm done if the bitmap still changes, * redirtied pages will follow later. */ - drbd_bitmap_io_from_worker(device, &drbd_bm_write, + drbd_bitmap_io_from_sender(device, &drbd_bm_write, "demote diskless peer", BM_LOCKED_SET_ALLOWED, peer_device); put_ldev(device); } @@ -1853,7 +1853,7 @@ static void after_state_ch(struct drbd_device *device, union drbd_state os, device->state.conn <= C_CONNECTED && get_ldev(device)) { /* No changes to the bitmap expected this time, so assert that, * even though no harm was done if it did change. */ - drbd_bitmap_io_from_worker(device, &drbd_bm_write, + drbd_bitmap_io_from_sender(device, &drbd_bm_write, "demote", BM_LOCKED_TEST_ALLOWED, peer_device); put_ldev(device); } -- 2.41.0 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH 1/5] drbd: Rename per-connection "worker" thread to "sender" 2023-09-28 9:38 ` [Drbd-dev] " Christoph Böhmwalder @ 2023-09-29 12:04 ` kernel test robot -1 siblings, 0 replies; 15+ messages in thread From: kernel test robot @ 2023-09-29 12:04 UTC (permalink / raw) To: Christoph Böhmwalder, Jens Axboe Cc: oe-kbuild-all, Philipp Reisner, Lars Ellenberg, drbd-dev, linux-block, linux-kernel, Christoph Hellwig, Joel Colledge, Christoph Böhmwalder Hi Christoph, kernel test robot noticed the following build warnings: [auto build test WARNING on aa511ff8218b3fb328181fbaac48aa5e9c5c6d93] url: https://github.com/intel-lab-lkp/linux/commits/Christoph-B-hmwalder/drbd-Rename-per-connection-worker-thread-to-sender/20230928-174054 base: aa511ff8218b3fb328181fbaac48aa5e9c5c6d93 patch link: https://lore.kernel.org/r/20230928093852.676786-2-christoph.boehmwalder%40linbit.com patch subject: [PATCH 1/5] drbd: Rename per-connection "worker" thread to "sender" config: i386-randconfig-061-20230929 (https://download.01.org/0day-ci/archive/20230929/202309291915.sFSScoxj-lkp@intel.com/config) compiler: gcc-12 (Debian 12.2.0-14) 12.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20230929/202309291915.sFSScoxj-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202309291915.sFSScoxj-lkp@intel.com/ sparse warnings: (new ones prefixed by >>) >> drivers/block/drbd/drbd_sender.c:618:39: sparse: sparse: incompatible types in comparison expression (different address spaces): >> drivers/block/drbd/drbd_sender.c:618:39: sparse: struct disk_conf [noderef] __rcu * >> drivers/block/drbd/drbd_sender.c:618:39: sparse: struct disk_conf * drivers/block/drbd/drbd_sender.c:509:14: sparse: sparse: incompatible types in comparison expression (different address spaces): drivers/block/drbd/drbd_sender.c:509:14: sparse: struct disk_conf [noderef] __rcu * drivers/block/drbd/drbd_sender.c:509:14: sparse: struct disk_conf * drivers/block/drbd/drbd_sender.c:510:16: sparse: sparse: incompatible types in comparison expression (different address spaces): >> drivers/block/drbd/drbd_sender.c:510:16: sparse: struct fifo_buffer [noderef] __rcu * >> drivers/block/drbd/drbd_sender.c:510:16: sparse: struct fifo_buffer * drivers/block/drbd/drbd_sender.c:560:13: sparse: sparse: incompatible types in comparison expression (different address spaces): drivers/block/drbd/drbd_sender.c:560:13: sparse: struct fifo_buffer [noderef] __rcu * drivers/block/drbd/drbd_sender.c:560:13: sparse: struct fifo_buffer * drivers/block/drbd/drbd_sender.c:564:39: sparse: sparse: incompatible types in comparison expression (different address spaces): drivers/block/drbd/drbd_sender.c:564:39: sparse: struct disk_conf [noderef] __rcu * drivers/block/drbd/drbd_sender.c:564:39: sparse: struct disk_conf * drivers/block/drbd/drbd_sender.c:999:22: sparse: sparse: incompatible types in comparison expression (different address spaces): drivers/block/drbd/drbd_sender.c:999:22: sparse: struct disk_conf [noderef] __rcu * drivers/block/drbd/drbd_sender.c:999:22: sparse: struct disk_conf * drivers/block/drbd/drbd_sender.c:1545:32: sparse: sparse: incompatible types in comparison expression (different address spaces): drivers/block/drbd/drbd_sender.c:1545:32: sparse: struct disk_conf [noderef] __rcu * drivers/block/drbd/drbd_sender.c:1545:32: sparse: struct disk_conf * drivers/block/drbd/drbd_sender.c:1654:32: sparse: sparse: incompatible types in comparison expression (different address spaces): drivers/block/drbd/drbd_sender.c:1654:32: sparse: struct disk_conf [noderef] __rcu * drivers/block/drbd/drbd_sender.c:1654:32: sparse: struct disk_conf * drivers/block/drbd/drbd_sender.c:1693:16: sparse: sparse: incompatible types in comparison expression (different address spaces): drivers/block/drbd/drbd_sender.c:1693:16: sparse: struct fifo_buffer [noderef] __rcu * drivers/block/drbd/drbd_sender.c:1693:16: sparse: struct fifo_buffer * drivers/block/drbd/drbd_sender.c:1722:34: sparse: sparse: incompatible types in comparison expression (different address spaces): >> drivers/block/drbd/drbd_sender.c:1722:34: sparse: struct net_conf [noderef] __rcu * >> drivers/block/drbd/drbd_sender.c:1722:34: sparse: struct net_conf * drivers/block/drbd/drbd_sender.c:1895:38: sparse: sparse: incompatible types in comparison expression (different address spaces): drivers/block/drbd/drbd_sender.c:1895:38: sparse: struct net_conf [noderef] __rcu * drivers/block/drbd/drbd_sender.c:1895:38: sparse: struct net_conf * drivers/block/drbd/drbd_sender.c:2102:14: sparse: sparse: incompatible types in comparison expression (different address spaces): drivers/block/drbd/drbd_sender.c:2102:14: sparse: struct net_conf [noderef] __rcu * drivers/block/drbd/drbd_sender.c:2102:14: sparse: struct net_conf * drivers/block/drbd/drbd_sender.c:2157:14: sparse: sparse: incompatible types in comparison expression (different address spaces): drivers/block/drbd/drbd_sender.c:2157:14: sparse: struct net_conf [noderef] __rcu * drivers/block/drbd/drbd_sender.c:2157:14: sparse: struct net_conf * drivers/block/drbd/drbd_sender.c:59:25: sparse: sparse: context imbalance in 'drbd_md_endio' - unexpected unlock drivers/block/drbd/drbd_sender.c: note: in included file: drivers/block/drbd/drbd_int.h:1661:14: sparse: sparse: incompatible types in comparison expression (different address spaces): drivers/block/drbd/drbd_int.h:1661:14: sparse: struct disk_conf [noderef] __rcu * drivers/block/drbd/drbd_int.h:1661:14: sparse: struct disk_conf * drivers/block/drbd/drbd_int.h:1661:14: sparse: sparse: incompatible types in comparison expression (different address spaces): drivers/block/drbd/drbd_int.h:1661:14: sparse: struct disk_conf [noderef] __rcu * drivers/block/drbd/drbd_int.h:1661:14: sparse: struct disk_conf * drivers/block/drbd/drbd_int.h:2073:14: sparse: sparse: incompatible types in comparison expression (different address spaces): drivers/block/drbd/drbd_int.h:2073:14: sparse: struct net_conf [noderef] __rcu * drivers/block/drbd/drbd_int.h:2073:14: sparse: struct net_conf * vim +618 drivers/block/drbd/drbd_sender.c 9958c857c760eec drivers/block/drbd/drbd_worker.c Philipp Reisner 2011-05-03 495 0d11f3cf279c5ad drivers/block/drbd/drbd_worker.c Christoph Böhmwalder 2023-03-30 496 static int drbd_rs_controller(struct drbd_peer_device *peer_device, unsigned int sect_in) 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 497 { 0d11f3cf279c5ad drivers/block/drbd/drbd_worker.c Christoph Böhmwalder 2023-03-30 498 struct drbd_device *device = peer_device->device; daeda1cca91d58b drivers/block/drbd/drbd_worker.c Philipp Reisner 2011-05-03 499 struct disk_conf *dc; 7f34f61490ee87a drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-22 500 unsigned int want; /* The number of sectors we want in-flight */ 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 501 int req_sect; /* Number of sectors to request in this turn */ 7f34f61490ee87a drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-22 502 int correction; /* Number of sectors more we need in-flight */ 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 503 int cps; /* correction per invocation of drbd_rs_controller() */ 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 504 int steps; /* Number of time steps to plan ahead */ 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 505 int curr_corr; 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 506 int max_sect; 813472ced7fac73 drivers/block/drbd/drbd_worker.c Philipp Reisner 2011-05-03 507 struct fifo_buffer *plan; 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 508 b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 509 dc = rcu_dereference(device->ldev->disk_conf); b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 @510 plan = rcu_dereference(device->rs_plan_s); 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 511 813472ced7fac73 drivers/block/drbd/drbd_worker.c Philipp Reisner 2011-05-03 512 steps = plan->size; /* (dc->c_plan_ahead * 10 * SLEEP_TIME) / HZ; */ 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 513 b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 514 if (device->rs_in_flight + sect_in == 0) { /* At start of resync */ daeda1cca91d58b drivers/block/drbd/drbd_worker.c Philipp Reisner 2011-05-03 515 want = ((dc->resync_rate * 2 * SLEEP_TIME) / HZ) * steps; 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 516 } else { /* normal path */ daeda1cca91d58b drivers/block/drbd/drbd_worker.c Philipp Reisner 2011-05-03 517 want = dc->c_fill_target ? dc->c_fill_target : daeda1cca91d58b drivers/block/drbd/drbd_worker.c Philipp Reisner 2011-05-03 518 sect_in * dc->c_delay_target * HZ / (SLEEP_TIME * 10); 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 519 } 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 520 b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 521 correction = want - device->rs_in_flight - plan->total; 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 522 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 523 /* Plan ahead */ 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 524 cps = correction / steps; 813472ced7fac73 drivers/block/drbd/drbd_worker.c Philipp Reisner 2011-05-03 525 fifo_add_val(plan, cps); 813472ced7fac73 drivers/block/drbd/drbd_worker.c Philipp Reisner 2011-05-03 526 plan->total += cps * steps; 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 527 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 528 /* What we do in this step */ 813472ced7fac73 drivers/block/drbd/drbd_worker.c Philipp Reisner 2011-05-03 529 curr_corr = fifo_push(plan, 0); 813472ced7fac73 drivers/block/drbd/drbd_worker.c Philipp Reisner 2011-05-03 530 plan->total -= curr_corr; 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 531 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 532 req_sect = sect_in + curr_corr; 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 533 if (req_sect < 0) 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 534 req_sect = 0; 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 535 daeda1cca91d58b drivers/block/drbd/drbd_worker.c Philipp Reisner 2011-05-03 536 max_sect = (dc->c_max_rate * 2 * SLEEP_TIME) / HZ; 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 537 if (req_sect > max_sect) 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 538 req_sect = max_sect; 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 539 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 540 /* d01801710265cfb drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 541 drbd_warn(device, "si=%u if=%d wa=%u co=%d st=%d cps=%d pl=%d cc=%d rs=%d\n", b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 542 sect_in, device->rs_in_flight, want, correction, b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 543 steps, cps, device->rs_planed, curr_corr, req_sect); 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 544 */ 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 545 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 546 return req_sect; 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 547 } 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 548 0d11f3cf279c5ad drivers/block/drbd/drbd_worker.c Christoph Böhmwalder 2023-03-30 549 static int drbd_rs_number_requests(struct drbd_peer_device *peer_device) e65f440d474d7d6 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-11-05 550 { 0d11f3cf279c5ad drivers/block/drbd/drbd_worker.c Christoph Böhmwalder 2023-03-30 551 struct drbd_device *device = peer_device->device; 0e49d7b014c5d59 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-28 552 unsigned int sect_in; /* Number of sectors that came in since the last turn */ 0e49d7b014c5d59 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-28 553 int number, mxb; 0e49d7b014c5d59 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-28 554 0e49d7b014c5d59 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-28 555 sect_in = atomic_xchg(&device->rs_sect_in, 0); 0e49d7b014c5d59 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-28 556 device->rs_in_flight -= sect_in; 813472ced7fac73 drivers/block/drbd/drbd_worker.c Philipp Reisner 2011-05-03 557 813472ced7fac73 drivers/block/drbd/drbd_worker.c Philipp Reisner 2011-05-03 558 rcu_read_lock(); 0e49d7b014c5d59 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-28 559 mxb = drbd_get_max_buffers(device) / 2; b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 560 if (rcu_dereference(device->rs_plan_s)->size) { 0d11f3cf279c5ad drivers/block/drbd/drbd_worker.c Christoph Böhmwalder 2023-03-30 561 number = drbd_rs_controller(peer_device, sect_in) >> (BM_BLOCK_SHIFT - 9); b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 562 device->c_sync_rate = number * HZ * (BM_BLOCK_SIZE / 1024) / SLEEP_TIME; e65f440d474d7d6 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-11-05 563 } else { b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 564 device->c_sync_rate = rcu_dereference(device->ldev->disk_conf)->resync_rate; b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 565 number = SLEEP_TIME * device->c_sync_rate / ((BM_BLOCK_SIZE / 1024) * HZ); e65f440d474d7d6 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-11-05 566 } 813472ced7fac73 drivers/block/drbd/drbd_worker.c Philipp Reisner 2011-05-03 567 rcu_read_unlock(); e65f440d474d7d6 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-11-05 568 0e49d7b014c5d59 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-28 569 /* Don't have more than "max-buffers"/2 in-flight. 0e49d7b014c5d59 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-28 570 * Otherwise we may cause the remote site to stall on drbd_alloc_pages(), 0e49d7b014c5d59 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-28 571 * potentially causing a distributed deadlock on congestion during 0e49d7b014c5d59 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-28 572 * online-verify or (checksum-based) resync, if max-buffers, 0e49d7b014c5d59 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-28 573 * socket buffer sizes and resync rate settings are mis-configured. */ 7f34f61490ee87a drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-22 574 7f34f61490ee87a drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-22 575 /* note that "number" is in units of "BM_BLOCK_SIZE" (which is 4k), 7f34f61490ee87a drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-22 576 * mxb (as used here, and in drbd_alloc_pages on the peer) is 7f34f61490ee87a drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-22 577 * "number of pages" (typically also 4k), 7f34f61490ee87a drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-22 578 * but "rs_in_flight" is in "sectors" (512 Byte). */ 7f34f61490ee87a drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-22 579 if (mxb - device->rs_in_flight/8 < number) 7f34f61490ee87a drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-22 580 number = mxb - device->rs_in_flight/8; 0e49d7b014c5d59 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-28 581 e65f440d474d7d6 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-11-05 582 return number; e65f440d474d7d6 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-11-05 583 } e65f440d474d7d6 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-11-05 584 0d11f3cf279c5ad drivers/block/drbd/drbd_worker.c Christoph Böhmwalder 2023-03-30 585 static int make_resync_request(struct drbd_peer_device *const peer_device, int cancel) b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 586 { 0d11f3cf279c5ad drivers/block/drbd/drbd_worker.c Christoph Böhmwalder 2023-03-30 587 struct drbd_device *const device = peer_device->device; 44a4d551846b8c6 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2013-11-22 588 struct drbd_connection *const connection = peer_device ? peer_device->connection : NULL; b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 589 unsigned long bit; b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 590 sector_t sector; 155bd9d1abd6049 drivers/block/drbd/drbd_worker.c Christoph Hellwig 2020-09-25 591 const sector_t capacity = get_capacity(device->vdisk); 1816a2b47afae83 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-11-11 592 int max_bio_size; e65f440d474d7d6 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-11-05 593 int number, rollback_i, size; 506afb6248af577 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 594 int align, requeue = 0; 0f0601f4ea2f53c drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-08-11 595 int i = 0; 92d94ae66aebda5 drivers/block/drbd/drbd_worker.c Philipp Reisner 2016-06-14 596 int discard_granularity = 0; b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 597 b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 598 if (unlikely(cancel)) 99920dc5c5fe521 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-03-16 599 return 0; b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 600 b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 601 if (device->rs_total == 0) { af85e8e83d160f7 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-10-07 602 /* empty resync? */ 0d11f3cf279c5ad drivers/block/drbd/drbd_worker.c Christoph Böhmwalder 2023-03-30 603 drbd_resync_finished(peer_device); 99920dc5c5fe521 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-03-16 604 return 0; af85e8e83d160f7 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-10-07 605 } af85e8e83d160f7 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-10-07 606 b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 607 if (!get_ldev(device)) { b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 608 /* Since we only need to access device->rsync a b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 609 get_ldev_if_state(device,D_FAILED) would be sufficient, but b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 610 to continue resync with a broken disk makes no sense at b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 611 all */ d01801710265cfb drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 612 drbd_err(device, "Disk broke down during resync!\n"); 99920dc5c5fe521 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-03-16 613 return 0; b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 614 } b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 615 9104d31a759fbad drivers/block/drbd/drbd_worker.c Lars Ellenberg 2016-06-14 616 if (connection->agreed_features & DRBD_FF_THIN_RESYNC) { 92d94ae66aebda5 drivers/block/drbd/drbd_worker.c Philipp Reisner 2016-06-14 617 rcu_read_lock(); 92d94ae66aebda5 drivers/block/drbd/drbd_worker.c Philipp Reisner 2016-06-14 @618 discard_granularity = rcu_dereference(device->ldev->disk_conf)->rs_discard_granularity; 92d94ae66aebda5 drivers/block/drbd/drbd_worker.c Philipp Reisner 2016-06-14 619 rcu_read_unlock(); 92d94ae66aebda5 drivers/block/drbd/drbd_worker.c Philipp Reisner 2016-06-14 620 } 92d94ae66aebda5 drivers/block/drbd/drbd_worker.c Philipp Reisner 2016-06-14 621 b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 622 max_bio_size = queue_max_hw_sectors(device->rq_queue) << 9; 0d11f3cf279c5ad drivers/block/drbd/drbd_worker.c Christoph Böhmwalder 2023-03-30 623 number = drbd_rs_number_requests(peer_device); 0e49d7b014c5d59 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-28 624 if (number <= 0) 0f0601f4ea2f53c drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-08-11 625 goto requeue; b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 626 b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 627 for (i = 0; i < number; i++) { 506afb6248af577 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 628 /* Stop generating RS requests when half of the send buffer is filled, 506afb6248af577 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 629 * but notify TCP that we'd like to have more space. */ 44a4d551846b8c6 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2013-11-22 630 mutex_lock(&connection->data.mutex); 44a4d551846b8c6 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2013-11-22 631 if (connection->data.socket) { 506afb6248af577 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 632 struct sock *sk = connection->data.socket->sk; 506afb6248af577 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 633 int queued = sk->sk_wmem_queued; 506afb6248af577 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 634 int sndbuf = sk->sk_sndbuf; 506afb6248af577 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 635 if (queued > sndbuf / 2) { 506afb6248af577 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 636 requeue = 1; 506afb6248af577 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 637 if (sk->sk_socket) 506afb6248af577 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 638 set_bit(SOCK_NOSPACE, &sk->sk_socket->flags); b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 639 } 506afb6248af577 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 640 } else 506afb6248af577 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 641 requeue = 1; 44a4d551846b8c6 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2013-11-22 642 mutex_unlock(&connection->data.mutex); 506afb6248af577 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 643 if (requeue) b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 644 goto requeue; b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 645 b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 646 next_sector: b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 647 size = BM_BLOCK_SIZE; b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 648 bit = drbd_bm_find_next(device, device->bm_resync_fo); b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 649 4b0715f09655e76 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-12-14 650 if (bit == DRBD_END_OF_BITMAP) { b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 651 device->bm_resync_fo = drbd_bm_bits(device); b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 652 put_ldev(device); 99920dc5c5fe521 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-03-16 653 return 0; b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 654 } b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 655 b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 656 sector = BM_BIT_TO_SECT(bit); b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 657 0d11f3cf279c5ad drivers/block/drbd/drbd_worker.c Christoph Böhmwalder 2023-03-30 658 if (drbd_try_rs_begin_io(peer_device, sector)) { b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 659 device->bm_resync_fo = bit; b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 660 goto requeue; b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 661 } b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 662 device->bm_resync_fo = bit + 1; b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 663 b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 664 if (unlikely(drbd_bm_test_bit(device, bit) == 0)) { b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 665 drbd_rs_complete_io(device, sector); b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 666 goto next_sector; b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 667 } b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 668 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Drbd-dev] [PATCH 1/5] drbd: Rename per-connection "worker" thread to "sender" @ 2023-09-29 12:04 ` kernel test robot 0 siblings, 0 replies; 15+ messages in thread From: kernel test robot @ 2023-09-29 12:04 UTC (permalink / raw) To: Christoph Böhmwalder, Jens Axboe Cc: Lars Ellenberg, linux-kernel, Philipp Reisner, linux-block, oe-kbuild-all, Christoph Hellwig, drbd-dev Hi Christoph, kernel test robot noticed the following build warnings: [auto build test WARNING on aa511ff8218b3fb328181fbaac48aa5e9c5c6d93] url: https://github.com/intel-lab-lkp/linux/commits/Christoph-B-hmwalder/drbd-Rename-per-connection-worker-thread-to-sender/20230928-174054 base: aa511ff8218b3fb328181fbaac48aa5e9c5c6d93 patch link: https://lore.kernel.org/r/20230928093852.676786-2-christoph.boehmwalder%40linbit.com patch subject: [PATCH 1/5] drbd: Rename per-connection "worker" thread to "sender" config: i386-randconfig-061-20230929 (https://download.01.org/0day-ci/archive/20230929/202309291915.sFSScoxj-lkp@intel.com/config) compiler: gcc-12 (Debian 12.2.0-14) 12.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20230929/202309291915.sFSScoxj-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202309291915.sFSScoxj-lkp@intel.com/ sparse warnings: (new ones prefixed by >>) >> drivers/block/drbd/drbd_sender.c:618:39: sparse: sparse: incompatible types in comparison expression (different address spaces): >> drivers/block/drbd/drbd_sender.c:618:39: sparse: struct disk_conf [noderef] __rcu * >> drivers/block/drbd/drbd_sender.c:618:39: sparse: struct disk_conf * drivers/block/drbd/drbd_sender.c:509:14: sparse: sparse: incompatible types in comparison expression (different address spaces): drivers/block/drbd/drbd_sender.c:509:14: sparse: struct disk_conf [noderef] __rcu * drivers/block/drbd/drbd_sender.c:509:14: sparse: struct disk_conf * drivers/block/drbd/drbd_sender.c:510:16: sparse: sparse: incompatible types in comparison expression (different address spaces): >> drivers/block/drbd/drbd_sender.c:510:16: sparse: struct fifo_buffer [noderef] __rcu * >> drivers/block/drbd/drbd_sender.c:510:16: sparse: struct fifo_buffer * drivers/block/drbd/drbd_sender.c:560:13: sparse: sparse: incompatible types in comparison expression (different address spaces): drivers/block/drbd/drbd_sender.c:560:13: sparse: struct fifo_buffer [noderef] __rcu * drivers/block/drbd/drbd_sender.c:560:13: sparse: struct fifo_buffer * drivers/block/drbd/drbd_sender.c:564:39: sparse: sparse: incompatible types in comparison expression (different address spaces): drivers/block/drbd/drbd_sender.c:564:39: sparse: struct disk_conf [noderef] __rcu * drivers/block/drbd/drbd_sender.c:564:39: sparse: struct disk_conf * drivers/block/drbd/drbd_sender.c:999:22: sparse: sparse: incompatible types in comparison expression (different address spaces): drivers/block/drbd/drbd_sender.c:999:22: sparse: struct disk_conf [noderef] __rcu * drivers/block/drbd/drbd_sender.c:999:22: sparse: struct disk_conf * drivers/block/drbd/drbd_sender.c:1545:32: sparse: sparse: incompatible types in comparison expression (different address spaces): drivers/block/drbd/drbd_sender.c:1545:32: sparse: struct disk_conf [noderef] __rcu * drivers/block/drbd/drbd_sender.c:1545:32: sparse: struct disk_conf * drivers/block/drbd/drbd_sender.c:1654:32: sparse: sparse: incompatible types in comparison expression (different address spaces): drivers/block/drbd/drbd_sender.c:1654:32: sparse: struct disk_conf [noderef] __rcu * drivers/block/drbd/drbd_sender.c:1654:32: sparse: struct disk_conf * drivers/block/drbd/drbd_sender.c:1693:16: sparse: sparse: incompatible types in comparison expression (different address spaces): drivers/block/drbd/drbd_sender.c:1693:16: sparse: struct fifo_buffer [noderef] __rcu * drivers/block/drbd/drbd_sender.c:1693:16: sparse: struct fifo_buffer * drivers/block/drbd/drbd_sender.c:1722:34: sparse: sparse: incompatible types in comparison expression (different address spaces): >> drivers/block/drbd/drbd_sender.c:1722:34: sparse: struct net_conf [noderef] __rcu * >> drivers/block/drbd/drbd_sender.c:1722:34: sparse: struct net_conf * drivers/block/drbd/drbd_sender.c:1895:38: sparse: sparse: incompatible types in comparison expression (different address spaces): drivers/block/drbd/drbd_sender.c:1895:38: sparse: struct net_conf [noderef] __rcu * drivers/block/drbd/drbd_sender.c:1895:38: sparse: struct net_conf * drivers/block/drbd/drbd_sender.c:2102:14: sparse: sparse: incompatible types in comparison expression (different address spaces): drivers/block/drbd/drbd_sender.c:2102:14: sparse: struct net_conf [noderef] __rcu * drivers/block/drbd/drbd_sender.c:2102:14: sparse: struct net_conf * drivers/block/drbd/drbd_sender.c:2157:14: sparse: sparse: incompatible types in comparison expression (different address spaces): drivers/block/drbd/drbd_sender.c:2157:14: sparse: struct net_conf [noderef] __rcu * drivers/block/drbd/drbd_sender.c:2157:14: sparse: struct net_conf * drivers/block/drbd/drbd_sender.c:59:25: sparse: sparse: context imbalance in 'drbd_md_endio' - unexpected unlock drivers/block/drbd/drbd_sender.c: note: in included file: drivers/block/drbd/drbd_int.h:1661:14: sparse: sparse: incompatible types in comparison expression (different address spaces): drivers/block/drbd/drbd_int.h:1661:14: sparse: struct disk_conf [noderef] __rcu * drivers/block/drbd/drbd_int.h:1661:14: sparse: struct disk_conf * drivers/block/drbd/drbd_int.h:1661:14: sparse: sparse: incompatible types in comparison expression (different address spaces): drivers/block/drbd/drbd_int.h:1661:14: sparse: struct disk_conf [noderef] __rcu * drivers/block/drbd/drbd_int.h:1661:14: sparse: struct disk_conf * drivers/block/drbd/drbd_int.h:2073:14: sparse: sparse: incompatible types in comparison expression (different address spaces): drivers/block/drbd/drbd_int.h:2073:14: sparse: struct net_conf [noderef] __rcu * drivers/block/drbd/drbd_int.h:2073:14: sparse: struct net_conf * vim +618 drivers/block/drbd/drbd_sender.c 9958c857c760eec drivers/block/drbd/drbd_worker.c Philipp Reisner 2011-05-03 495 0d11f3cf279c5ad drivers/block/drbd/drbd_worker.c Christoph Böhmwalder 2023-03-30 496 static int drbd_rs_controller(struct drbd_peer_device *peer_device, unsigned int sect_in) 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 497 { 0d11f3cf279c5ad drivers/block/drbd/drbd_worker.c Christoph Böhmwalder 2023-03-30 498 struct drbd_device *device = peer_device->device; daeda1cca91d58b drivers/block/drbd/drbd_worker.c Philipp Reisner 2011-05-03 499 struct disk_conf *dc; 7f34f61490ee87a drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-22 500 unsigned int want; /* The number of sectors we want in-flight */ 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 501 int req_sect; /* Number of sectors to request in this turn */ 7f34f61490ee87a drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-22 502 int correction; /* Number of sectors more we need in-flight */ 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 503 int cps; /* correction per invocation of drbd_rs_controller() */ 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 504 int steps; /* Number of time steps to plan ahead */ 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 505 int curr_corr; 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 506 int max_sect; 813472ced7fac73 drivers/block/drbd/drbd_worker.c Philipp Reisner 2011-05-03 507 struct fifo_buffer *plan; 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 508 b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 509 dc = rcu_dereference(device->ldev->disk_conf); b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 @510 plan = rcu_dereference(device->rs_plan_s); 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 511 813472ced7fac73 drivers/block/drbd/drbd_worker.c Philipp Reisner 2011-05-03 512 steps = plan->size; /* (dc->c_plan_ahead * 10 * SLEEP_TIME) / HZ; */ 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 513 b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 514 if (device->rs_in_flight + sect_in == 0) { /* At start of resync */ daeda1cca91d58b drivers/block/drbd/drbd_worker.c Philipp Reisner 2011-05-03 515 want = ((dc->resync_rate * 2 * SLEEP_TIME) / HZ) * steps; 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 516 } else { /* normal path */ daeda1cca91d58b drivers/block/drbd/drbd_worker.c Philipp Reisner 2011-05-03 517 want = dc->c_fill_target ? dc->c_fill_target : daeda1cca91d58b drivers/block/drbd/drbd_worker.c Philipp Reisner 2011-05-03 518 sect_in * dc->c_delay_target * HZ / (SLEEP_TIME * 10); 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 519 } 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 520 b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 521 correction = want - device->rs_in_flight - plan->total; 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 522 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 523 /* Plan ahead */ 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 524 cps = correction / steps; 813472ced7fac73 drivers/block/drbd/drbd_worker.c Philipp Reisner 2011-05-03 525 fifo_add_val(plan, cps); 813472ced7fac73 drivers/block/drbd/drbd_worker.c Philipp Reisner 2011-05-03 526 plan->total += cps * steps; 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 527 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 528 /* What we do in this step */ 813472ced7fac73 drivers/block/drbd/drbd_worker.c Philipp Reisner 2011-05-03 529 curr_corr = fifo_push(plan, 0); 813472ced7fac73 drivers/block/drbd/drbd_worker.c Philipp Reisner 2011-05-03 530 plan->total -= curr_corr; 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 531 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 532 req_sect = sect_in + curr_corr; 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 533 if (req_sect < 0) 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 534 req_sect = 0; 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 535 daeda1cca91d58b drivers/block/drbd/drbd_worker.c Philipp Reisner 2011-05-03 536 max_sect = (dc->c_max_rate * 2 * SLEEP_TIME) / HZ; 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 537 if (req_sect > max_sect) 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 538 req_sect = max_sect; 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 539 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 540 /* d01801710265cfb drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 541 drbd_warn(device, "si=%u if=%d wa=%u co=%d st=%d cps=%d pl=%d cc=%d rs=%d\n", b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 542 sect_in, device->rs_in_flight, want, correction, b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 543 steps, cps, device->rs_planed, curr_corr, req_sect); 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 544 */ 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 545 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 546 return req_sect; 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 547 } 778f271dfe7a717 drivers/block/drbd/drbd_worker.c Philipp Reisner 2010-07-06 548 0d11f3cf279c5ad drivers/block/drbd/drbd_worker.c Christoph Böhmwalder 2023-03-30 549 static int drbd_rs_number_requests(struct drbd_peer_device *peer_device) e65f440d474d7d6 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-11-05 550 { 0d11f3cf279c5ad drivers/block/drbd/drbd_worker.c Christoph Böhmwalder 2023-03-30 551 struct drbd_device *device = peer_device->device; 0e49d7b014c5d59 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-28 552 unsigned int sect_in; /* Number of sectors that came in since the last turn */ 0e49d7b014c5d59 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-28 553 int number, mxb; 0e49d7b014c5d59 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-28 554 0e49d7b014c5d59 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-28 555 sect_in = atomic_xchg(&device->rs_sect_in, 0); 0e49d7b014c5d59 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-28 556 device->rs_in_flight -= sect_in; 813472ced7fac73 drivers/block/drbd/drbd_worker.c Philipp Reisner 2011-05-03 557 813472ced7fac73 drivers/block/drbd/drbd_worker.c Philipp Reisner 2011-05-03 558 rcu_read_lock(); 0e49d7b014c5d59 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-28 559 mxb = drbd_get_max_buffers(device) / 2; b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 560 if (rcu_dereference(device->rs_plan_s)->size) { 0d11f3cf279c5ad drivers/block/drbd/drbd_worker.c Christoph Böhmwalder 2023-03-30 561 number = drbd_rs_controller(peer_device, sect_in) >> (BM_BLOCK_SHIFT - 9); b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 562 device->c_sync_rate = number * HZ * (BM_BLOCK_SIZE / 1024) / SLEEP_TIME; e65f440d474d7d6 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-11-05 563 } else { b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 564 device->c_sync_rate = rcu_dereference(device->ldev->disk_conf)->resync_rate; b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 565 number = SLEEP_TIME * device->c_sync_rate / ((BM_BLOCK_SIZE / 1024) * HZ); e65f440d474d7d6 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-11-05 566 } 813472ced7fac73 drivers/block/drbd/drbd_worker.c Philipp Reisner 2011-05-03 567 rcu_read_unlock(); e65f440d474d7d6 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-11-05 568 0e49d7b014c5d59 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-28 569 /* Don't have more than "max-buffers"/2 in-flight. 0e49d7b014c5d59 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-28 570 * Otherwise we may cause the remote site to stall on drbd_alloc_pages(), 0e49d7b014c5d59 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-28 571 * potentially causing a distributed deadlock on congestion during 0e49d7b014c5d59 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-28 572 * online-verify or (checksum-based) resync, if max-buffers, 0e49d7b014c5d59 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-28 573 * socket buffer sizes and resync rate settings are mis-configured. */ 7f34f61490ee87a drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-22 574 7f34f61490ee87a drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-22 575 /* note that "number" is in units of "BM_BLOCK_SIZE" (which is 4k), 7f34f61490ee87a drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-22 576 * mxb (as used here, and in drbd_alloc_pages on the peer) is 7f34f61490ee87a drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-22 577 * "number of pages" (typically also 4k), 7f34f61490ee87a drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-22 578 * but "rs_in_flight" is in "sectors" (512 Byte). */ 7f34f61490ee87a drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-22 579 if (mxb - device->rs_in_flight/8 < number) 7f34f61490ee87a drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-22 580 number = mxb - device->rs_in_flight/8; 0e49d7b014c5d59 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-28 581 e65f440d474d7d6 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-11-05 582 return number; e65f440d474d7d6 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-11-05 583 } e65f440d474d7d6 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-11-05 584 0d11f3cf279c5ad drivers/block/drbd/drbd_worker.c Christoph Böhmwalder 2023-03-30 585 static int make_resync_request(struct drbd_peer_device *const peer_device, int cancel) b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 586 { 0d11f3cf279c5ad drivers/block/drbd/drbd_worker.c Christoph Böhmwalder 2023-03-30 587 struct drbd_device *const device = peer_device->device; 44a4d551846b8c6 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2013-11-22 588 struct drbd_connection *const connection = peer_device ? peer_device->connection : NULL; b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 589 unsigned long bit; b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 590 sector_t sector; 155bd9d1abd6049 drivers/block/drbd/drbd_worker.c Christoph Hellwig 2020-09-25 591 const sector_t capacity = get_capacity(device->vdisk); 1816a2b47afae83 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-11-11 592 int max_bio_size; e65f440d474d7d6 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-11-05 593 int number, rollback_i, size; 506afb6248af577 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 594 int align, requeue = 0; 0f0601f4ea2f53c drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-08-11 595 int i = 0; 92d94ae66aebda5 drivers/block/drbd/drbd_worker.c Philipp Reisner 2016-06-14 596 int discard_granularity = 0; b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 597 b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 598 if (unlikely(cancel)) 99920dc5c5fe521 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-03-16 599 return 0; b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 600 b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 601 if (device->rs_total == 0) { af85e8e83d160f7 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-10-07 602 /* empty resync? */ 0d11f3cf279c5ad drivers/block/drbd/drbd_worker.c Christoph Böhmwalder 2023-03-30 603 drbd_resync_finished(peer_device); 99920dc5c5fe521 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-03-16 604 return 0; af85e8e83d160f7 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-10-07 605 } af85e8e83d160f7 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-10-07 606 b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 607 if (!get_ldev(device)) { b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 608 /* Since we only need to access device->rsync a b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 609 get_ldev_if_state(device,D_FAILED) would be sufficient, but b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 610 to continue resync with a broken disk makes no sense at b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 611 all */ d01801710265cfb drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 612 drbd_err(device, "Disk broke down during resync!\n"); 99920dc5c5fe521 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-03-16 613 return 0; b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 614 } b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 615 9104d31a759fbad drivers/block/drbd/drbd_worker.c Lars Ellenberg 2016-06-14 616 if (connection->agreed_features & DRBD_FF_THIN_RESYNC) { 92d94ae66aebda5 drivers/block/drbd/drbd_worker.c Philipp Reisner 2016-06-14 617 rcu_read_lock(); 92d94ae66aebda5 drivers/block/drbd/drbd_worker.c Philipp Reisner 2016-06-14 @618 discard_granularity = rcu_dereference(device->ldev->disk_conf)->rs_discard_granularity; 92d94ae66aebda5 drivers/block/drbd/drbd_worker.c Philipp Reisner 2016-06-14 619 rcu_read_unlock(); 92d94ae66aebda5 drivers/block/drbd/drbd_worker.c Philipp Reisner 2016-06-14 620 } 92d94ae66aebda5 drivers/block/drbd/drbd_worker.c Philipp Reisner 2016-06-14 621 b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 622 max_bio_size = queue_max_hw_sectors(device->rq_queue) << 9; 0d11f3cf279c5ad drivers/block/drbd/drbd_worker.c Christoph Böhmwalder 2023-03-30 623 number = drbd_rs_number_requests(peer_device); 0e49d7b014c5d59 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-28 624 if (number <= 0) 0f0601f4ea2f53c drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-08-11 625 goto requeue; b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 626 b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 627 for (i = 0; i < number; i++) { 506afb6248af577 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 628 /* Stop generating RS requests when half of the send buffer is filled, 506afb6248af577 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 629 * but notify TCP that we'd like to have more space. */ 44a4d551846b8c6 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2013-11-22 630 mutex_lock(&connection->data.mutex); 44a4d551846b8c6 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2013-11-22 631 if (connection->data.socket) { 506afb6248af577 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 632 struct sock *sk = connection->data.socket->sk; 506afb6248af577 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 633 int queued = sk->sk_wmem_queued; 506afb6248af577 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 634 int sndbuf = sk->sk_sndbuf; 506afb6248af577 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 635 if (queued > sndbuf / 2) { 506afb6248af577 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 636 requeue = 1; 506afb6248af577 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 637 if (sk->sk_socket) 506afb6248af577 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 638 set_bit(SOCK_NOSPACE, &sk->sk_socket->flags); b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 639 } 506afb6248af577 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 640 } else 506afb6248af577 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 641 requeue = 1; 44a4d551846b8c6 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2013-11-22 642 mutex_unlock(&connection->data.mutex); 506afb6248af577 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 643 if (requeue) b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 644 goto requeue; b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 645 b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 646 next_sector: b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 647 size = BM_BLOCK_SIZE; b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 648 bit = drbd_bm_find_next(device, device->bm_resync_fo); b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 649 4b0715f09655e76 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-12-14 650 if (bit == DRBD_END_OF_BITMAP) { b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 651 device->bm_resync_fo = drbd_bm_bits(device); b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 652 put_ldev(device); 99920dc5c5fe521 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-03-16 653 return 0; b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 654 } b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 655 b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 656 sector = BM_BIT_TO_SECT(bit); b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 657 0d11f3cf279c5ad drivers/block/drbd/drbd_worker.c Christoph Böhmwalder 2023-03-30 658 if (drbd_try_rs_begin_io(peer_device, sector)) { b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 659 device->bm_resync_fo = bit; b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 660 goto requeue; b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 661 } b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 662 device->bm_resync_fo = bit + 1; b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 663 b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 664 if (unlikely(drbd_bm_test_bit(device, bit) == 0)) { b30ab7913b0a7b1 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 665 drbd_rs_complete_io(device, sector); b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 666 goto next_sector; b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 667 } b411b3637fa71fc drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 668 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 2/5] drbd: Add new per-resource "worker" thread 2023-09-28 9:38 ` [Drbd-dev] " Christoph Böhmwalder @ 2023-09-28 9:38 ` Christoph Böhmwalder -1 siblings, 0 replies; 15+ messages in thread From: Christoph Böhmwalder @ 2023-09-28 9:38 UTC (permalink / raw) To: Jens Axboe Cc: Philipp Reisner, Lars Ellenberg, drbd-dev, linux-block, linux-kernel, Christoph Hellwig, Joel Colledge, Christoph Böhmwalder Out-of-tree fixes folded in: - drbd: allow to dequeue batches of work at a time (partial backport) - drbd: Keep "worker" alive while resource exists - Flush the work queue before stopping the worker thread Originally-from: Andreas Gruenbacher <agruen@linbit.com> Reviewed-by: Joel Colledge <joel.colledge@linbit.com> Signed-off-by: Christoph Böhmwalder <christoph.boehmwalder@linbit.com> --- drivers/block/drbd/drbd_int.h | 4 +++ drivers/block/drbd/drbd_main.c | 5 ++++ drivers/block/drbd/drbd_nl.c | 2 +- drivers/block/drbd/drbd_sender.c | 46 ++++++++++++++++++++++++++++++++ 4 files changed, 56 insertions(+), 1 deletion(-) diff --git a/drivers/block/drbd/drbd_int.h b/drivers/block/drbd/drbd_int.h index a53e63af23f1..fe7e93a4dfa6 100644 --- a/drivers/block/drbd/drbd_int.h +++ b/drivers/block/drbd/drbd_int.h @@ -603,6 +603,9 @@ struct drbd_resource { enum write_ordering_e write_ordering; cpumask_var_t cpu_mask; + + struct drbd_work_queue work; + struct drbd_thread worker; }; struct drbd_thread_timing_details @@ -1428,6 +1431,7 @@ extern void drbd_md_endio(struct bio *bio); extern void drbd_peer_request_endio(struct bio *bio); extern void drbd_request_endio(struct bio *bio); extern int drbd_sender(struct drbd_thread *thi); +extern int drbd_worker(struct drbd_thread *thi); enum drbd_ret_code drbd_resync_after_valid(struct drbd_device *device, int o_minor); void drbd_resync_after_changed(struct drbd_device *device); extern void drbd_start_resync(struct drbd_device *device, enum drbd_conns side); diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c index a14c1e9ee327..bb5de1e1ca9f 100644 --- a/drivers/block/drbd/drbd_main.c +++ b/drivers/block/drbd/drbd_main.c @@ -2329,6 +2329,8 @@ void drbd_free_resource(struct drbd_resource *resource) { struct drbd_connection *connection, *tmp; + drbd_flush_workqueue(&resource->work); + drbd_thread_stop(&resource->worker); for_each_connection_safe(connection, tmp, resource) { list_del(&connection->connections); drbd_debugfs_connection_cleanup(connection); @@ -2564,6 +2566,9 @@ struct drbd_resource *drbd_create_resource(const char *name) mutex_init(&resource->conf_update); mutex_init(&resource->adm_mutex); spin_lock_init(&resource->req_lock); + drbd_init_workqueue(&resource->work); + drbd_thread_init(resource, &resource->worker, drbd_worker, "worker"); + drbd_thread_start(&resource->worker); drbd_debugfs_resource_add(resource); return resource; diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c index a5844819d1c3..9d9ced46f968 100644 --- a/drivers/block/drbd/drbd_nl.c +++ b/drivers/block/drbd/drbd_nl.c @@ -1900,7 +1900,7 @@ int drbd_adm_attach(struct sk_buff *skb, struct genl_info *info) */ wait_event(device->misc_wait, !atomic_read(&device->ap_pending_cnt) || drbd_suspended(device)); /* and for any other previously queued work */ - drbd_flush_workqueue(&connection->sender_work); + drbd_flush_workqueue(&device->resource->work); rv = _drbd_request_state(device, NS(disk, D_ATTACHING), CS_VERBOSE); retcode = (enum drbd_ret_code)rv; diff --git a/drivers/block/drbd/drbd_sender.c b/drivers/block/drbd/drbd_sender.c index fcc8a43efdca..0c482d45a52a 100644 --- a/drivers/block/drbd/drbd_sender.c +++ b/drivers/block/drbd/drbd_sender.c @@ -2239,3 +2239,49 @@ int drbd_sender(struct drbd_thread *thi) return 0; } + +int drbd_worker(struct drbd_thread *thi) +{ + LIST_HEAD(work_list); + struct drbd_resource *resource = thi->resource; + struct drbd_work *w; + + while (get_t_state(thi) == RUNNING) { + drbd_thread_current_set_cpu(thi); + + if (list_empty(&work_list)) { + wait_event_interruptible(resource->work.q_wait, + dequeue_work_batch(&resource->work, &work_list)); + } + + if (signal_pending(current)) { + flush_signals(current); + if (get_t_state(thi) == RUNNING) { + drbd_warn(resource, "Worker got an unexpected signal\n"); + continue; + } + break; + } + + if (get_t_state(thi) != RUNNING) + break; + + + while (!list_empty(&work_list)) { + w = list_first_entry(&work_list, struct drbd_work, list); + list_del_init(&w->list); + w->cb(w, 0); + } + } + + do { + while (!list_empty(&work_list)) { + w = list_first_entry(&work_list, struct drbd_work, list); + list_del_init(&w->list); + w->cb(w, 1); + } + dequeue_work_batch(&resource->work, &work_list); + } while (!list_empty(&work_list)); + + return 0; +} -- 2.41.0 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [Drbd-dev] [PATCH 2/5] drbd: Add new per-resource "worker" thread @ 2023-09-28 9:38 ` Christoph Böhmwalder 0 siblings, 0 replies; 15+ messages in thread From: Christoph Böhmwalder @ 2023-09-28 9:38 UTC (permalink / raw) To: Jens Axboe Cc: Lars Ellenberg, linux-kernel, Philipp Reisner, linux-block, Christoph Hellwig, drbd-dev Out-of-tree fixes folded in: - drbd: allow to dequeue batches of work at a time (partial backport) - drbd: Keep "worker" alive while resource exists - Flush the work queue before stopping the worker thread Originally-from: Andreas Gruenbacher <agruen@linbit.com> Reviewed-by: Joel Colledge <joel.colledge@linbit.com> Signed-off-by: Christoph Böhmwalder <christoph.boehmwalder@linbit.com> --- drivers/block/drbd/drbd_int.h | 4 +++ drivers/block/drbd/drbd_main.c | 5 ++++ drivers/block/drbd/drbd_nl.c | 2 +- drivers/block/drbd/drbd_sender.c | 46 ++++++++++++++++++++++++++++++++ 4 files changed, 56 insertions(+), 1 deletion(-) diff --git a/drivers/block/drbd/drbd_int.h b/drivers/block/drbd/drbd_int.h index a53e63af23f1..fe7e93a4dfa6 100644 --- a/drivers/block/drbd/drbd_int.h +++ b/drivers/block/drbd/drbd_int.h @@ -603,6 +603,9 @@ struct drbd_resource { enum write_ordering_e write_ordering; cpumask_var_t cpu_mask; + + struct drbd_work_queue work; + struct drbd_thread worker; }; struct drbd_thread_timing_details @@ -1428,6 +1431,7 @@ extern void drbd_md_endio(struct bio *bio); extern void drbd_peer_request_endio(struct bio *bio); extern void drbd_request_endio(struct bio *bio); extern int drbd_sender(struct drbd_thread *thi); +extern int drbd_worker(struct drbd_thread *thi); enum drbd_ret_code drbd_resync_after_valid(struct drbd_device *device, int o_minor); void drbd_resync_after_changed(struct drbd_device *device); extern void drbd_start_resync(struct drbd_device *device, enum drbd_conns side); diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c index a14c1e9ee327..bb5de1e1ca9f 100644 --- a/drivers/block/drbd/drbd_main.c +++ b/drivers/block/drbd/drbd_main.c @@ -2329,6 +2329,8 @@ void drbd_free_resource(struct drbd_resource *resource) { struct drbd_connection *connection, *tmp; + drbd_flush_workqueue(&resource->work); + drbd_thread_stop(&resource->worker); for_each_connection_safe(connection, tmp, resource) { list_del(&connection->connections); drbd_debugfs_connection_cleanup(connection); @@ -2564,6 +2566,9 @@ struct drbd_resource *drbd_create_resource(const char *name) mutex_init(&resource->conf_update); mutex_init(&resource->adm_mutex); spin_lock_init(&resource->req_lock); + drbd_init_workqueue(&resource->work); + drbd_thread_init(resource, &resource->worker, drbd_worker, "worker"); + drbd_thread_start(&resource->worker); drbd_debugfs_resource_add(resource); return resource; diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c index a5844819d1c3..9d9ced46f968 100644 --- a/drivers/block/drbd/drbd_nl.c +++ b/drivers/block/drbd/drbd_nl.c @@ -1900,7 +1900,7 @@ int drbd_adm_attach(struct sk_buff *skb, struct genl_info *info) */ wait_event(device->misc_wait, !atomic_read(&device->ap_pending_cnt) || drbd_suspended(device)); /* and for any other previously queued work */ - drbd_flush_workqueue(&connection->sender_work); + drbd_flush_workqueue(&device->resource->work); rv = _drbd_request_state(device, NS(disk, D_ATTACHING), CS_VERBOSE); retcode = (enum drbd_ret_code)rv; diff --git a/drivers/block/drbd/drbd_sender.c b/drivers/block/drbd/drbd_sender.c index fcc8a43efdca..0c482d45a52a 100644 --- a/drivers/block/drbd/drbd_sender.c +++ b/drivers/block/drbd/drbd_sender.c @@ -2239,3 +2239,49 @@ int drbd_sender(struct drbd_thread *thi) return 0; } + +int drbd_worker(struct drbd_thread *thi) +{ + LIST_HEAD(work_list); + struct drbd_resource *resource = thi->resource; + struct drbd_work *w; + + while (get_t_state(thi) == RUNNING) { + drbd_thread_current_set_cpu(thi); + + if (list_empty(&work_list)) { + wait_event_interruptible(resource->work.q_wait, + dequeue_work_batch(&resource->work, &work_list)); + } + + if (signal_pending(current)) { + flush_signals(current); + if (get_t_state(thi) == RUNNING) { + drbd_warn(resource, "Worker got an unexpected signal\n"); + continue; + } + break; + } + + if (get_t_state(thi) != RUNNING) + break; + + + while (!list_empty(&work_list)) { + w = list_first_entry(&work_list, struct drbd_work, list); + list_del_init(&w->list); + w->cb(w, 0); + } + } + + do { + while (!list_empty(&work_list)) { + w = list_first_entry(&work_list, struct drbd_work, list); + list_del_init(&w->list); + w->cb(w, 1); + } + dequeue_work_batch(&resource->work, &work_list); + } while (!list_empty(&work_list)); + + return 0; +} -- 2.41.0 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 3/5] drbd: Move connection independent work from "sender" to "worker" 2023-09-28 9:38 ` [Drbd-dev] " Christoph Böhmwalder @ 2023-09-28 9:38 ` Christoph Böhmwalder -1 siblings, 0 replies; 15+ messages in thread From: Christoph Böhmwalder @ 2023-09-28 9:38 UTC (permalink / raw) To: Jens Axboe Cc: Philipp Reisner, Lars Ellenberg, drbd-dev, linux-block, linux-kernel, Christoph Hellwig, Joel Colledge, Christoph Böhmwalder Originally-from: Andreas Gruenbacher <agruen@linbit.com> Reviewed-by: Joel Colledge <joel.colledge@linbit.com> Signed-off-by: Christoph Böhmwalder <christoph.boehmwalder@linbit.com> --- drivers/block/drbd/drbd_receiver.c | 2 +- drivers/block/drbd/drbd_req.c | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c index 0c9f54197768..6e21df44b5aa 100644 --- a/drivers/block/drbd/drbd_receiver.c +++ b/drivers/block/drbd/drbd_receiver.c @@ -5890,7 +5890,7 @@ static int got_OVResult(struct drbd_connection *connection, struct packet_info * if (dw) { dw->w.cb = w_ov_finished; dw->device = device; - drbd_queue_work(&peer_device->connection->sender_work, &dw->w); + drbd_queue_work(&device->resource->work, &dw->w); } else { drbd_err(device, "kmalloc(dw) failed."); ov_out_of_sync_print(peer_device); diff --git a/drivers/block/drbd/drbd_req.c b/drivers/block/drbd/drbd_req.c index cd56fd0f3b06..fbb47138a52b 100644 --- a/drivers/block/drbd/drbd_req.c +++ b/drivers/block/drbd/drbd_req.c @@ -823,8 +823,7 @@ int __req_mod(struct drbd_request *req, enum drbd_req_event what, get_ldev(device); /* always succeeds in this call path */ req->w.cb = w_restart_disk_io; - drbd_queue_work(&connection->sender_work, - &req->w); + drbd_queue_work(&device->resource->work, &req->w); break; case RESEND: -- 2.41.0 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [Drbd-dev] [PATCH 3/5] drbd: Move connection independent work from "sender" to "worker" @ 2023-09-28 9:38 ` Christoph Böhmwalder 0 siblings, 0 replies; 15+ messages in thread From: Christoph Böhmwalder @ 2023-09-28 9:38 UTC (permalink / raw) To: Jens Axboe Cc: Lars Ellenberg, linux-kernel, Philipp Reisner, linux-block, Christoph Hellwig, drbd-dev Originally-from: Andreas Gruenbacher <agruen@linbit.com> Reviewed-by: Joel Colledge <joel.colledge@linbit.com> Signed-off-by: Christoph Böhmwalder <christoph.boehmwalder@linbit.com> --- drivers/block/drbd/drbd_receiver.c | 2 +- drivers/block/drbd/drbd_req.c | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c index 0c9f54197768..6e21df44b5aa 100644 --- a/drivers/block/drbd/drbd_receiver.c +++ b/drivers/block/drbd/drbd_receiver.c @@ -5890,7 +5890,7 @@ static int got_OVResult(struct drbd_connection *connection, struct packet_info * if (dw) { dw->w.cb = w_ov_finished; dw->device = device; - drbd_queue_work(&peer_device->connection->sender_work, &dw->w); + drbd_queue_work(&device->resource->work, &dw->w); } else { drbd_err(device, "kmalloc(dw) failed."); ov_out_of_sync_print(peer_device); diff --git a/drivers/block/drbd/drbd_req.c b/drivers/block/drbd/drbd_req.c index cd56fd0f3b06..fbb47138a52b 100644 --- a/drivers/block/drbd/drbd_req.c +++ b/drivers/block/drbd/drbd_req.c @@ -823,8 +823,7 @@ int __req_mod(struct drbd_request *req, enum drbd_req_event what, get_ldev(device); /* always succeeds in this call path */ req->w.cb = w_restart_disk_io; - drbd_queue_work(&connection->sender_work, - &req->w); + drbd_queue_work(&device->resource->work, &req->w); break; case RESEND: -- 2.41.0 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 4/5] drbd: Keep connection threads running while connection is up only 2023-09-28 9:38 ` [Drbd-dev] " Christoph Böhmwalder @ 2023-09-28 9:38 ` Christoph Böhmwalder -1 siblings, 0 replies; 15+ messages in thread From: Christoph Böhmwalder @ 2023-09-28 9:38 UTC (permalink / raw) To: Jens Axboe Cc: Philipp Reisner, Lars Ellenberg, drbd-dev, linux-block, linux-kernel, Christoph Hellwig, Joel Colledge, Christoph Böhmwalder Connection independent work has been moved from the connection "sender" to the resource "worker", so there no longer is a need to keep the "sender" running when the connection is down. Originally-from: Andreas Gruenbacher <agruen@kernel.org> Reviewed-by: Joel Colledge <joel.colledge@linbit.com> Signed-off-by: Christoph Böhmwalder <christoph.boehmwalder@linbit.com> --- drivers/block/drbd/drbd_nl.c | 6 +----- drivers/block/drbd/drbd_state.c | 21 --------------------- drivers/block/drbd/drbd_state.h | 1 - 3 files changed, 1 insertion(+), 27 deletions(-) diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c index 9d9ced46f968..85ab6f0f9d87 100644 --- a/drivers/block/drbd/drbd_nl.c +++ b/drivers/block/drbd/drbd_nl.c @@ -1361,8 +1361,7 @@ static void conn_reconfig_done(struct drbd_connection *connection) { bool stop_threads; spin_lock_irq(&connection->resource->req_lock); - stop_threads = conn_all_vols_unconf(connection) && - connection->cstate == C_STANDALONE; + stop_threads = connection->cstate == C_STANDALONE; spin_unlock_irq(&connection->resource->req_lock); if (stop_threads) { /* ack_receiver thread and ack_sender workqueue are implicitly @@ -1749,7 +1748,6 @@ int drbd_adm_attach(struct sk_buff *skb, struct genl_info *info) mutex_lock(&adm_ctx.resource->adm_mutex); peer_device = first_peer_device(device); connection = peer_device->connection; - conn_reconfig_start(connection); /* if you want to reconfigure, please tear down first */ if (device->state.disk > D_DISKLESS) { @@ -2117,7 +2115,6 @@ int drbd_adm_attach(struct sk_buff *skb, struct genl_info *info) kobject_uevent(&disk_to_dev(device->vdisk)->kobj, KOBJ_CHANGE); put_ldev(device); - conn_reconfig_done(connection); mutex_unlock(&adm_ctx.resource->adm_mutex); drbd_adm_finish(&adm_ctx, info, retcode); return 0; @@ -2128,7 +2125,6 @@ int drbd_adm_attach(struct sk_buff *skb, struct genl_info *info) drbd_force_state(device, NS(disk, D_DISKLESS)); drbd_md_sync(device); fail: - conn_reconfig_done(connection); if (nbc) { close_backing_dev(device, nbc->md_bdev, nbc->disk_conf->meta_dev_idx < 0 ? diff --git a/drivers/block/drbd/drbd_state.c b/drivers/block/drbd/drbd_state.c index c623769abc1a..0a901e5aca0a 100644 --- a/drivers/block/drbd/drbd_state.c +++ b/drivers/block/drbd/drbd_state.c @@ -291,27 +291,6 @@ static inline bool is_susp(union drbd_state s) return s.susp || s.susp_nod || s.susp_fen; } -bool conn_all_vols_unconf(struct drbd_connection *connection) -{ - struct drbd_peer_device *peer_device; - bool rv = true; - int vnr; - - rcu_read_lock(); - idr_for_each_entry(&connection->peer_devices, peer_device, vnr) { - struct drbd_device *device = peer_device->device; - if (device->state.disk != D_DISKLESS || - device->state.conn != C_STANDALONE || - device->state.role != R_SECONDARY) { - rv = false; - break; - } - } - rcu_read_unlock(); - - return rv; -} - /* Unfortunately the states where not correctly ordered, when they where defined. therefore can not use max_t() here. */ static enum drbd_role max_role(enum drbd_role role1, enum drbd_role role2) diff --git a/drivers/block/drbd/drbd_state.h b/drivers/block/drbd/drbd_state.h index cbaeb8018dbf..67371bd563e4 100644 --- a/drivers/block/drbd/drbd_state.h +++ b/drivers/block/drbd/drbd_state.h @@ -142,7 +142,6 @@ conn_request_state(struct drbd_connection *connection, union drbd_state mask, un enum chg_state_flags flags); extern void drbd_resume_al(struct drbd_device *device); -extern bool conn_all_vols_unconf(struct drbd_connection *connection); /** * drbd_request_state() - Request a state change -- 2.41.0 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [Drbd-dev] [PATCH 4/5] drbd: Keep connection threads running while connection is up only @ 2023-09-28 9:38 ` Christoph Böhmwalder 0 siblings, 0 replies; 15+ messages in thread From: Christoph Böhmwalder @ 2023-09-28 9:38 UTC (permalink / raw) To: Jens Axboe Cc: Lars Ellenberg, linux-kernel, Philipp Reisner, linux-block, Christoph Hellwig, drbd-dev Connection independent work has been moved from the connection "sender" to the resource "worker", so there no longer is a need to keep the "sender" running when the connection is down. Originally-from: Andreas Gruenbacher <agruen@kernel.org> Reviewed-by: Joel Colledge <joel.colledge@linbit.com> Signed-off-by: Christoph Böhmwalder <christoph.boehmwalder@linbit.com> --- drivers/block/drbd/drbd_nl.c | 6 +----- drivers/block/drbd/drbd_state.c | 21 --------------------- drivers/block/drbd/drbd_state.h | 1 - 3 files changed, 1 insertion(+), 27 deletions(-) diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c index 9d9ced46f968..85ab6f0f9d87 100644 --- a/drivers/block/drbd/drbd_nl.c +++ b/drivers/block/drbd/drbd_nl.c @@ -1361,8 +1361,7 @@ static void conn_reconfig_done(struct drbd_connection *connection) { bool stop_threads; spin_lock_irq(&connection->resource->req_lock); - stop_threads = conn_all_vols_unconf(connection) && - connection->cstate == C_STANDALONE; + stop_threads = connection->cstate == C_STANDALONE; spin_unlock_irq(&connection->resource->req_lock); if (stop_threads) { /* ack_receiver thread and ack_sender workqueue are implicitly @@ -1749,7 +1748,6 @@ int drbd_adm_attach(struct sk_buff *skb, struct genl_info *info) mutex_lock(&adm_ctx.resource->adm_mutex); peer_device = first_peer_device(device); connection = peer_device->connection; - conn_reconfig_start(connection); /* if you want to reconfigure, please tear down first */ if (device->state.disk > D_DISKLESS) { @@ -2117,7 +2115,6 @@ int drbd_adm_attach(struct sk_buff *skb, struct genl_info *info) kobject_uevent(&disk_to_dev(device->vdisk)->kobj, KOBJ_CHANGE); put_ldev(device); - conn_reconfig_done(connection); mutex_unlock(&adm_ctx.resource->adm_mutex); drbd_adm_finish(&adm_ctx, info, retcode); return 0; @@ -2128,7 +2125,6 @@ int drbd_adm_attach(struct sk_buff *skb, struct genl_info *info) drbd_force_state(device, NS(disk, D_DISKLESS)); drbd_md_sync(device); fail: - conn_reconfig_done(connection); if (nbc) { close_backing_dev(device, nbc->md_bdev, nbc->disk_conf->meta_dev_idx < 0 ? diff --git a/drivers/block/drbd/drbd_state.c b/drivers/block/drbd/drbd_state.c index c623769abc1a..0a901e5aca0a 100644 --- a/drivers/block/drbd/drbd_state.c +++ b/drivers/block/drbd/drbd_state.c @@ -291,27 +291,6 @@ static inline bool is_susp(union drbd_state s) return s.susp || s.susp_nod || s.susp_fen; } -bool conn_all_vols_unconf(struct drbd_connection *connection) -{ - struct drbd_peer_device *peer_device; - bool rv = true; - int vnr; - - rcu_read_lock(); - idr_for_each_entry(&connection->peer_devices, peer_device, vnr) { - struct drbd_device *device = peer_device->device; - if (device->state.disk != D_DISKLESS || - device->state.conn != C_STANDALONE || - device->state.role != R_SECONDARY) { - rv = false; - break; - } - } - rcu_read_unlock(); - - return rv; -} - /* Unfortunately the states where not correctly ordered, when they where defined. therefore can not use max_t() here. */ static enum drbd_role max_role(enum drbd_role role1, enum drbd_role role2) diff --git a/drivers/block/drbd/drbd_state.h b/drivers/block/drbd/drbd_state.h index cbaeb8018dbf..67371bd563e4 100644 --- a/drivers/block/drbd/drbd_state.h +++ b/drivers/block/drbd/drbd_state.h @@ -142,7 +142,6 @@ conn_request_state(struct drbd_connection *connection, union drbd_state mask, un enum chg_state_flags flags); extern void drbd_resume_al(struct drbd_device *device); -extern bool conn_all_vols_unconf(struct drbd_connection *connection); /** * drbd_request_state() - Request a state change -- 2.41.0 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 5/5] drbd: Get rid of conn_reconfig_start() and conn_reconfig_done() 2023-09-28 9:38 ` [Drbd-dev] " Christoph Böhmwalder @ 2023-09-28 9:38 ` Christoph Böhmwalder -1 siblings, 0 replies; 15+ messages in thread From: Christoph Böhmwalder @ 2023-09-28 9:38 UTC (permalink / raw) To: Jens Axboe Cc: Philipp Reisner, Lars Ellenberg, drbd-dev, linux-block, linux-kernel, Christoph Hellwig, Joel Colledge, Christoph Böhmwalder Originally-from: Andreas Gruenbacher <agruen@kernel.org> Reviewed-by: Joel Colledge <joel.colledge@linbit.com> Signed-off-by: Christoph Böhmwalder <christoph.boehmwalder@linbit.com> --- drivers/block/drbd/drbd_nl.c | 34 +++------------------------------- 1 file changed, 3 insertions(+), 31 deletions(-) diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c index 85ab6f0f9d87..5de8a6641253 100644 --- a/drivers/block/drbd/drbd_nl.c +++ b/drivers/block/drbd/drbd_nl.c @@ -1349,28 +1349,6 @@ void drbd_reconsider_queue_parameters(struct drbd_device *device, struct drbd_ba drbd_setup_queue_param(device, bdev, new, o); } -/* Starts the sender thread */ -static void conn_reconfig_start(struct drbd_connection *connection) -{ - drbd_thread_start(&connection->sender); - drbd_flush_workqueue(&connection->sender_work); -} - -/* if still unconfigured, stops sender again. */ -static void conn_reconfig_done(struct drbd_connection *connection) -{ - bool stop_threads; - spin_lock_irq(&connection->resource->req_lock); - stop_threads = connection->cstate == C_STANDALONE; - spin_unlock_irq(&connection->resource->req_lock); - if (stop_threads) { - /* ack_receiver thread and ack_sender workqueue are implicitly - * stopped by receiver in conn_disconnect() */ - drbd_thread_stop(&connection->receiver); - drbd_thread_stop(&connection->sender); - } -} - /* Make sure IO is suspended before calling this function(). */ static void drbd_suspend_al(struct drbd_device *device) { @@ -2382,7 +2360,7 @@ int drbd_adm_net_opts(struct sk_buff *skb, struct genl_info *info) goto out; } - conn_reconfig_start(connection); + drbd_flush_workqueue(&connection->sender_work); mutex_lock(&connection->data.mutex); mutex_lock(&connection->resource->conf_update); @@ -2461,15 +2439,13 @@ int drbd_adm_net_opts(struct sk_buff *skb, struct genl_info *info) drbd_send_sync_param(peer_device); } - goto done; + goto out; fail: mutex_unlock(&connection->resource->conf_update); mutex_unlock(&connection->data.mutex); free_crypto(&crypto); kfree(new_net_conf); - done: - conn_reconfig_done(connection); out: mutex_unlock(&adm_ctx.resource->adm_mutex); finish: @@ -2548,7 +2524,6 @@ int drbd_adm_connect(struct sk_buff *skb, struct genl_info *info) mutex_lock(&adm_ctx.resource->adm_mutex); connection = first_connection(adm_ctx.resource); - conn_reconfig_start(connection); if (connection->cstate > C_STANDALONE) { retcode = ERR_NET_CONFIGURED; @@ -2581,8 +2556,6 @@ int drbd_adm_connect(struct sk_buff *skb, struct genl_info *info) ((char *)new_net_conf->shared_secret)[SHARED_SECRET_MAX-1] = 0; - drbd_flush_workqueue(&connection->sender_work); - mutex_lock(&adm_ctx.resource->conf_update); old_net_conf = connection->net_conf; if (old_net_conf) { @@ -2631,7 +2604,7 @@ int drbd_adm_connect(struct sk_buff *skb, struct genl_info *info) rv = conn_request_state(connection, NS(conn, C_UNCONNECTED), CS_VERBOSE); - conn_reconfig_done(connection); + drbd_thread_start(&connection->sender); mutex_unlock(&adm_ctx.resource->adm_mutex); drbd_adm_finish(&adm_ctx, info, rv); return 0; @@ -2640,7 +2613,6 @@ int drbd_adm_connect(struct sk_buff *skb, struct genl_info *info) free_crypto(&crypto); kfree(new_net_conf); - conn_reconfig_done(connection); mutex_unlock(&adm_ctx.resource->adm_mutex); out: drbd_adm_finish(&adm_ctx, info, retcode); -- 2.41.0 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [Drbd-dev] [PATCH 5/5] drbd: Get rid of conn_reconfig_start() and conn_reconfig_done() @ 2023-09-28 9:38 ` Christoph Böhmwalder 0 siblings, 0 replies; 15+ messages in thread From: Christoph Böhmwalder @ 2023-09-28 9:38 UTC (permalink / raw) To: Jens Axboe Cc: Lars Ellenberg, linux-kernel, Philipp Reisner, linux-block, Christoph Hellwig, drbd-dev Originally-from: Andreas Gruenbacher <agruen@kernel.org> Reviewed-by: Joel Colledge <joel.colledge@linbit.com> Signed-off-by: Christoph Böhmwalder <christoph.boehmwalder@linbit.com> --- drivers/block/drbd/drbd_nl.c | 34 +++------------------------------- 1 file changed, 3 insertions(+), 31 deletions(-) diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c index 85ab6f0f9d87..5de8a6641253 100644 --- a/drivers/block/drbd/drbd_nl.c +++ b/drivers/block/drbd/drbd_nl.c @@ -1349,28 +1349,6 @@ void drbd_reconsider_queue_parameters(struct drbd_device *device, struct drbd_ba drbd_setup_queue_param(device, bdev, new, o); } -/* Starts the sender thread */ -static void conn_reconfig_start(struct drbd_connection *connection) -{ - drbd_thread_start(&connection->sender); - drbd_flush_workqueue(&connection->sender_work); -} - -/* if still unconfigured, stops sender again. */ -static void conn_reconfig_done(struct drbd_connection *connection) -{ - bool stop_threads; - spin_lock_irq(&connection->resource->req_lock); - stop_threads = connection->cstate == C_STANDALONE; - spin_unlock_irq(&connection->resource->req_lock); - if (stop_threads) { - /* ack_receiver thread and ack_sender workqueue are implicitly - * stopped by receiver in conn_disconnect() */ - drbd_thread_stop(&connection->receiver); - drbd_thread_stop(&connection->sender); - } -} - /* Make sure IO is suspended before calling this function(). */ static void drbd_suspend_al(struct drbd_device *device) { @@ -2382,7 +2360,7 @@ int drbd_adm_net_opts(struct sk_buff *skb, struct genl_info *info) goto out; } - conn_reconfig_start(connection); + drbd_flush_workqueue(&connection->sender_work); mutex_lock(&connection->data.mutex); mutex_lock(&connection->resource->conf_update); @@ -2461,15 +2439,13 @@ int drbd_adm_net_opts(struct sk_buff *skb, struct genl_info *info) drbd_send_sync_param(peer_device); } - goto done; + goto out; fail: mutex_unlock(&connection->resource->conf_update); mutex_unlock(&connection->data.mutex); free_crypto(&crypto); kfree(new_net_conf); - done: - conn_reconfig_done(connection); out: mutex_unlock(&adm_ctx.resource->adm_mutex); finish: @@ -2548,7 +2524,6 @@ int drbd_adm_connect(struct sk_buff *skb, struct genl_info *info) mutex_lock(&adm_ctx.resource->adm_mutex); connection = first_connection(adm_ctx.resource); - conn_reconfig_start(connection); if (connection->cstate > C_STANDALONE) { retcode = ERR_NET_CONFIGURED; @@ -2581,8 +2556,6 @@ int drbd_adm_connect(struct sk_buff *skb, struct genl_info *info) ((char *)new_net_conf->shared_secret)[SHARED_SECRET_MAX-1] = 0; - drbd_flush_workqueue(&connection->sender_work); - mutex_lock(&adm_ctx.resource->conf_update); old_net_conf = connection->net_conf; if (old_net_conf) { @@ -2631,7 +2604,7 @@ int drbd_adm_connect(struct sk_buff *skb, struct genl_info *info) rv = conn_request_state(connection, NS(conn, C_UNCONNECTED), CS_VERBOSE); - conn_reconfig_done(connection); + drbd_thread_start(&connection->sender); mutex_unlock(&adm_ctx.resource->adm_mutex); drbd_adm_finish(&adm_ctx, info, rv); return 0; @@ -2640,7 +2613,6 @@ int drbd_adm_connect(struct sk_buff *skb, struct genl_info *info) free_crypto(&crypto); kfree(new_net_conf); - conn_reconfig_done(connection); mutex_unlock(&adm_ctx.resource->adm_mutex); out: drbd_adm_finish(&adm_ctx, info, retcode); -- 2.41.0 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH 1/5] drbd: Rename per-connection "worker" thread to "sender"
@ 2023-10-04 14:22 kernel test robot
0 siblings, 0 replies; 15+ messages in thread
From: kernel test robot @ 2023-10-04 14:22 UTC (permalink / raw)
To: oe-kbuild; +Cc: lkp, Dan Carpenter
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
In-Reply-To: <20230928093852.676786-2-christoph.boehmwalder@linbit.com>
References: <20230928093852.676786-2-christoph.boehmwalder@linbit.com>
TO: "Christoph Böhmwalder" <christoph.boehmwalder@linbit.com>
TO: Jens Axboe <axboe@kernel.dk>
CC: Philipp Reisner <philipp.reisner@linbit.com>
CC: Lars Ellenberg <lars@linbit.com>
CC: drbd-dev@lists.linbit.com
CC: linux-block@vger.kernel.org
CC: linux-kernel@vger.kernel.org
CC: Christoph Hellwig <hch@lst.de>
CC: Joel Colledge <joel.colledge@linbit.com>
CC: "Christoph Böhmwalder" <christoph.boehmwalder@linbit.com>
Hi Christoph,
kernel test robot noticed the following build warnings:
[auto build test WARNING on aa511ff8218b3fb328181fbaac48aa5e9c5c6d93]
url: https://github.com/intel-lab-lkp/linux/commits/Christoph-B-hmwalder/drbd-Rename-per-connection-worker-thread-to-sender/20230928-174054
base: aa511ff8218b3fb328181fbaac48aa5e9c5c6d93
patch link: https://lore.kernel.org/r/20230928093852.676786-2-christoph.boehmwalder%40linbit.com
patch subject: [PATCH 1/5] drbd: Rename per-connection "worker" thread to "sender"
:::::: branch date: 6 days ago
:::::: commit date: 6 days ago
config: x86_64-randconfig-161-20231003 (https://download.01.org/0day-ci/archive/20231004/202310042250.iEtNFCQs-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce: (https://download.01.org/0day-ci/archive/20231004/202310042250.iEtNFCQs-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202310042250.iEtNFCQs-lkp@intel.com/
smatch warnings:
drivers/block/drbd/drbd_sender.c:588 make_resync_request() warn: variable dereferenced before check 'peer_device' (see line 587)
vim +/peer_device +588 drivers/block/drbd/drbd_sender.c
e65f440d474d7d drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-11-05 584
0d11f3cf279c5a drivers/block/drbd/drbd_worker.c Christoph Böhmwalder 2023-03-30 585 static int make_resync_request(struct drbd_peer_device *const peer_device, int cancel)
b411b3637fa71f drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 586 {
0d11f3cf279c5a drivers/block/drbd/drbd_worker.c Christoph Böhmwalder 2023-03-30 @587 struct drbd_device *const device = peer_device->device;
44a4d551846b8c drivers/block/drbd/drbd_worker.c Lars Ellenberg 2013-11-22 @588 struct drbd_connection *const connection = peer_device ? peer_device->connection : NULL;
b411b3637fa71f drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 589 unsigned long bit;
b411b3637fa71f drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 590 sector_t sector;
155bd9d1abd604 drivers/block/drbd/drbd_worker.c Christoph Hellwig 2020-09-25 591 const sector_t capacity = get_capacity(device->vdisk);
1816a2b47afae8 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-11-11 592 int max_bio_size;
e65f440d474d7d drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-11-05 593 int number, rollback_i, size;
506afb6248af57 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 594 int align, requeue = 0;
0f0601f4ea2f53 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-08-11 595 int i = 0;
92d94ae66aebda drivers/block/drbd/drbd_worker.c Philipp Reisner 2016-06-14 596 int discard_granularity = 0;
b411b3637fa71f drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 597
b411b3637fa71f drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 598 if (unlikely(cancel))
99920dc5c5fe52 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-03-16 599 return 0;
b411b3637fa71f drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 600
b30ab7913b0a7b drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 601 if (device->rs_total == 0) {
af85e8e83d160f drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-10-07 602 /* empty resync? */
0d11f3cf279c5a drivers/block/drbd/drbd_worker.c Christoph Böhmwalder 2023-03-30 603 drbd_resync_finished(peer_device);
99920dc5c5fe52 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-03-16 604 return 0;
af85e8e83d160f drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-10-07 605 }
af85e8e83d160f drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-10-07 606
b30ab7913b0a7b drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 607 if (!get_ldev(device)) {
b30ab7913b0a7b drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 608 /* Since we only need to access device->rsync a
b30ab7913b0a7b drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 609 get_ldev_if_state(device,D_FAILED) would be sufficient, but
b411b3637fa71f drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 610 to continue resync with a broken disk makes no sense at
b411b3637fa71f drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 611 all */
d01801710265cf drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 612 drbd_err(device, "Disk broke down during resync!\n");
99920dc5c5fe52 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-03-16 613 return 0;
b411b3637fa71f drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 614 }
b411b3637fa71f drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 615
9104d31a759fba drivers/block/drbd/drbd_worker.c Lars Ellenberg 2016-06-14 616 if (connection->agreed_features & DRBD_FF_THIN_RESYNC) {
92d94ae66aebda drivers/block/drbd/drbd_worker.c Philipp Reisner 2016-06-14 617 rcu_read_lock();
92d94ae66aebda drivers/block/drbd/drbd_worker.c Philipp Reisner 2016-06-14 618 discard_granularity = rcu_dereference(device->ldev->disk_conf)->rs_discard_granularity;
92d94ae66aebda drivers/block/drbd/drbd_worker.c Philipp Reisner 2016-06-14 619 rcu_read_unlock();
92d94ae66aebda drivers/block/drbd/drbd_worker.c Philipp Reisner 2016-06-14 620 }
92d94ae66aebda drivers/block/drbd/drbd_worker.c Philipp Reisner 2016-06-14 621
b30ab7913b0a7b drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 622 max_bio_size = queue_max_hw_sectors(device->rq_queue) << 9;
0d11f3cf279c5a drivers/block/drbd/drbd_worker.c Christoph Böhmwalder 2023-03-30 623 number = drbd_rs_number_requests(peer_device);
0e49d7b014c5d5 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-04-28 624 if (number <= 0)
0f0601f4ea2f53 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-08-11 625 goto requeue;
b411b3637fa71f drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 626
b411b3637fa71f drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 627 for (i = 0; i < number; i++) {
506afb6248af57 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 628 /* Stop generating RS requests when half of the send buffer is filled,
506afb6248af57 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 629 * but notify TCP that we'd like to have more space. */
44a4d551846b8c drivers/block/drbd/drbd_worker.c Lars Ellenberg 2013-11-22 630 mutex_lock(&connection->data.mutex);
44a4d551846b8c drivers/block/drbd/drbd_worker.c Lars Ellenberg 2013-11-22 631 if (connection->data.socket) {
506afb6248af57 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 632 struct sock *sk = connection->data.socket->sk;
506afb6248af57 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 633 int queued = sk->sk_wmem_queued;
506afb6248af57 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 634 int sndbuf = sk->sk_sndbuf;
506afb6248af57 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 635 if (queued > sndbuf / 2) {
506afb6248af57 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 636 requeue = 1;
506afb6248af57 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 637 if (sk->sk_socket)
506afb6248af57 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 638 set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
b411b3637fa71f drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 639 }
506afb6248af57 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 640 } else
506afb6248af57 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 641 requeue = 1;
44a4d551846b8c drivers/block/drbd/drbd_worker.c Lars Ellenberg 2013-11-22 642 mutex_unlock(&connection->data.mutex);
506afb6248af57 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2014-01-31 643 if (requeue)
b411b3637fa71f drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 644 goto requeue;
b411b3637fa71f drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 645
b411b3637fa71f drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 646 next_sector:
b411b3637fa71f drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 647 size = BM_BLOCK_SIZE;
b30ab7913b0a7b drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 648 bit = drbd_bm_find_next(device, device->bm_resync_fo);
b411b3637fa71f drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 649
4b0715f09655e7 drivers/block/drbd/drbd_worker.c Lars Ellenberg 2010-12-14 650 if (bit == DRBD_END_OF_BITMAP) {
b30ab7913b0a7b drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 651 device->bm_resync_fo = drbd_bm_bits(device);
b30ab7913b0a7b drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 652 put_ldev(device);
99920dc5c5fe52 drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-03-16 653 return 0;
b411b3637fa71f drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 654 }
b411b3637fa71f drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 655
b411b3637fa71f drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 656 sector = BM_BIT_TO_SECT(bit);
b411b3637fa71f drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 657
0d11f3cf279c5a drivers/block/drbd/drbd_worker.c Christoph Böhmwalder 2023-03-30 658 if (drbd_try_rs_begin_io(peer_device, sector)) {
b30ab7913b0a7b drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 659 device->bm_resync_fo = bit;
b411b3637fa71f drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 660 goto requeue;
b411b3637fa71f drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 661 }
b30ab7913b0a7b drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 662 device->bm_resync_fo = bit + 1;
b411b3637fa71f drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 663
b30ab7913b0a7b drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 664 if (unlikely(drbd_bm_test_bit(device, bit) == 0)) {
b30ab7913b0a7b drivers/block/drbd/drbd_worker.c Andreas Gruenbacher 2011-07-03 665 drbd_rs_complete_io(device, sector);
b411b3637fa71f drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 666 goto next_sector;
b411b3637fa71f drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 667 }
b411b3637fa71f drivers/block/drbd/drbd_worker.c Philipp Reisner 2009-09-25 668
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 15+ messages in threadend of thread, other threads:[~2023-10-04 14:23 UTC | newest] Thread overview: 15+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-09-28 9:38 [PATCH 0/5] drbd: rename worker to sender Christoph Böhmwalder 2023-09-28 9:38 ` [Drbd-dev] " Christoph Böhmwalder 2023-09-28 9:38 ` [PATCH 1/5] drbd: Rename per-connection "worker" thread to "sender" Christoph Böhmwalder 2023-09-28 9:38 ` [Drbd-dev] " Christoph Böhmwalder 2023-09-29 12:04 ` kernel test robot 2023-09-29 12:04 ` [Drbd-dev] " kernel test robot 2023-09-28 9:38 ` [PATCH 2/5] drbd: Add new per-resource "worker" thread Christoph Böhmwalder 2023-09-28 9:38 ` [Drbd-dev] " Christoph Böhmwalder 2023-09-28 9:38 ` [PATCH 3/5] drbd: Move connection independent work from "sender" to "worker" Christoph Böhmwalder 2023-09-28 9:38 ` [Drbd-dev] " Christoph Böhmwalder 2023-09-28 9:38 ` [PATCH 4/5] drbd: Keep connection threads running while connection is up only Christoph Böhmwalder 2023-09-28 9:38 ` [Drbd-dev] " Christoph Böhmwalder 2023-09-28 9:38 ` [PATCH 5/5] drbd: Get rid of conn_reconfig_start() and conn_reconfig_done() Christoph Böhmwalder 2023-09-28 9:38 ` [Drbd-dev] " Christoph Böhmwalder -- strict thread matches above, loose matches on Subject: below -- 2023-10-04 14:22 [PATCH 1/5] drbd: Rename per-connection "worker" thread to "sender" kernel test robot
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.