From 6f5f5465f4d6f73ed8efd7e0fc9e4955fcaf16e8 Mon Sep 17 00:00:00 2001 From: anujbillore-0-0 Date: Wed, 11 Mar 2026 13:18:27 +0530 Subject: [PATCH] btrfs: Replace panic() with proper error handling in Inode.cpp Replace kernel panics with ERROR() logging and proper error return codes for unhandled extent types and unsupported compression types in FindBlock() and ReadAt(). This prevents system crashes when encountering unknown/unimplemented extent types. Hashtags: gsoc2026 Change-Id: I0aec28dbbb5304c149f4a969d7017c347c876648 Reviewed-on: https://review.haiku-os.org/c/haiku/+/10475 Tested-by: Commit checker robot Reviewed-by: Adrien Destugues Haiku-Format: Haiku-format Bot --- src/add-ons/kernel/file_systems/btrfs/Inode.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/add-ons/kernel/file_systems/btrfs/Inode.cpp b/src/add-ons/kernel/file_systems/btrfs/Inode.cpp index b2f80fdcad..09c69547bf 100644 --- a/src/add-ons/kernel/file_systems/btrfs/Inode.cpp +++ b/src/add-ons/kernel/file_systems/btrfs/Inode.cpp @@ -196,8 +196,11 @@ Inode::FindBlock(off_t pos, off_t& physical, off_t* _length) off_t logical = 0; if (extent_data->Type() == BTRFS_EXTENT_DATA_REGULAR) logical = diff + extent_data->disk_offset; - else - panic("unknown extent type; %d\n", extent_data->Type()); + else { + ERROR("unknown extent type; %d\n", extent_data->Type()); + free(extent_data); + return B_BAD_DATA; + } status = fVolume->FindBlock(logical, physical); if (_length != NULL) *_length = extent_data->Size() - diff; @@ -270,7 +273,7 @@ Inode::ReadAt(off_t pos, uint8* buffer, size_t* _length) off_t diff = pos - search_key.Offset(); if (extent_data->Type() != BTRFS_EXTENT_DATA_INLINE) { - panic("unknown extent type; %d\n", extent_data->Type()); + ERROR("unknown extent type; %d\n", extent_data->Type()); return B_BAD_DATA; }