X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=fs%2Fopen.c;h=36662d0362379698fcb5764fbb142337732b3919;hb=3d8712265c26546823b38eb97487262500ff13db;hp=9d64679cec73b00fc4685e23d69374ca122fed09;hpb=3de0ef8d0d3350964720cad2a0a72984f1bb81ba;p=firefly-linux-kernel-4.4.55.git diff --git a/fs/open.c b/fs/open.c index 9d64679cec73..36662d036237 100644 --- a/fs/open.c +++ b/fs/open.c @@ -725,6 +725,12 @@ static int do_dentry_open(struct file *f, } if ((f->f_mode & (FMODE_READ | FMODE_WRITE)) == FMODE_READ) i_readcount_inc(inode); + if ((f->f_mode & FMODE_READ) && + likely(f->f_op->read || f->f_op->aio_read || f->f_op->read_iter)) + f->f_mode |= FMODE_CAN_READ; + if ((f->f_mode & FMODE_WRITE) && + likely(f->f_op->write || f->f_op->aio_write || f->f_op->write_iter)) + f->f_mode |= FMODE_CAN_WRITE; f->f_flags &= ~(O_CREAT | O_EXCL | O_NOCTTY | O_TRUNC);