From 007bcdcee687b22a770b11bd7bbc47d079dcc9bc Mon Sep 17 00:00:00 2001 From: Jeff Moyer Date: Fri, 3 Feb 2006 03:04:27 -0800 Subject: [PATCH] --- yaml --- r: 19658 b: refs/heads/master c: 35dc8161d0a6fa5e654bcb3d6240acc9ecb0a259 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/fs/direct-io.c | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index e1f7171ebb90..b64b68e6f52a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 835417967c10b6dfaffdffddba59196196e5d431 +refs/heads/master: 35dc8161d0a6fa5e654bcb3d6240acc9ecb0a259 diff --git a/trunk/fs/direct-io.c b/trunk/fs/direct-io.c index 30dbbd1df511..848044af7e16 100644 --- a/trunk/fs/direct-io.c +++ b/trunk/fs/direct-io.c @@ -857,6 +857,7 @@ static int do_direct_IO(struct dio *dio) /* Handle holes */ if (!buffer_mapped(map_bh)) { char *kaddr; + loff_t i_size_aligned; /* AKPM: eargh, -ENOTBLK is a hack */ if (dio->rw == WRITE) { @@ -864,8 +865,14 @@ static int do_direct_IO(struct dio *dio) return -ENOTBLK; } + /* + * Be sure to account for a partial block as the + * last block in the file + */ + i_size_aligned = ALIGN(i_size_read(dio->inode), + 1 << blkbits); if (dio->block_in_file >= - i_size_read(dio->inode)>>blkbits) { + i_size_aligned >> blkbits) { /* We hit eof */ page_cache_release(page); goto out;