From: Stefan Roesch <[email protected]>
To: <[email protected]>, <[email protected]>,
<[email protected]>, <[email protected]>,
<[email protected]>
Cc: <[email protected]>, <[email protected]>, <[email protected]>, <[email protected]>
Subject: [RFC PATCH v4 11/17] fs: Add async write file modification handling.
Date: Fri, 20 May 2022 11:36:40 -0700 [thread overview]
Message-ID: <[email protected]> (raw)
In-Reply-To: <[email protected]>
This adds a file_modified_async() function to return -EAGAIN if the
request either requires to remove privileges or needs to update the file
modification time. This is required for async buffered writes, so the
request gets handled in the io worker of io-uring.
Signed-off-by: Stefan Roesch <[email protected]>
---
fs/inode.c | 25 ++++++++++++++++++++++++-
fs/xfs/xfs_file.c | 2 +-
include/linux/fs.h | 1 +
3 files changed, 26 insertions(+), 2 deletions(-)
diff --git a/fs/inode.c b/fs/inode.c
index 4bb7f583cc6b..3a5d0fa468ab 100644
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -2137,6 +2137,27 @@ EXPORT_SYMBOL(file_update_time);
* Return: 0 on success, negative errno on failure.
*/
int file_modified(struct file *file)
+{
+ return file_modified_async(file, 0);
+}
+EXPORT_SYMBOL(file_modified);
+
+/**
+ * file_modified_async - handle mandated vfs changes when modifying a file
+ * @file: file that was modified
+ * @flags: kiocb flags
+ *
+ * When file has been modified ensure that special
+ * file privileges are removed and time settings are updated.
+ *
+ * If IOCB_NOWAIT is set, special file privileges will not be removed and
+ * time settings will not be updated. It will return -EAGAIN.
+ *
+ * Context: Caller must hold the file's inode lock.
+ *
+ * Return: 0 on success, negative errno on failure.
+ */
+int file_modified_async(struct file *file, int flags)
{
int ret;
struct dentry *dentry = file_dentry(file);
@@ -2163,10 +2184,12 @@ int file_modified(struct file *file)
ret = file_needs_update_time(inode, file, &now);
if (ret <= 0)
return ret;
+ if (flags & IOCB_NOWAIT)
+ return -EAGAIN;
return __file_update_time(inode, file, &now, ret);
}
-EXPORT_SYMBOL(file_modified);
+EXPORT_SYMBOL(file_modified_async);
int inode_needs_sync(struct inode *inode)
{
diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c
index 5bddb1e9e0b3..793918c83755 100644
--- a/fs/xfs/xfs_file.c
+++ b/fs/xfs/xfs_file.c
@@ -410,7 +410,7 @@ xfs_file_write_checks(
spin_unlock(&ip->i_flags_lock);
out:
- return file_modified(file);
+ return file_modified_async(file, iocb->ki_flags);
}
static int
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 3b479d02e210..9760283af7dc 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -2382,6 +2382,7 @@ static inline void file_accessed(struct file *file)
}
extern int file_modified(struct file *file);
+extern int file_modified_async(struct file *file, int flags);
int sync_inode_metadata(struct inode *inode, int wait);
--
2.30.2
next prev parent reply other threads:[~2022-05-20 18:38 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 ` Stefan Roesch [this message]
2022-05-22 7:24 ` [RFC PATCH v4 11/17] fs: Add async write file modification handling 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
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 \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox