X-Git-Url: http://pilppa.org/gitweb/?a=blobdiff_plain;f=fs%2Fdirect-io.c;h=848044af7e1677e6fba1c2d3f76897a916b1bb93;hb=d93077fb0e7cb9d4f4094a649501d840c55fdc8b;hp=30dbbd1df51191a68d536ca430fad8001a80c39f;hpb=1b1dcc1b57a49136f118a0f16367256ff9994a69;p=linux-2.6-omap-h63xx.git diff --git a/fs/direct-io.c b/fs/direct-io.c index 30dbbd1df51..848044af7e1 100644 --- a/fs/direct-io.c +++ b/fs/direct-io.c @@ -857,6 +857,7 @@ do_holes: /* 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 @@ do_holes: 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;