rk312x: add psci support
[firefly-linux-kernel-4.4.55.git] / fs / direct-io.c
index 7ab90f5081eebc4ab8b0de88bef8d0b6310ed113..08a8c037396252df1ef279c984b144a27c75ab3f 100644 (file)
@@ -262,7 +262,9 @@ static ssize_t dio_complete(struct dio *dio, loff_t offset, ssize_t ret, bool is
                dio->end_io(dio->iocb, offset, transferred,
                            dio->private, ret, is_async);
        } else {
-               inode_dio_done(dio->inode);
+               if (!(dio->flags & DIO_SKIP_DIO_COUNT))
+                       inode_dio_end(dio->inode);
+
                if (is_async)
                        aio_complete(dio->iocb, ret, 0);
        }
@@ -370,6 +372,7 @@ static inline void dio_bio_submit(struct dio *dio, struct dio_submit *sdio)
 {
        struct bio *bio = sdio->bio;
        unsigned long flags;
+       int rw;
 
        bio->bi_private = dio;
 
@@ -380,6 +383,9 @@ static inline void dio_bio_submit(struct dio *dio, struct dio_submit *sdio)
        if (dio->is_async && dio->rw == READ)
                bio_set_pages_dirty(bio);
 
+       rw = dio->rw;
+       dio->rw |= (dio->rw == READ) ? KERNEL_READ : KERNEL_WRITE;
+
        if (sdio->submit_io)
                sdio->submit_io(dio->rw, bio, dio->inode,
                               sdio->logical_offset_in_bio);
@@ -1131,7 +1137,8 @@ do_blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode,
        /*
         * Will be decremented at I/O completion time.
         */
-       atomic_inc(&inode->i_dio_count);
+       if (!(dio->flags & DIO_SKIP_DIO_COUNT))
+               inode_dio_begin(inode);
 
        /*
         * For file extending writes updating i_size before data