summaryrefslogtreecommitdiffstats
path: root/fs/open.c
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2022-05-22 17:38:11 +0200
committerAl Viro <viro@zeniv.linux.org.uk>2022-06-10 22:10:23 +0200
commit164f4064ca81eefcea29f7f5dcf394f92be1d0c0 (patch)
tree5275b76d52a540bb1e9c91118e6c9510f71d3b2e /fs/open.c
parentiocb: delay evaluation of IS_SYNC(...) until we want to check IOCB_DSYNC (diff)
downloadlinux-164f4064ca81eefcea29f7f5dcf394f92be1d0c0.tar.xz
linux-164f4064ca81eefcea29f7f5dcf394f92be1d0c0.zip
keep iocb_flags() result cached in struct file
* calculate at the time we set FMODE_OPENED (do_dentry_open() for normal opens, alloc_file() for pipe()/socket()/etc.) * update when handling F_SETFL * keep in a new field - file->f_iocb_flags; since that thing is needed only before the refcount reaches zero, we can put it into the same anon union where ->f_rcuhead and ->f_llist live - those are used only after refcount reaches zero. Reviewed-by: Christian Brauner (Microsoft) <brauner@kernel.org> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/open.c')
-rw-r--r--fs/open.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/open.c b/fs/open.c
index 1d57fbde2feb..d80441a0bf17 100644
--- a/fs/open.c
+++ b/fs/open.c
@@ -862,6 +862,7 @@ static int do_dentry_open(struct file *f,
f->f_mode |= FMODE_CAN_ODIRECT;
f->f_flags &= ~(O_CREAT | O_EXCL | O_NOCTTY | O_TRUNC);
+ f->f_iocb_flags = iocb_flags(f);
file_ra_state_init(&f->f_ra, f->f_mapping->host->i_mapping);