projects
/
firefly-linux-kernel-4.4.55.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
arm: rockchip: rk3228: dts: add DMAC support
[firefly-linux-kernel-4.4.55.git]
/
fs
/
direct-io.c
diff --git
a/fs/direct-io.c
b/fs/direct-io.c
index 7ab90f5081eebc4ab8b0de88bef8d0b6310ed113..08a8c037396252df1ef279c984b144a27c75ab3f 100644
(file)
--- a/
fs/direct-io.c
+++ b/
fs/direct-io.c
@@
-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 {
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);
}
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;
{
struct bio *bio = sdio->bio;
unsigned long flags;
+ int rw;
bio->bi_private = dio;
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);
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);
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.
*/
/*
* 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
/*
* For file extending writes updating i_size before data