* [Drbd-dev] [PATCH v2 0/2] drbd bugfix and cleanup @ 2022-11-22 3:04 Wang ShaoBo 2022-11-22 3:04 ` [Drbd-dev] [PATCH v2 1/2] drbd: remove call to memset before free device/resource/connection Wang ShaoBo 2022-11-22 3:04 ` [Drbd-dev] [PATCH v2 2/2] drbd: destroy workqueue when drbd device was freed Wang ShaoBo 0 siblings, 2 replies; 4+ messages in thread From: Wang ShaoBo @ 2022-11-22 3:04 UTC (permalink / raw) Cc: axboe, bobo.shaobowang, linux-block, lars.ellenberg, liwei391, drbd-dev drbd bugfix and cleanup. v2: - add new patch for removing useless memset(). Wang ShaoBo (2): drbd: remove call to memset before free device/resource/connection drbd: destroy workqueue when drbd device was freed drivers/block/drbd/drbd_main.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) -- 2.25.1 ^ permalink raw reply [flat|nested] 4+ messages in thread
* [Drbd-dev] [PATCH v2 1/2] drbd: remove call to memset before free device/resource/connection 2022-11-22 3:04 [Drbd-dev] [PATCH v2 0/2] drbd bugfix and cleanup Wang ShaoBo @ 2022-11-22 3:04 ` Wang ShaoBo 2022-11-22 3:04 ` [Drbd-dev] [PATCH v2 2/2] drbd: destroy workqueue when drbd device was freed Wang ShaoBo 1 sibling, 0 replies; 4+ messages in thread From: Wang ShaoBo @ 2022-11-22 3:04 UTC (permalink / raw) Cc: axboe, bobo.shaobowang, linux-block, lars.ellenberg, liwei391, drbd-dev This revert c2258ffc56f2 ("drbd: poison free'd device, resource and connection structs"), add memset is odd here for debugging, there are some methods to accurately show what happened, such as kdump. Signed-off-by: Wang ShaoBo <bobo.shaobowang@huawei.com> --- drivers/block/drbd/drbd_main.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c index 8532b839a343..78cae4e75af1 100644 --- a/drivers/block/drbd/drbd_main.c +++ b/drivers/block/drbd/drbd_main.c @@ -2217,7 +2217,6 @@ void drbd_destroy_device(struct kref *kref) kref_put(&peer_device->connection->kref, drbd_destroy_connection); kfree(peer_device); } - memset(device, 0xfd, sizeof(*device)); kfree(device); kref_put(&resource->kref, drbd_destroy_resource); } @@ -2309,7 +2308,6 @@ void drbd_destroy_resource(struct kref *kref) idr_destroy(&resource->devices); free_cpumask_var(resource->cpu_mask); kfree(resource->name); - memset(resource, 0xf2, sizeof(*resource)); kfree(resource); } @@ -2650,7 +2648,6 @@ void drbd_destroy_connection(struct kref *kref) drbd_free_socket(&connection->data); kfree(connection->int_dig_in); kfree(connection->int_dig_vv); - memset(connection, 0xfc, sizeof(*connection)); kfree(connection); kref_put(&resource->kref, drbd_destroy_resource); } -- 2.25.1 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [Drbd-dev] [PATCH v2 2/2] drbd: destroy workqueue when drbd device was freed 2022-11-22 3:04 [Drbd-dev] [PATCH v2 0/2] drbd bugfix and cleanup Wang ShaoBo 2022-11-22 3:04 ` [Drbd-dev] [PATCH v2 1/2] drbd: remove call to memset before free device/resource/connection Wang ShaoBo @ 2022-11-22 3:04 ` Wang ShaoBo 2022-11-22 12:01 ` Christoph Böhmwalder 1 sibling, 1 reply; 4+ messages in thread From: Wang ShaoBo @ 2022-11-22 3:04 UTC (permalink / raw) Cc: axboe, bobo.shaobowang, linux-block, lars.ellenberg, liwei391, drbd-dev A submitter workqueue is dynamically allocated by init_submitter() called by drbd_create_device(), we should destroy it when this device is not needed or destroyed. Fixes: 113fef9e20e0 ("drbd: prepare to queue write requests on a submit worker") Signed-off-by: Wang ShaoBo <bobo.shaobowang@huawei.com> --- drivers/block/drbd/drbd_main.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c index 78cae4e75af1..2d6b6d1c5ff4 100644 --- a/drivers/block/drbd/drbd_main.c +++ b/drivers/block/drbd/drbd_main.c @@ -2217,6 +2217,8 @@ void drbd_destroy_device(struct kref *kref) kref_put(&peer_device->connection->kref, drbd_destroy_connection); kfree(peer_device); } + if (device->submit.wq) + destroy_workqueue(device->submit.wq); kfree(device); kref_put(&resource->kref, drbd_destroy_resource); } @@ -2807,6 +2809,8 @@ enum drbd_ret_code drbd_create_device(struct drbd_config_context *adm_ctx, unsig put_disk(disk); out_no_disk: kref_put(&resource->kref, drbd_destroy_resource); + if (device->submit.wq) + destroy_workqueue(device->submit.wq); kfree(device); return err; } -- 2.25.1 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [Drbd-dev] [PATCH v2 2/2] drbd: destroy workqueue when drbd device was freed 2022-11-22 3:04 ` [Drbd-dev] [PATCH v2 2/2] drbd: destroy workqueue when drbd device was freed Wang ShaoBo @ 2022-11-22 12:01 ` Christoph Böhmwalder 0 siblings, 0 replies; 4+ messages in thread From: Christoph Böhmwalder @ 2022-11-22 12:01 UTC (permalink / raw) To: Wang ShaoBo; +Cc: linux-block, axboe, lars.ellenberg, liwei391, drbd-dev Am 22.11.22 um 04:04 schrieb Wang ShaoBo: > A submitter workqueue is dynamically allocated by init_submitter() > called by drbd_create_device(), we should destroy it when this > device is not needed or destroyed. > > Fixes: 113fef9e20e0 ("drbd: prepare to queue write requests on a submit worker") > Signed-off-by: Wang ShaoBo <bobo.shaobowang@huawei.com> > --- > drivers/block/drbd/drbd_main.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c > index 78cae4e75af1..2d6b6d1c5ff4 100644 > --- a/drivers/block/drbd/drbd_main.c > +++ b/drivers/block/drbd/drbd_main.c > @@ -2217,6 +2217,8 @@ void drbd_destroy_device(struct kref *kref) > kref_put(&peer_device->connection->kref, drbd_destroy_connection); > kfree(peer_device); > } > + if (device->submit.wq) > + destroy_workqueue(device->submit.wq); > kfree(device); > kref_put(&resource->kref, drbd_destroy_resource); > } > @@ -2807,6 +2809,8 @@ enum drbd_ret_code drbd_create_device(struct drbd_config_context *adm_ctx, unsig > put_disk(disk); > out_no_disk: > kref_put(&resource->kref, drbd_destroy_resource); > + if (device->submit.wq) > + destroy_workqueue(device->submit.wq); > kfree(device); > return err; > } Thanks, that is better. Just one more nitpick: in drbd_create_device, we usually order the allocations/frees in a "last in, first out" fashion. That is, data should be released in the reverse order that it was allocated. This also helps with error handling, which is what the out_* labels are used for. So maybe we can put that destroy_workqueue() under its own out_* label and make sure it gets freed first in the cleanup section (since it gets allocated last). -- Christoph Böhmwalder LINBIT | Keeping the Digital World Running DRBD HA — Disaster Recovery — Software defined Storage ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2022-11-22 12:01 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-11-22 3:04 [Drbd-dev] [PATCH v2 0/2] drbd bugfix and cleanup Wang ShaoBo 2022-11-22 3:04 ` [Drbd-dev] [PATCH v2 1/2] drbd: remove call to memset before free device/resource/connection Wang ShaoBo 2022-11-22 3:04 ` [Drbd-dev] [PATCH v2 2/2] drbd: destroy workqueue when drbd device was freed Wang ShaoBo 2022-11-22 12:01 ` Christoph Böhmwalder
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox