Message ID | 877i5ozprb.fsf@burly.wgtn.ondioline.org |
---|---|
State | Rejected, archived |
Headers | show |
On Thu, Dec 25, 2008 at 08:18:48PM +1300, Paul Collins wrote: > My real concern, which I didn't highlight well and buried way down in my > original report to boot, was e2fsck blowing up like it did. Hardware > being what it is, I imagine at some point extent headers will get > corrupted, and losing one file is of course preferable to losing the > entire filesystem. Yeah, I know about that problem. It was highlighted recently but what with the end of the year coming up I haven't had a chance to fix it yet. It's an embarassing oversight on my part; I didn't notice that I failed to handle this case because it happens relatively rarely that an extent tree has a depth >= 2 in the first place, since this error only happens when an non-leaf interior node gets corrupted. I had left it as an "we'll handle this later" case, and I never got back to it. The short-term workaround is simply to use debugfs and use the clri function: debugfs -w /dev/sdb1 debugfs: clri <38979> debugfs: quit ... and then run e2fsck. I'll get this fixed in the next maintenance release of e2fsprogs, though, which will be out soon. We have a few ext4 related problems that I really need to get fixed and out the door. - Ted -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/resize/main.c b/resize/main.c index 3de333e..fb4fa99 100644 --- a/resize/main.c +++ b/resize/main.c @@ -426,6 +426,13 @@ int main (int argc, char ** argv) "long. Nothing to do!\n\n"), new_size); exit(0); } + if ((new_size < fs->super->s_blocks_count) && + (fs->super->s_feature_incompat & EXT3_FEATURE_INCOMPAT_EXTENTS)) { + fprintf(stderr, _("Reducing the size of a " + "filesystem with extents enabled\n" + "is currently not supported.\n")); + exit(1); + } if (mount_flags & EXT2_MF_MOUNTED) { retval = online_resize_fs(fs, mtpt, &new_size, flags); } else {