Hi list,
I am testing some direct-io patches.
xfs_tests/xfs/080 failed.
It's strange.
There is no hole in "rwtest.file",
but when read it at some offset it returns zero because of hole.
root@block:~# xfs_io -c bmap /mnt/test/rwtest.file
/mnt/test/rwtest.file:
0: [0..125671]: 160..125831
Then I read at file offset 659456,
root@block:~# dd if=/mnt/test/rwtest.file of=tmp.file bs=512 skip=1288 count=1
The code actually goes to below if statements.
Any idea what's wrong?
139 static struct bio *
140 do_mpage_readpage(struct bio *bio, struct page *page, unsigned nr_pages,
141 sector_t *last_block_in_bio, struct buffer_head *map_bh,
142 unsigned long *first_logical_block, get_block_t get_block)
143 {
....
....
209 if (!buffer_mapped(map_bh)) {
210 fully_mapped = 0;
211 if (first_hole == blocks_per_page)
212 first_hole = page_block;
213 page_block++;
214 block_in_file++;
215 continue;
216 }
....
....
249 if (first_hole != blocks_per_page) {
250 zero_user_segment(page, first_hole << blkbits,
PAGE_CACHE_SIZE);
251 if (first_hole == 0) {
252 SetPageUptodate(page);
253 unlock_page(page);
254 goto out;
255 }
Thanks,
Ming
|