Loading fs/file_table.c +5 −10 Original line number Diff line number Diff line Loading @@ -192,6 +192,9 @@ static void __fput(struct file *file) struct vfsmount *mnt = file->f_path.mnt; struct inode *inode = file->f_inode; if (unlikely(!(file->f_mode & FMODE_OPENED))) goto out; might_sleep(); fsnotify_close(file); Loading Loading @@ -221,12 +224,10 @@ static void __fput(struct file *file) put_write_access(inode); __mnt_drop_write(mnt); } file->f_path.dentry = NULL; file->f_path.mnt = NULL; file->f_inode = NULL; file_free(file); dput(dentry); mntput(mnt); out: file_free(file); } static LLIST_HEAD(delayed_fput_list); Loading Loading @@ -301,12 +302,6 @@ void __fput_sync(struct file *file) EXPORT_SYMBOL(fput); void put_filp(struct file *file) { if (atomic_long_dec_and_test(&file->f_count)) file_free(file); } void __init files_init(void) { filp_cachep = kmem_cache_create("filp", sizeof(struct file), 0, Loading fs/namei.c +2 −2 Original line number Diff line number Diff line Loading @@ -3531,7 +3531,7 @@ static struct file *path_openat(struct nameidata *nd, s = path_init(nd, flags); if (IS_ERR(s)) { put_filp(file); fput(file); return ERR_CAST(s); } while (!(error = link_path_walk(s, nd)) && Loading @@ -3547,7 +3547,7 @@ static struct file *path_openat(struct nameidata *nd, out2: if (!(opened & FILE_OPENED)) { BUG_ON(!error); put_filp(file); fput(file); } if (unlikely(error)) { if (error == -EOPENSTALE) { Loading fs/open.c +3 −8 Original line number Diff line number Diff line Loading @@ -921,17 +921,12 @@ struct file *dentry_open(const struct path *path, int flags, f = alloc_empty_file(flags, cred); if (!IS_ERR(f)) { error = vfs_open(path, f); if (!error) { /* from now on we need fput() to dispose of f */ if (!error) error = open_check_o_direct(f); if (error) { fput(f); f = ERR_PTR(error); } } else { put_filp(f); f = ERR_PTR(error); } } return f; } Loading include/linux/file.h +0 −1 Original line number Diff line number Diff line Loading @@ -78,7 +78,6 @@ extern int f_dupfd(unsigned int from, struct file *file, unsigned flags); extern int replace_fd(unsigned fd, struct file *file, unsigned flags); extern void set_close_on_exec(unsigned int fd, int flag); extern bool get_close_on_exec(unsigned int fd); extern void put_filp(struct file *); extern int get_unused_fd_flags(unsigned flags); extern void put_unused_fd(unsigned int fd); Loading Loading
fs/file_table.c +5 −10 Original line number Diff line number Diff line Loading @@ -192,6 +192,9 @@ static void __fput(struct file *file) struct vfsmount *mnt = file->f_path.mnt; struct inode *inode = file->f_inode; if (unlikely(!(file->f_mode & FMODE_OPENED))) goto out; might_sleep(); fsnotify_close(file); Loading Loading @@ -221,12 +224,10 @@ static void __fput(struct file *file) put_write_access(inode); __mnt_drop_write(mnt); } file->f_path.dentry = NULL; file->f_path.mnt = NULL; file->f_inode = NULL; file_free(file); dput(dentry); mntput(mnt); out: file_free(file); } static LLIST_HEAD(delayed_fput_list); Loading Loading @@ -301,12 +302,6 @@ void __fput_sync(struct file *file) EXPORT_SYMBOL(fput); void put_filp(struct file *file) { if (atomic_long_dec_and_test(&file->f_count)) file_free(file); } void __init files_init(void) { filp_cachep = kmem_cache_create("filp", sizeof(struct file), 0, Loading
fs/namei.c +2 −2 Original line number Diff line number Diff line Loading @@ -3531,7 +3531,7 @@ static struct file *path_openat(struct nameidata *nd, s = path_init(nd, flags); if (IS_ERR(s)) { put_filp(file); fput(file); return ERR_CAST(s); } while (!(error = link_path_walk(s, nd)) && Loading @@ -3547,7 +3547,7 @@ static struct file *path_openat(struct nameidata *nd, out2: if (!(opened & FILE_OPENED)) { BUG_ON(!error); put_filp(file); fput(file); } if (unlikely(error)) { if (error == -EOPENSTALE) { Loading
fs/open.c +3 −8 Original line number Diff line number Diff line Loading @@ -921,17 +921,12 @@ struct file *dentry_open(const struct path *path, int flags, f = alloc_empty_file(flags, cred); if (!IS_ERR(f)) { error = vfs_open(path, f); if (!error) { /* from now on we need fput() to dispose of f */ if (!error) error = open_check_o_direct(f); if (error) { fput(f); f = ERR_PTR(error); } } else { put_filp(f); f = ERR_PTR(error); } } return f; } Loading
include/linux/file.h +0 −1 Original line number Diff line number Diff line Loading @@ -78,7 +78,6 @@ extern int f_dupfd(unsigned int from, struct file *file, unsigned flags); extern int replace_fd(unsigned fd, struct file *file, unsigned flags); extern void set_close_on_exec(unsigned int fd, int flag); extern bool get_close_on_exec(unsigned int fd); extern void put_filp(struct file *); extern int get_unused_fd_flags(unsigned flags); extern void put_unused_fd(unsigned int fd); Loading