Re: [PATCH] vfs: remove the excl argument from the ->create() inode_operation
Jeff Layton <[email protected]>
| Newsgroups | org.kernel.vger.ecryptfs,dev.linux.lists.gfs2,dev.linux.lists.ntfs3,dev.linux.lists.ocfs2-devel,dev.linux.lists.v9fs,net.sourceforge.lists.linux-f2fs-devel,org.infradead.lists.linux-mtd,org.infradead.lists.linux-um,org.kernel.vger.ceph-devel,org.kernel.vger.linux-btrfs,org.kernel.vger.linux-cifs,org.kernel.vger.linux-efi,org.kernel.vger.linux-ext4,org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-hardening,org.kernel.vger.linux-kernel,org.kernel.vger.linux-nfs,org.kernel.vger.linux-nilfs,org.kernel.vger.linux-unionfs,org.kernel.vger.linux-xfs,org.kvack.linux-mm |
|---|---|
| Message-ID | <[email protected]> |
On Thu, 2025-11-06 at 08:23 +1100, NeilBrown wrote:
> On Thu, 06 Nov 2025, Jeff Layton wrote:
> > Since ce8644fcadc5 ("lookup_open(): expand the call of vfs_create()"),
> > the "excl" argument to the ->create() inode_operation is always set to
> > true. Remove it, and fix up all of the create implementations.
>
> nonono
>
>
> > @@ -3802,7 +3802,7 @@ static struct dentry *lookup_open(struct nameidata *nd, struct file *file,
> > }
> >
> > error = dir_inode->i_op->create(idmap, dir_inode, dentry,
> > - mode, open_flag & O_EXCL);
> > + mode);
>
> "open_flag & O_EXCL" is not the same as "true".
>
> It is true that "all calls to vfs_create() pass true for 'excl'"
> The same is NOT true for inode_operations.create.
>
I don't think this is a problem, actually:
Almost all of the existing ->create() operations ignore the "excl"
bool. There are only two that I found that do not: NFS and GFS2. Both
of those have an ->atomic_open() operation though, so lookup_open()
will never call ->create() for those filesystems. This means that -
>create() _is_ always called with excl == true.
--
Jeff Layton <[email protected]>