All of lore.kernel.org
 help / color / mirror / Atom feed
From: Uladzislau Rezki <urezki@gmail.com>
To: Jens Axboe <axboe@kernel.dk>,
	Philipp Reisner <philipp.reisner@linbit.com>,
	Jason Gunthorpe <jgg@nvidia.com>,
	drbd-dev@lists.linbit.com, linux-block@vger.kernel.org
Cc: LKML <linux-kernel@vger.kernel.org>, RCU <rcu@vger.kernel.org>,
	"Paul E . McKenney" <paulmck@kernel.org>,
	Michal Hocko <mhocko@suse.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Daniel Axtens <dja@axtens.net>,
	Frederic Weisbecker <frederic@kernel.org>,
	Neeraj Upadhyay <neeraju@codeaurora.org>,
	Joel Fernandes <joel@joelfernandes.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	"Theodore Y . Ts'o" <tytso@mit.edu>,
	Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
	Oleksiy Avramchenko <oleksiy.avramchenko@sonymobile.com>
Subject: Re: [PATCH] drdb: Switch to kvfree_rcu() API
Date: Wed, 15 Dec 2021 20:38:46 +0100	[thread overview]
Message-ID: <YbpERiPKO4ufe1hf@pc638.lan> (raw)
In-Reply-To: <20211215111845.2514-1-urezki@gmail.com>

On Wed, Dec 15, 2021 at 12:18:37PM +0100, Uladzislau Rezki (Sony) wrote:
> Instead of invoking a synchronize_rcu() to free a pointer
> after a grace period we can directly make use of new API
> that does the same but in more efficient way.
> 
> TO: Jens Axboe <axboe@kernel.dk>
> TO: Philipp Reisner <philipp.reisner@linbit.com>
> TO: Jason Gunthorpe <jgg@nvidia.com>
> TO: drbd-dev@lists.linbit.com
> TO: linux-block@vger.kernel.org
> Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
> ---
>  drivers/block/drbd/drbd_nl.c       | 9 +++------
>  drivers/block/drbd/drbd_receiver.c | 6 ++----
>  drivers/block/drbd/drbd_state.c    | 3 +--
>  3 files changed, 6 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c
> index 44ccf8b4f4b2..28f4d84945fd 100644
> --- a/drivers/block/drbd/drbd_nl.c
> +++ b/drivers/block/drbd/drbd_nl.c
> @@ -1679,8 +1679,7 @@ int drbd_adm_disk_opts(struct sk_buff *skb, struct genl_info *info)
>  			drbd_send_sync_param(peer_device);
>  	}
>  
> -	synchronize_rcu();
> -	kfree(old_disk_conf);
> +	kvfree_rcu(old_disk_conf);
>  	kfree(old_plan);
>  	mod_timer(&device->request_timer, jiffies + HZ);
>  	goto success;
> @@ -2511,8 +2510,7 @@ int drbd_adm_net_opts(struct sk_buff *skb, struct genl_info *info)
>  
>  	mutex_unlock(&connection->resource->conf_update);
>  	mutex_unlock(&connection->data.mutex);
> -	synchronize_rcu();
> -	kfree(old_net_conf);
> +	kvfree_rcu(old_net_conf);
>  
>  	if (connection->cstate >= C_WF_REPORT_PARAMS) {
>  		struct drbd_peer_device *peer_device;
> @@ -2925,8 +2923,7 @@ int drbd_adm_resize(struct sk_buff *skb, struct genl_info *info)
>  		new_disk_conf->disk_size = (sector_t)rs.resize_size;
>  		rcu_assign_pointer(device->ldev->disk_conf, new_disk_conf);
>  		mutex_unlock(&device->resource->conf_update);
> -		synchronize_rcu();
> -		kfree(old_disk_conf);
> +		kvfree_rcu(old_disk_conf);
>  		new_disk_conf = NULL;
>  	}
>  
> diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c
> index 1f740e42e457..d73a53242a75 100644
> --- a/drivers/block/drbd/drbd_receiver.c
> +++ b/drivers/block/drbd/drbd_receiver.c
> @@ -3799,8 +3799,7 @@ static int receive_protocol(struct drbd_connection *connection, struct packet_in
>  		drbd_info(connection, "peer data-integrity-alg: %s\n",
>  			  integrity_alg[0] ? integrity_alg : "(none)");
>  
> -	synchronize_rcu();
> -	kfree(old_net_conf);
> +	kvfree_rcu(old_net_conf);
>  	return 0;
>  
>  disconnect_rcu_unlock:
> @@ -4168,8 +4167,7 @@ static int receive_sizes(struct drbd_connection *connection, struct packet_info
>  
>  			rcu_assign_pointer(device->ldev->disk_conf, new_disk_conf);
>  			mutex_unlock(&connection->resource->conf_update);
> -			synchronize_rcu();
> -			kfree(old_disk_conf);
> +			kvfree_rcu(old_disk_conf);
>  
>  			drbd_info(device, "Peer sets u_size to %lu sectors (old: %lu)\n",
>  				 (unsigned long)p_usize, (unsigned long)my_usize);
> diff --git a/drivers/block/drbd/drbd_state.c b/drivers/block/drbd/drbd_state.c
> index b8a27818ab3f..826e496821c7 100644
> --- a/drivers/block/drbd/drbd_state.c
> +++ b/drivers/block/drbd/drbd_state.c
> @@ -2071,8 +2071,7 @@ static int w_after_conn_state_ch(struct drbd_work *w, int unused)
>  		conn_free_crypto(connection);
>  		mutex_unlock(&connection->resource->conf_update);
>  
> -		synchronize_rcu();
> -		kfree(old_conf);
> +		kvfree_rcu(old_conf);
>  	}
>  
>  	if (ns_max.susp_fen) {
> -- 
> 2.30.2
> 
+ Jens Axboe <axboe@kernel.dk>
+ Philipp Reisner <philipp.reisner@linbit.com>
+ Jason Gunthorpe <jgg@nvidia.com>
+ drbd-dev@lists.linbit.com
+ linux-block@vger.kernel.org

--
Vlad Rezki

WARNING: multiple messages have this Message-ID (diff)
From: Uladzislau Rezki <urezki@gmail.com>
To: Jens Axboe <axboe@kernel.dk>,
	Philipp Reisner <philipp.reisner@linbit.com>,
	Jason Gunthorpe <jgg@nvidia.com>,
	drbd-dev@lists.linbit.com, linux-block@vger.kernel.org
Cc: Michal Hocko <mhocko@suse.com>,
	"Theodore Y . Ts'o" <tytso@mit.edu>,
	"Paul E . McKenney" <paulmck@kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Frederic Weisbecker <frederic@kernel.org>,
	LKML <linux-kernel@vger.kernel.org>, RCU <rcu@vger.kernel.org>,
	Oleksiy Avramchenko <oleksiy.avramchenko@sonymobile.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Joel Fernandes <joel@joelfernandes.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Neeraj Upadhyay <neeraju@codeaurora.org>,
	Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
	Daniel Axtens <dja@axtens.net>
Subject: Re: [Drbd-dev] [PATCH] drdb: Switch to kvfree_rcu() API
Date: Wed, 15 Dec 2021 20:38:46 +0100	[thread overview]
Message-ID: <YbpERiPKO4ufe1hf@pc638.lan> (raw)
In-Reply-To: <20211215111845.2514-1-urezki@gmail.com>

On Wed, Dec 15, 2021 at 12:18:37PM +0100, Uladzislau Rezki (Sony) wrote:
> Instead of invoking a synchronize_rcu() to free a pointer
> after a grace period we can directly make use of new API
> that does the same but in more efficient way.
> 
> TO: Jens Axboe <axboe@kernel.dk>
> TO: Philipp Reisner <philipp.reisner@linbit.com>
> TO: Jason Gunthorpe <jgg@nvidia.com>
> TO: drbd-dev@lists.linbit.com
> TO: linux-block@vger.kernel.org
> Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
> ---
>  drivers/block/drbd/drbd_nl.c       | 9 +++------
>  drivers/block/drbd/drbd_receiver.c | 6 ++----
>  drivers/block/drbd/drbd_state.c    | 3 +--
>  3 files changed, 6 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c
> index 44ccf8b4f4b2..28f4d84945fd 100644
> --- a/drivers/block/drbd/drbd_nl.c
> +++ b/drivers/block/drbd/drbd_nl.c
> @@ -1679,8 +1679,7 @@ int drbd_adm_disk_opts(struct sk_buff *skb, struct genl_info *info)
>  			drbd_send_sync_param(peer_device);
>  	}
>  
> -	synchronize_rcu();
> -	kfree(old_disk_conf);
> +	kvfree_rcu(old_disk_conf);
>  	kfree(old_plan);
>  	mod_timer(&device->request_timer, jiffies + HZ);
>  	goto success;
> @@ -2511,8 +2510,7 @@ int drbd_adm_net_opts(struct sk_buff *skb, struct genl_info *info)
>  
>  	mutex_unlock(&connection->resource->conf_update);
>  	mutex_unlock(&connection->data.mutex);
> -	synchronize_rcu();
> -	kfree(old_net_conf);
> +	kvfree_rcu(old_net_conf);
>  
>  	if (connection->cstate >= C_WF_REPORT_PARAMS) {
>  		struct drbd_peer_device *peer_device;
> @@ -2925,8 +2923,7 @@ int drbd_adm_resize(struct sk_buff *skb, struct genl_info *info)
>  		new_disk_conf->disk_size = (sector_t)rs.resize_size;
>  		rcu_assign_pointer(device->ldev->disk_conf, new_disk_conf);
>  		mutex_unlock(&device->resource->conf_update);
> -		synchronize_rcu();
> -		kfree(old_disk_conf);
> +		kvfree_rcu(old_disk_conf);
>  		new_disk_conf = NULL;
>  	}
>  
> diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c
> index 1f740e42e457..d73a53242a75 100644
> --- a/drivers/block/drbd/drbd_receiver.c
> +++ b/drivers/block/drbd/drbd_receiver.c
> @@ -3799,8 +3799,7 @@ static int receive_protocol(struct drbd_connection *connection, struct packet_in
>  		drbd_info(connection, "peer data-integrity-alg: %s\n",
>  			  integrity_alg[0] ? integrity_alg : "(none)");
>  
> -	synchronize_rcu();
> -	kfree(old_net_conf);
> +	kvfree_rcu(old_net_conf);
>  	return 0;
>  
>  disconnect_rcu_unlock:
> @@ -4168,8 +4167,7 @@ static int receive_sizes(struct drbd_connection *connection, struct packet_info
>  
>  			rcu_assign_pointer(device->ldev->disk_conf, new_disk_conf);
>  			mutex_unlock(&connection->resource->conf_update);
> -			synchronize_rcu();
> -			kfree(old_disk_conf);
> +			kvfree_rcu(old_disk_conf);
>  
>  			drbd_info(device, "Peer sets u_size to %lu sectors (old: %lu)\n",
>  				 (unsigned long)p_usize, (unsigned long)my_usize);
> diff --git a/drivers/block/drbd/drbd_state.c b/drivers/block/drbd/drbd_state.c
> index b8a27818ab3f..826e496821c7 100644
> --- a/drivers/block/drbd/drbd_state.c
> +++ b/drivers/block/drbd/drbd_state.c
> @@ -2071,8 +2071,7 @@ static int w_after_conn_state_ch(struct drbd_work *w, int unused)
>  		conn_free_crypto(connection);
>  		mutex_unlock(&connection->resource->conf_update);
>  
> -		synchronize_rcu();
> -		kfree(old_conf);
> +		kvfree_rcu(old_conf);
>  	}
>  
>  	if (ns_max.susp_fen) {
> -- 
> 2.30.2
> 
+ Jens Axboe <axboe@kernel.dk>
+ Philipp Reisner <philipp.reisner@linbit.com>
+ Jason Gunthorpe <jgg@nvidia.com>
+ drbd-dev@lists.linbit.com
+ linux-block@vger.kernel.org

--
Vlad Rezki

  parent reply	other threads:[~2021-12-15 19:38 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-15 11:18 [PATCH] drdb: Switch to kvfree_rcu() API Uladzislau Rezki (Sony)
2021-12-15 11:18 ` [PATCH RESEND] ext4: Replace ext4_kvfree_array_rcu() by " Uladzislau Rezki (Sony)
2021-12-15 19:40   ` Uladzislau Rezki
2021-12-15 11:18 ` [PATCH RESEND] ext4: Switch to " Uladzislau Rezki (Sony)
2021-12-15 19:41   ` Uladzislau Rezki
2021-12-15 11:18 ` [PATCH] fs: nfs: sysfs: " Uladzislau Rezki (Sony)
2021-12-15 19:42   ` Uladzislau Rezki
2021-12-15 11:18 ` [PATCH] mfd: dln2: " Uladzislau Rezki (Sony)
2021-12-15 19:43   ` Uladzislau Rezki
2021-12-16 17:01     ` Lee Jones
2021-12-17 15:06       ` Uladzislau Rezki
2021-12-15 11:18 ` [PATCH] misc: vmw_vmci: " Uladzislau Rezki (Sony)
2021-12-15 19:45   ` Uladzislau Rezki
2021-12-15 11:18 ` [PATCH] mlxsw: core: " Uladzislau Rezki (Sony)
2021-12-15 19:46   ` Uladzislau Rezki
2021-12-15 23:38     ` Jakub Kicinski
2021-12-15 11:18 ` [PATCH] RDMA/hfi1: " Uladzislau Rezki (Sony)
2021-12-15 19:47   ` Uladzislau Rezki
2021-12-15 19:49     ` Jason Gunthorpe
2021-12-15 20:51       ` Uladzislau Rezki
2021-12-15 11:18 ` [PATCH] scsi: core: " Uladzislau Rezki (Sony)
2021-12-15 19:48   ` Uladzislau Rezki
2021-12-15 19:38 ` Uladzislau Rezki [this message]
2021-12-15 19:38   ` [Drbd-dev] [PATCH] drdb: " Uladzislau Rezki

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YbpERiPKO4ufe1hf@pc638.lan \
    --to=urezki@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=axboe@kernel.dk \
    --cc=bigeasy@linutronix.de \
    --cc=dja@axtens.net \
    --cc=drbd-dev@lists.linbit.com \
    --cc=frederic@kernel.org \
    --cc=jgg@nvidia.com \
    --cc=joel@joelfernandes.org \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mhocko@suse.com \
    --cc=neeraju@codeaurora.org \
    --cc=oleksiy.avramchenko@sonymobile.com \
    --cc=paulmck@kernel.org \
    --cc=peterz@infradead.org \
    --cc=philipp.reisner@linbit.com \
    --cc=rcu@vger.kernel.org \
    --cc=tglx@linutronix.de \
    --cc=tytso@mit.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.