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

Commit 00a07c15 authored by Al Viro's avatar Al Viro
Browse files

switch atomic_open() and lookup_open() to returning 0 in all success cases



caller can tell "opened" from "open it yourself" by looking at ->f_mode.

Acked-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 6c9b1de1
Loading
Loading
Loading
Loading
+17 −17
Original line number Diff line number Diff line
@@ -3027,9 +3027,9 @@ static int may_o_create(const struct path *dir, struct dentry *dentry, umode_t m
 * Returns 0 if successful.  The file will have been created and attached to
 * @file by the filesystem calling finish_open().
 *
 * Returns 1 if the file was looked up only or didn't need creating.  The
 * caller will need to perform the open themselves.  @path will have been
 * updated to point to the new dentry.  This may be negative.
 * If the file was looked up only or didn't need creating, FMODE_OPENED won't
 * be set.  The caller will need to perform the open themselves.  @path will
 * have been updated to point to the new dentry.  This may be negative.
 *
 * Returns an error code otherwise.
 */
@@ -3082,7 +3082,7 @@ static int atomic_open(struct nameidata *nd, struct dentry *dentry,
			} else {
				path->dentry = dentry;
				path->mnt = nd->path.mnt;
				return 1;
				return 0;
			}
		}
	}
@@ -3093,17 +3093,17 @@ static int atomic_open(struct nameidata *nd, struct dentry *dentry,
/*
 * Look up and maybe create and open the last component.
 *
 * Must be called with i_mutex held on parent.
 *
 * Returns 0 if the file was successfully atomically created (if necessary) and
 * opened.  In this case the file will be returned attached to @file.
 * Must be called with parent locked (exclusive in O_CREAT case).
 *
 * Returns 1 if the file was not completely opened at this time, though lookups
 * and creations will have been performed and the dentry returned in @path will
 * be positive upon return if O_CREAT was specified.  If O_CREAT wasn't
 * specified then a negative dentry may be returned.
 * Returns 0 on success, that is, if
 *  the file was successfully atomically created (if necessary) and opened, or
 *  the file was not completely opened at this time, though lookups and
 *  creations were performed.
 * These case are distinguished by presence of FMODE_OPENED on file->f_mode.
 * In the latter case dentry returned in @path might be negative if O_CREAT
 * hadn't been specified.
 *
 * An error code is returned otherwise.
 * An error code is returned on failure.
 */
static int lookup_open(struct nameidata *nd, struct path *path,
			struct file *file,
@@ -3225,7 +3225,7 @@ static int lookup_open(struct nameidata *nd, struct path *path,
out_no_open:
	path->dentry = dentry;
	path->mnt = nd->path.mnt;
	return 1;
	return 0;

out_dput:
	dput(dentry);
@@ -3308,10 +3308,10 @@ static int do_last(struct nameidata *nd,
	else
		inode_unlock_shared(dir->d_inode);

	if (error <= 0) {
	if (error)
		goto out;

	if (file->f_mode & FMODE_OPENED) {
		if ((file->f_mode & FMODE_CREATED) ||
		    !S_ISREG(file_inode(file)->i_mode))
			will_truncate = false;