2 - multiblock get_block() for direct I/O
4 Index: linux-2.6.9-full/include/linux/ext3_extents.h
5 ===================================================================
6 --- linux-2.6.9-full.orig/include/linux/ext3_extents.h 2007-03-23 15:57:00.000000000 +0300
7 +++ linux-2.6.9-full/include/linux/ext3_extents.h 2007-03-28 00:59:32.000000000 +0400
8 @@ -205,7 +205,7 @@ typedef int (*ext_prepare_callback)(stru
9 #define EXT_DEPTH(__tree__) (EXT_ROOT_HDR(__tree__)->eh_depth)
10 #define EXT_GENERATION(__tree__) EXT_HDR_GEN(EXT_ROOT_HDR(__tree__))
12 -#define EXT_ASSERT(__x__) if (!(__x__)) BUG();
13 +#define EXT_ASSERT(__x__) if (unlikely(!(__x__))) BUG();
15 #define EXT_CHECK_PATH(tree,path) \
17 Index: linux-2.6.9-full/fs/ext3/extents.c
18 ===================================================================
19 --- linux-2.6.9-full.orig/fs/ext3/extents.c 2007-03-23 15:57:00.000000000 +0300
20 +++ linux-2.6.9-full/fs/ext3/extents.c 2007-03-28 00:59:41.000000000 +0400
21 @@ -895,6 +895,8 @@ repeat:
22 /* if we found index with free entry, then use that
23 * entry: create all needed subtree and add new leaf */
24 err = ext3_ext_split(handle, tree, path, newext, i);
29 ext3_ext_drop_refs(path);
30 @@ -904,12 +906,16 @@ repeat:
32 /* tree is full, time to grow in depth */
33 err = ext3_ext_grow_indepth(handle, tree, path, newext);
38 ext3_ext_drop_refs(path);
39 path = ext3_ext_find_extent(tree, newext->ee_block, path);
47 * only first (depth 0 -> 1) produces free space
48 @@ -922,10 +928,8 @@ repeat:
61 @@ -1992,21 +1996,10 @@ static int ext3_new_block_cb(handle_t *h
62 EXT_ASSERT(ex->ee_start);
63 EXT_ASSERT(ex->ee_len);
65 - /* reuse block from the extent to order data/metadata */
66 - newblock = ex->ee_start++;
68 - if (ex->ee_len == 0) {
70 - /* allocate new block for the extent */
71 - goal = ext3_ext_find_goal(inode, path, ex->ee_block);
72 - ex->ee_start = ext3_new_block(handle, inode, goal, err);
73 - ex->ee_start_hi = 0;
74 - if (ex->ee_start == 0) {
75 - /* error occured: restore old extent */
76 - ex->ee_start = newblock;
80 + /* allocate new block for the extent */
81 + goal = ext3_ext_find_goal(inode, path, ex->ee_block);
82 + newblock = ext3_new_block(handle, inode, goal, err);