From e967626c5555c202d4a4c890b5f4cadaad1cb5f8 Mon Sep 17 00:00:00 2001 From: Jiaying Zhang Date: Tue, 2 Mar 2010 13:26:36 -0500 Subject: [PATCH] --- yaml --- r: 185875 b: refs/heads/master c: b7adc1f363e72e9131a582cc2cb00eaf83f51a39 h: refs/heads/master i: 185873: e3a0beb06331094bf01b19f21c605a49ea56a7d8 185871: 2f9149b75e4714e2accb7d2af9d5402353af8217 v: v3 --- [refs] | 2 +- trunk/fs/ext4/inode.c | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 4afe6d6a9a9e..d4383cee836c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 744692dc059845b2a3022119871846e74d4f6e11 +refs/heads/master: b7adc1f363e72e9131a582cc2cb00eaf83f51a39 diff --git a/trunk/fs/ext4/inode.c b/trunk/fs/ext4/inode.c index d291310aef6b..92214d4e5afa 100644 --- a/trunk/fs/ext4/inode.c +++ b/trunk/fs/ext4/inode.c @@ -3474,7 +3474,14 @@ static ssize_t ext4_ind_direct_IO(int rw, struct kiocb *iocb, } retry: - ret = blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev, iov, + if (rw == READ && ext4_should_dioread_nolock(inode)) + ret = blockdev_direct_IO_no_locking(rw, iocb, inode, + inode->i_sb->s_bdev, iov, + offset, nr_segs, + ext4_get_block, NULL); + else + ret = blockdev_direct_IO(rw, iocb, inode, + inode->i_sb->s_bdev, iov, offset, nr_segs, ext4_get_block, NULL); if (ret == -ENOSPC && ext4_should_retry_alloc(inode->i_sb, &retries))