X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=fs%2Fopen.c;h=36662d0362379698fcb5764fbb142337732b3919;hb=4a54e5e517cdc0044c9c9542e53736500a9391dc;hp=9d64679cec73b00fc4685e23d69374ca122fed09;hpb=efd4b76ef789541e7046e873b3546209352cdb59;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);