Hi Andrew, Today's linux-next merge of the akpm tree got a conflict in fs/direct-io.c between commit eb28be2b4c0a ("direct-io: separate fields only used in the submission path from struct dio") from Linus' tree and commit "fs/direct-io.c: salcuate fs_count correctly in get_more_blocks()" from the akpm tree. I fixed it up (see below) and can carry the fix as necessary. -- Cheers, Stephen Rothwell sfr@canb.auug.org.au diff --cc fs/direct-io.c index d740ab6,b05f24e..0000000 --- a/fs/direct-io.c +++ b/fs/direct-io.c @@@ -575,14 -564,13 +575,13 @@@ static inline int dio_bio_reap(struct d * buffer_mapped(). However the direct-io code will only process holes one * block at a time - it will repeatedly call get_block() as it walks the hole. */ -static int get_more_blocks(struct dio *dio) +static int get_more_blocks(struct dio *dio, struct dio_submit *sdio, + struct buffer_head *map_bh) { int ret; - struct buffer_head *map_bh = &dio->map_bh; sector_t fs_startblk; /* Into file, in filesystem-sized blocks */ + sector_t fs_endblk; /* Into file, in filesystem-sized blocks */ unsigned long fs_count; /* Number of filesystem-sized blocks */ - unsigned long dio_count;/* Number of dio_block-sized blocks */ - unsigned long blkmask; int create; /* @@@ -591,13 -579,10 +590,10 @@@ */ ret = dio->page_errors; if (ret == 0) { - BUG_ON(dio->block_in_file >= dio->final_block_in_request); - fs_startblk = dio->block_in_file >> dio->blkfactor; - fs_endblk = (dio->final_block_in_request - 1) >> dio->blkfactor; + BUG_ON(sdio->block_in_file >= sdio->final_block_in_request); + fs_startblk = sdio->block_in_file >> sdio->blkfactor; - dio_count = sdio->final_block_in_request - sdio->block_in_file; - fs_count = dio_count >> sdio->blkfactor; - blkmask = (1 << sdio->blkfactor) - 1; - if (dio_count & blkmask) - fs_count++; ++ fs_endblk = (sdio->final_block_in_request - 1) >> sdio->blkfactor; + fs_count = fs_endblk - fs_startblk + 1; map_bh->b_state = 0; map_bh->b_size = fs_count << dio->inode->i_blkbits;