All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jan Kara <jack@suse.cz>
To: Stefan Roesch <shr@fb.com>
Cc: io-uring@vger.kernel.org, kernel-team@fb.com, linux-mm@kvack.org,
	linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org,
	david@fromorbit.com, jack@suse.cz, hch@infradead.org
Subject: Re: [RFC PATCH v4 12/17] fs: Optimization for concurrent file time updates.
Date: Mon, 23 May 2022 12:51:52 +0200	[thread overview]
Message-ID: <20220523105152.36hpyx7jd2fsy2i5@quack3.lan> (raw)
In-Reply-To: <20220520183646.2002023-13-shr@fb.com>

On Fri 20-05-22 11:36:41, Stefan Roesch wrote:
> This introduces the S_PENDING_TIME flag. If an async buffered write
> needs to update the time, it cannot be processed in the fast path of
> io-uring. When a time update is pending this flag is set for async
> buffered writes. Other concurrent async buffered writes for the same
> file do not need to wait while this time update is pending.
> 
> This reduces the number of async buffered writes that need to get punted
> to the io-workers in io-uring.
> 
> Signed-off-by: Stefan Roesch <shr@fb.com>

...

> @@ -2184,10 +2184,17 @@ int file_modified_async(struct file *file, int flags)
>  	ret = file_needs_update_time(inode, file, &now);
>  	if (ret <= 0)
>  		return ret;
> -	if (flags & IOCB_NOWAIT)
> +	if (flags & IOCB_NOWAIT) {
> +		if (IS_PENDING_TIME(inode))
> +			return 0;
> +
> +		inode->i_flags |= S_PENDING_TIME;
>  		return -EAGAIN;
> +	}
>  
> -	return __file_update_time(inode, file, &now, ret);
> +	ret = __file_update_time(inode, file, &now, ret);
> +	inode->i_flags &= ~S_PENDING_TIME;
> +	return ret;
>  }
>  EXPORT_SYMBOL(file_modified_async);

You still didn't address my concern that i_flags is modified without the
protection of i_rwsem here. That can lead to corruption of i_flags value
and rather nasty (and hard to debug) consequences. You can use
inode_set_flags() here to make things kinda safe. The whole inode->i_flags
handling is a mess but not yours to resolve ;)

								Honza
-- 
Jan Kara <jack@suse.com>
SUSE Labs, CR

  reply	other threads:[~2022-05-23 10:52 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-20 18:36 [RFC PATCH v4 00/17] io-uring/xfs: support async buffered writes Stefan Roesch
2022-05-20 18:36 ` [RFC PATCH v4 01/17] mm: Move starting of background writeback into the main balancing loop Stefan Roesch
2022-05-20 18:36 ` [RFC PATCH v4 02/17] mm: Move updates of dirty_exceeded into one place Stefan Roesch
2022-05-20 18:36 ` [RFC PATCH v4 03/17] mm: Prepare balance_dirty_pages() for async buffered writes Stefan Roesch
2022-05-22  7:17   ` Christoph Hellwig
2022-05-25 21:30     ` Stefan Roesch
2022-05-20 18:36 ` [RFC PATCH v4 04/17] mm: Add balance_dirty_pages_ratelimited_flags() function Stefan Roesch
2022-05-23 10:40   ` Jan Kara
2022-05-20 18:36 ` [RFC PATCH v4 05/17] iomap: Add gfp parameter to iomap_page_create() Stefan Roesch
2022-05-22  7:21   ` Christoph Hellwig
2022-05-25 21:29     ` Stefan Roesch
2022-05-20 18:36 ` [RFC PATCH v4 06/17] iomap: Add async buffered write support Stefan Roesch
2022-05-20 18:36 ` [RFC PATCH v4 07/17] iomap: Use balance_dirty_pages_ratelimited_flags in iomap_write_iter Stefan Roesch
2022-05-22  7:19   ` Christoph Hellwig
2022-05-25 21:32     ` Stefan Roesch
2022-05-20 18:36 ` [RFC PATCH v4 08/17] fs: Add check for async buffered writes to generic_write_checks Stefan Roesch
2022-05-20 18:36 ` [RFC PATCH v4 09/17] fs: Split off remove_needs_file_privs() __remove_file_privs() Stefan Roesch
2022-05-22  7:32   ` Christoph Hellwig
2022-05-25 21:34     ` Stefan Roesch
2022-05-20 18:36 ` [RFC PATCH v4 10/17] fs: Split off file_needs_update_time and __file_update_time Stefan Roesch
2022-05-22  7:29   ` Christoph Hellwig
2022-05-25 22:32     ` Stefan Roesch
2022-05-20 18:36 ` [RFC PATCH v4 11/17] fs: Add async write file modification handling Stefan Roesch
2022-05-22  7:24   ` Christoph Hellwig
2022-05-25 21:39     ` Stefan Roesch
2022-05-20 18:36 ` [RFC PATCH v4 12/17] fs: Optimization for concurrent file time updates Stefan Roesch
2022-05-23 10:51   ` Jan Kara [this message]
2022-05-25 21:46     ` Stefan Roesch
2022-05-20 18:36 ` [RFC PATCH v4 13/17] io_uring: Add support for async buffered writes Stefan Roesch
2022-05-20 18:36 ` [RFC PATCH v4 14/17] io_uring: Add tracepoint for short writes Stefan Roesch
2022-05-20 18:36 ` [RFC PATCH v4 15/17] xfs: Add iomap async buffered write support Stefan Roesch
2022-05-22  7:33   ` Christoph Hellwig
2022-05-25 21:40     ` Stefan Roesch
2022-05-20 18:36 ` [RFC PATCH v4 16/17] xfs: Add " Stefan Roesch
2022-05-22  7:34   ` Christoph Hellwig
2022-05-25 21:41     ` Stefan Roesch
2022-05-22 15:35   ` Darrick J. Wong
2022-05-25 21:44     ` Stefan Roesch
2022-05-20 18:36 ` [RFC PATCH v4 17/17] xfs: Enable " Stefan Roesch

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=20220523105152.36hpyx7jd2fsy2i5@quack3.lan \
    --to=jack@suse.cz \
    --cc=david@fromorbit.com \
    --cc=hch@infradead.org \
    --cc=io-uring@vger.kernel.org \
    --cc=kernel-team@fb.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-xfs@vger.kernel.org \
    --cc=shr@fb.com \
    /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.