📄 ext3-extents-fixes-2.6.9-rhel4.patch
字号:
- minor fixes - multiblock get_block() for direct I/OIndex: linux-2.6.9-full/include/linux/ext3_extents.h===================================================================--- linux-2.6.9-full.orig/include/linux/ext3_extents.h 2007-03-23 15:57:00.000000000 +0300+++ linux-2.6.9-full/include/linux/ext3_extents.h 2007-03-28 00:59:32.000000000 +0400@@ -205,7 +205,7 @@ typedef int (*ext_prepare_callback)(stru #define EXT_DEPTH(__tree__) (EXT_ROOT_HDR(__tree__)->eh_depth) #define EXT_GENERATION(__tree__) EXT_HDR_GEN(EXT_ROOT_HDR(__tree__)) -#define EXT_ASSERT(__x__) if (!(__x__)) BUG();+#define EXT_ASSERT(__x__) if (unlikely(!(__x__))) BUG(); #define EXT_CHECK_PATH(tree,path) \ { \Index: linux-2.6.9-full/fs/ext3/extents.c===================================================================--- linux-2.6.9-full.orig/fs/ext3/extents.c 2007-03-23 15:57:00.000000000 +0300+++ linux-2.6.9-full/fs/ext3/extents.c 2007-03-28 00:59:41.000000000 +0400@@ -895,6 +895,8 @@ repeat: /* if we found index with free entry, then use that * entry: create all needed subtree and add new leaf */ err = ext3_ext_split(handle, tree, path, newext, i);+ if (err)+ goto out; /* refill path */ ext3_ext_drop_refs(path);@@ -904,12 +906,16 @@ repeat: } else { /* tree is full, time to grow in depth */ err = ext3_ext_grow_indepth(handle, tree, path, newext);+ if (err)+ goto out; /* refill path */ ext3_ext_drop_refs(path); path = ext3_ext_find_extent(tree, newext->ee_block, path);- if (IS_ERR(path))+ if (IS_ERR(path)) { err = PTR_ERR(path);+ goto out;+ } /* * only first (depth 0 -> 1) produces free space@@ -922,10 +928,8 @@ repeat: } } - if (err)- return err;-- return 0;+out:+ return err; } /*@@ -1992,21 +1996,10 @@ static int ext3_new_block_cb(handle_t *h EXT_ASSERT(ex->ee_start); EXT_ASSERT(ex->ee_len); - /* reuse block from the extent to order data/metadata */- newblock = ex->ee_start++;- ex->ee_len--;- if (ex->ee_len == 0) {- ex->ee_len = 1;- /* allocate new block for the extent */- goal = ext3_ext_find_goal(inode, path, ex->ee_block);- ex->ee_start = ext3_new_block(handle, inode, goal, err);- ex->ee_start_hi = 0;- if (ex->ee_start == 0) {- /* error occured: restore old extent */- ex->ee_start = newblock;- return 0;- }- }+ /* allocate new block for the extent */+ goal = ext3_ext_find_goal(inode, path, ex->ee_block);+ newblock = ext3_new_block(handle, inode, goal, err);+ return newblock; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -