author: Linus Torvalds <torvalds@linux-foundation.org> 2014-06-12 10:30:18 -0700
committer: Linus Torvalds <torvalds@linux-foundation.org> 2014-06-12 10:30:18 -0700
commit: 16b9057804c02e2d351e9c8f606e909b43cbd9e7
parent: 5c02c392cd2320e8d612376d6b72b6548a680923
Commit Summary:
Diffstat:
1 file changed, 6 insertions, 0 deletions
diff --git a/fs/file_table.c b/fs/file_table.c
index 40bf4660f0a3..385bfd31512a 100644
--- a/fs/file_table.c
+++ b/fs/file_table.c
@@ -175,6 +175,12 @@ struct file *alloc_file(struct path *path, fmode_t mode,
file->f_path = *path;
file->f_inode = path->dentry->d_inode;
file->f_mapping = path->dentry->d_inode->i_mapping;
+ if ((mode & FMODE_READ) &&
+ likely(fop->read || fop->aio_read || fop->read_iter))
+ mode |= FMODE_CAN_READ;
+ if ((mode & FMODE_WRITE) &&
+ likely(fop->write || fop->aio_write || fop->write_iter))
+ mode |= FMODE_CAN_WRITE;
file->f_mode = mode;
file->f_op = fop;
if ((mode & (FMODE_READ | FMODE_WRITE)) == FMODE_READ)