Hi, as you maybe remember I ported the extents and mballoc patches for 2.6.18 of lustre-1.6.0.1 to lustre-1.4.10 and 2.6.20. Last week we run into a problem with these patches (I never run into that problem before, since the bug only happens on a freshly formated file system). Well, I just looked into the cause of the problems and I''m not sure if I maybe found a bug in the ext3-extents-2.6.18-vanilla.patch or if I''m misunderstanding something. for (i = 0; i < blocks_per_page; i++, iblock++) { if (blocks[i] != 0) continue; rc = ext3_get_blocks_handle(handle, inode, iblock, 1, &dummy, 1, 1); if (rc != 0 && rc != 1) { printk(KERN_INFO "ext3_map_inode_page: error reading " "block %ld\n", iblock); goto out; } rc = 0; /* Unmap any metadata buffers from the block mapping, to avoid * data corruption due to direct-write from Lustre being * clobbered by a later flush of the blockdev metadata buffer.*/ if (buffer_new(&dummy)) unmap_underlying_metadata(dummy.b_bdev, dummy.b_blocknr); blocks[i] = dummy.b_blocknr; if (created) created[i] = 1; } This is what we have in the extents patch from lustre-1.4.x, in lustre-1.6.0.1 it fails already with rc != 0 rc = ext3_get_blocks_handle(handle, inode, iblock, 1, &dummy, 1, 1); if (rc) { printk(KERN_INFO "ext3_map_inode_page: error reading " "block %ld\n", iblock); goto out; } According to the documentation of ext3_get_blocks_handle() rc>0 is a perfect return code: * The BKL may not be held on entry here. Be sure to take it early. * return > 0, # of blocks mapped or allocated. * return = 0, if plain lookup failed. * return < 0, error case. */ int ext3_get_blocks_handle(handle_t *handle, struct inode *inode, Is there something I don''t see? Thanks, Bernd -- Bernd Schubert Q-Leap Networks GmbH