Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f8310c59 authored by Al Viro's avatar Al Viro
Browse files

fix O_EXCL handling for devices



O_EXCL without O_CREAT has different semantics; it's "fail if already opened",
not "fail if already exists".  commit 71574865 broke that...

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent bf884891
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -2418,7 +2418,7 @@ static int atomic_open(struct nameidata *nd, struct dentry *dentry,
	if ((open_flag & O_CREAT) && !IS_POSIXACL(dir))
		mode &= ~current_umask();

	if (open_flag & O_EXCL) {
	if ((open_flag & (O_EXCL | O_CREAT)) == (O_EXCL | O_CREAT)) {
		open_flag &= ~O_TRUNC;
		*opened |= FILE_CREATED;
	}
@@ -2742,7 +2742,7 @@ static int do_last(struct nameidata *nd, struct path *path,
	}

	error = -EEXIST;
	if (open_flag & O_EXCL)
	if ((open_flag & (O_EXCL | O_CREAT)) == (O_EXCL | O_CREAT))
		goto exit_dput;

	error = follow_managed(path, nd->flags);