diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2020-03-12 23:25:20 +0100 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2020-03-12 23:25:20 +0100 |
commit | d9a9f4849fe0c9d560851ab22a85a666cddfdd24 (patch) | |
tree | ad95e615975c7e052ffa8ad0d1e446653d1cc45e /fs/cifs | |
parent | gfs2_atomic_open(): fix O_EXCL|O_CREAT handling on cold dcache (diff) | |
download | linux-d9a9f4849fe0c9d560851ab22a85a666cddfdd24.tar.xz linux-d9a9f4849fe0c9d560851ab22a85a666cddfdd24.zip |
cifs_atomic_open(): fix double-put on late allocation failure
several iterations of ->atomic_open() calling conventions ago, we
used to need fput() if ->atomic_open() failed at some point after
successful finish_open(). Now (since 2016) it's not needed -
struct file carries enough state to make fput() work regardless
of the point in struct file lifecycle and discarding it on
failure exits in open() got unified. Unfortunately, I'd missed
the fact that we had an instance of ->atomic_open() (cifs one)
that used to need that fput(), as well as the stale comment in
finish_open() demanding such late failure handling. Trivially
fixed...
Fixes: fe9ec8291fca "do_last(): take fput() on error after opening to out:"
Cc: stable@kernel.org # v4.7+
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/cifs')
-rw-r--r-- | fs/cifs/dir.c | 1 |
1 files changed, 0 insertions, 1 deletions
diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c index 0ef099442f20..36e7b2fd2190 100644 --- a/fs/cifs/dir.c +++ b/fs/cifs/dir.c @@ -555,7 +555,6 @@ cifs_atomic_open(struct inode *inode, struct dentry *direntry, if (server->ops->close) server->ops->close(xid, tcon, &fid); cifs_del_pending_open(&open); - fput(file); rc = -ENOMEM; } |