Commit d2ea4d25 authored by Christian Brauner's avatar Christian Brauner Committed by Linus Torvalds
Browse files

file: ensure cleanup



Brown paper bag time. This is a silly oversight where I missed to drop
the error condition checking to ensure we clean up on early error
returns. I have an internal unit testset coming up for this which will
catch all such issues going forward.

Reported-by: default avatarChris Mason <clm@fb.com>
Reported-by: default avatarJeff Layton <jlayton@kernel.org>
Fixes: 011703a9 ("file: add FD_{ADD,PREPARE}()")
Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent d552fc63
Loading
Loading
Loading
Loading
+6 −7
Original line number Diff line number Diff line
@@ -161,13 +161,11 @@ typedef struct fd_prepare class_fd_prepare_t;
/* Do not use directly. */
static inline void class_fd_prepare_destructor(const struct fd_prepare *fdf)
{
	if (unlikely(fdf->err)) {
		if (likely(fdf->__fd >= 0))
	if (unlikely(fdf->__fd >= 0))
		put_unused_fd(fdf->__fd);
	if (unlikely(!IS_ERR_OR_NULL(fdf->__file)))
		fput(fdf->__file);
}
}

/* Do not use directly. */
static inline int class_fd_prepare_lock_err(const struct fd_prepare *fdf)
@@ -230,7 +228,8 @@ static inline int class_fd_prepare_lock_err(const struct fd_prepare *fdf)
		VFS_WARN_ON_ONCE(fdp->__fd < 0);               \
		VFS_WARN_ON_ONCE(IS_ERR_OR_NULL(fdp->__file)); \
		fd_install(fdp->__fd, fdp->__file);            \
		fdp->__fd;                                     \
		retain_and_null_ptr(fdp->__file);              \
		take_fd(fdp->__fd);                            \
	})

/* Do not use directly. */