2011/5/5 Pádraig Brady <P@xxxxxxxxxxxxxx>: > On 14/04/11 17:10, Yongqiang Yang wrote: >> Hi, >> >> I am off my working computer. Maybe below fix could fix the problem. >> >> fs/ext4/extent.c >> static int ext4_ext_walk_space(struct inode *inode, ext4_lblk_t block, >> 1877 } else if (block >= le32_to_cpu(ex->ee_block)) { >> 1878 /* >> 1879 * some part of requested space is covered >> 1880 * by found extent >> 1881 */ >> 1882 start = block; >> 1883 end = le32_to_cpu(ex->ee_block) >> 1884 + ext4_ext_get_actual_len(ex); >> 1885 if (block + num < end) >> 1886 end = block + num; >> + if (!ext4_ext_is_uninitialized(ex)) >> 1887 exists = 1; >> 1888 } else { >> 1889 BUG(); >> 1890 } > > Hi, > > To follow up on the above. I'm under the impression > that ext4 is expected to return extents for what > is written, irrespective of whether it's reached the > disk or not. I.E. the preallocation case where this fails No. It just returns extent info now - allocated extents and delayed extents. In the preallocation case, it returns unwritten extents. And the code above does not work. > was an oversite, for which the above might fix. > > So is the above summary correct, and has there > been any more thoughts on a fix? > > cheers, > Pádraig. > -- Best Wishes Yongqiang Yang -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html