From 49e7f8d45ee05255ae553b12a36c55667c825a6e Mon Sep 17 00:00:00 2001 From: Jiaying Zhang Date: Fri, 19 Aug 2011 19:13:32 -0400 Subject: [PATCH] --- yaml --- r: 263169 b: refs/heads/master c: dccaf33fa37a1bc5d651baeb3bfeb6becb86597b h: refs/heads/master i: 263167: b80f9c74578d1a2ae817d47e4d9e75929a2a2da9 v: v3 --- [refs] | 2 +- trunk/fs/ext4/indirect.c | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 61a4cf965cce..02439941b6fc 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 9dd75f1f1a02d656a11a7b9b9e6c2759b9c1e946 +refs/heads/master: dccaf33fa37a1bc5d651baeb3bfeb6becb86597b diff --git a/trunk/fs/ext4/indirect.c b/trunk/fs/ext4/indirect.c index b8602cde5b5a..0962642119c0 100644 --- a/trunk/fs/ext4/indirect.c +++ b/trunk/fs/ext4/indirect.c @@ -800,12 +800,17 @@ ssize_t ext4_ind_direct_IO(int rw, struct kiocb *iocb, } retry: - if (rw == READ && ext4_should_dioread_nolock(inode)) + if (rw == READ && ext4_should_dioread_nolock(inode)) { + if (unlikely(!list_empty(&ei->i_completed_io_list))) { + mutex_lock(&inode->i_mutex); + ext4_flush_completed_IO(inode); + mutex_unlock(&inode->i_mutex); + } ret = __blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev, iov, offset, nr_segs, ext4_get_block, NULL, NULL, 0); - else { + } else { ret = blockdev_direct_IO(rw, iocb, inode, iov, offset, nr_segs, ext4_get_block);