Messages in this thread | | | Date | Tue, 1 Sep 2020 18:42:16 +0100 | From | Matthew Wilcox <> | Subject | Re: remove the last set_fs() in common code, and remove it for x86 and powerpc v2 |
| |
On Tue, Sep 01, 2020 at 06:25:12PM +0100, Al Viro wrote: > On Tue, Sep 01, 2020 at 07:13:00PM +0200, Christophe Leroy wrote: > > > 10.92% dd [kernel.kallsyms] [k] iov_iter_zero > > Interesting... Could you get an instruction-level profile inside iov_iter_zero(), > along with the disassembly of that sucker?
Also, does [1] make any difference? Probably not since it's translating O flags into IOCB flags instead of RWF flags into IOCB flags. I wonder if there's a useful trick we can play here ... something like:
static inline int iocb_flags(struct file *file) { int res = 0; if (likely(!file->f_flags & O_APPEND | O_DIRECT | O_DSYNC | __O_SYNC)) && !IS_SYNC(file->f_mapping->host)) return res; if (file->f_flags & O_APPEND) res |= IOCB_APPEND; if (file->f_flags & O_DIRECT) res |= IOCB_DIRECT; if ((file->f_flags & O_DSYNC) || IS_SYNC(file->f_mapping->host)) res |= IOCB_DSYNC; if (file->f_flags & __O_SYNC) res |= IOCB_SYNC; return res; }
Can we do something like force O_DSYNC to be set if the inode IS_SYNC() at the time of open? Or is setting the sync bit on the inode required to affect currently-open files?
[1] https://lore.kernel.org/linux-fsdevel/95de7ce4-9254-39f1-304f-4455f66bf0f4@kernel.dk/
| |