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);
}
{
struct bio *bio = sdio->bio;
unsigned long flags;
+ int rw;
bio->bi_private = dio;
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);
/*
* 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