All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jan Kara <jack@suse.cz>
To: Roman Gushchin <guro@fb.com>
Cc: Jan Kara <jack@suse.cz>, Tejun Heo <tj@kernel.org>,
	linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-mm@kvack.org, Alexander Viro <viro@zeniv.linux.org.uk>,
	Dennis Zhou <dennis@kernel.org>,
	Dave Chinner <dchinner@redhat.com>,
	cgroups@vger.kernel.org
Subject: Re: [PATCH v6 1/5] writeback, cgroup: switch to rcu_work API in inode_switch_wbs()
Date: Thu, 3 Jun 2021 10:46:39 +0200	[thread overview]
Message-ID: <20210603084639.GD23647@quack2.suse.cz> (raw)
In-Reply-To: <20210603005517.1403689-2-guro@fb.com>

On Wed 02-06-21 17:55:13, Roman Gushchin wrote:
> Inode's wb switching requires two steps divided by an RCU grace
> period. It's currently implemented as an RCU callback
> inode_switch_wbs_rcu_fn(), which schedules inode_switch_wbs_work_fn()
> as a work.
> 
> Switching to the rcu_work API allows to do the same in a cleaner and
> slightly shorter form.
> 
> Signed-off-by: Roman Gushchin <guro@fb.com>

Looks good to me. You can add:

Reviewed-by: Jan Kara <jack@suse.cz>

								Honza

> ---
>  fs/fs-writeback.c | 18 ++++--------------
>  1 file changed, 4 insertions(+), 14 deletions(-)
> 
> diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c
> index e91980f49388..1f51857e41d1 100644
> --- a/fs/fs-writeback.c
> +++ b/fs/fs-writeback.c
> @@ -335,8 +335,7 @@ struct inode_switch_wbs_context {
>  	struct inode		*inode;
>  	struct bdi_writeback	*new_wb;
>  
> -	struct rcu_head		rcu_head;
> -	struct work_struct	work;
> +	struct rcu_work		work;
>  };
>  
>  static void bdi_down_write_wb_switch_rwsem(struct backing_dev_info *bdi)
> @@ -352,7 +351,7 @@ static void bdi_up_write_wb_switch_rwsem(struct backing_dev_info *bdi)
>  static void inode_switch_wbs_work_fn(struct work_struct *work)
>  {
>  	struct inode_switch_wbs_context *isw =
> -		container_of(work, struct inode_switch_wbs_context, work);
> +		container_of(to_rcu_work(work), struct inode_switch_wbs_context, work);
>  	struct inode *inode = isw->inode;
>  	struct backing_dev_info *bdi = inode_to_bdi(inode);
>  	struct address_space *mapping = inode->i_mapping;
> @@ -469,16 +468,6 @@ static void inode_switch_wbs_work_fn(struct work_struct *work)
>  	atomic_dec(&isw_nr_in_flight);
>  }
>  
> -static void inode_switch_wbs_rcu_fn(struct rcu_head *rcu_head)
> -{
> -	struct inode_switch_wbs_context *isw = container_of(rcu_head,
> -				struct inode_switch_wbs_context, rcu_head);
> -
> -	/* needs to grab bh-unsafe locks, bounce to work item */
> -	INIT_WORK(&isw->work, inode_switch_wbs_work_fn);
> -	queue_work(isw_wq, &isw->work);
> -}
> -
>  /**
>   * inode_switch_wbs - change the wb association of an inode
>   * @inode: target inode
> @@ -534,7 +523,8 @@ static void inode_switch_wbs(struct inode *inode, int new_wb_id)
>  	 * lock so that stat transfer can synchronize against them.
>  	 * Let's continue after I_WB_SWITCH is guaranteed to be visible.
>  	 */
> -	call_rcu(&isw->rcu_head, inode_switch_wbs_rcu_fn);
> +	INIT_RCU_WORK(&isw->work, inode_switch_wbs_work_fn);
> +	queue_rcu_work(isw_wq, &isw->work);
>  
>  	atomic_inc(&isw_nr_in_flight);
>  	return;
> -- 
> 2.31.1
> 
-- 
Jan Kara <jack@suse.com>
SUSE Labs, CR

  reply	other threads:[~2021-06-03  8:46 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-03  0:55 [PATCH v6 0/5] cgroup, blkcg: prevent dirty inodes to pin dying memory cgroups Roman Gushchin
2021-06-03  0:55 ` Roman Gushchin
2021-06-03  0:55 ` [PATCH v6 1/5] writeback, cgroup: switch to rcu_work API in inode_switch_wbs() Roman Gushchin
2021-06-03  0:55   ` Roman Gushchin
2021-06-03  8:46   ` Jan Kara [this message]
2021-06-03  0:55 ` [PATCH v6 2/5] writeback, cgroup: keep list of inodes attached to bdi_writeback Roman Gushchin
2021-06-03  0:55   ` Roman Gushchin
2021-06-03  8:55   ` Jan Kara
2021-06-03  0:55 ` [PATCH v6 3/5] writeback, cgroup: split out the functional part of inode_switch_wbs_work_fn() Roman Gushchin
2021-06-03  0:55   ` Roman Gushchin
2021-06-03  8:57   ` Jan Kara
2021-06-03  8:57     ` Jan Kara
2021-06-03  0:55 ` [PATCH v6 4/5] writeback, cgroup: support switching multiple inodes at once Roman Gushchin
2021-06-03  0:55   ` Roman Gushchin
2021-06-03 10:10   ` Jan Kara
2021-06-03  0:55 ` [PATCH v6 5/5] writeback, cgroup: release dying cgwbs by switching attached inodes Roman Gushchin
2021-06-03  0:55   ` Roman Gushchin
2021-06-03 10:02   ` Jan Kara
2021-06-03 10:02     ` Jan Kara
2021-06-04  1:36     ` Roman Gushchin
2021-06-04  1:36       ` Roman Gushchin

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=20210603084639.GD23647@quack2.suse.cz \
    --to=jack@suse.cz \
    --cc=cgroups@vger.kernel.org \
    --cc=dchinner@redhat.com \
    --cc=dennis@kernel.org \
    --cc=guro@fb.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=tj@kernel.org \
    --cc=viro@zeniv.linux.org.uk \
    /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.