From 343220709a45f30635393001ad9084891ee1e88a Mon Sep 17 00:00:00 2001 From: Li Dongyang Date: Sat, 17 Apr 2010 17:49:10 +0800 Subject: [PATCH] --- yaml --- r: 190559 b: refs/heads/master c: 6b933c8e6f1a2f3118082c455eef25f9b1ac7b45 h: refs/heads/master i: 190557: d2b553fc49a48a81131ca4ee9ea9f9abcb89d837 190555: 605748fc32137bdcec922bb01ceeb3fc04dead78 190551: ef5f32487d65a4087a9e031a5efd4503dc054356 190543: 54b1688a6eeae99aae3dbe9f4871056c5b4bd215 190527: 73bbcd971df75678f3a4a89792b593ef5de66a60 v: v3 --- [refs] | 2 +- trunk/fs/ocfs2/file.c | 25 ++++++++++++++----------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/[refs] b/[refs] index 1c56aee1ab73..d575a95be6a4 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f9221fd80343285514568da6c5dbda0f87109de8 +refs/heads/master: 6b933c8e6f1a2f3118082c455eef25f9b1ac7b45 diff --git a/trunk/fs/ocfs2/file.c b/trunk/fs/ocfs2/file.c index 20e0ee58dd39..a5fbd9cea968 100644 --- a/trunk/fs/ocfs2/file.c +++ b/trunk/fs/ocfs2/file.c @@ -1982,18 +1982,18 @@ static ssize_t ocfs2_file_aio_write(struct kiocb *iocb, /* communicate with ocfs2_dio_end_io */ ocfs2_iocb_set_rw_locked(iocb, rw_level); - if (direct_io) { - ret = generic_segment_checks(iov, &nr_segs, &ocount, - VERIFY_READ); - if (ret) - goto out_dio; + ret = generic_segment_checks(iov, &nr_segs, &ocount, + VERIFY_READ); + if (ret) + goto out_dio; - count = ocount; - ret = generic_write_checks(file, ppos, &count, - S_ISBLK(inode->i_mode)); - if (ret) - goto out_dio; + count = ocount; + ret = generic_write_checks(file, ppos, &count, + S_ISBLK(inode->i_mode)); + if (ret) + goto out_dio; + if (direct_io) { written = generic_file_direct_write(iocb, iov, &nr_segs, *ppos, ppos, count, ocount); if (written < 0) { @@ -2008,7 +2008,10 @@ static ssize_t ocfs2_file_aio_write(struct kiocb *iocb, goto out_dio; } } else { - written = __generic_file_aio_write(iocb, iov, nr_segs, ppos); + current->backing_dev_info = file->f_mapping->backing_dev_info; + written = generic_file_buffered_write(iocb, iov, nr_segs, *ppos, + ppos, count, 0); + current->backing_dev_info = NULL; } out_dio: