|
@@ -969,6 +969,7 @@ static struct buffer_head * ext3_dx_find_entry(struct dentry *dentry,
|
|
|
(block<<EXT3_BLOCK_SIZE_BITS(sb))
|
|
|
+((char *)de - bh->b_data))) {
|
|
|
brelse (bh);
|
|
|
+ *err = ERR_BAD_DX_DIR;
|
|
|
goto errout;
|
|
|
}
|
|
|
*res_dir = de;
|
|
@@ -1134,9 +1135,9 @@ static struct ext3_dir_entry_2 *do_split(handle_t *handle, struct inode *dir,
|
|
|
char *data1 = (*bh)->b_data, *data2;
|
|
|
unsigned split;
|
|
|
struct ext3_dir_entry_2 *de = NULL, *de2;
|
|
|
- int err;
|
|
|
+ int err = 0;
|
|
|
|
|
|
- bh2 = ext3_append (handle, dir, &newblock, error);
|
|
|
+ bh2 = ext3_append (handle, dir, &newblock, &err);
|
|
|
if (!(bh2)) {
|
|
|
brelse(*bh);
|
|
|
*bh = NULL;
|
|
@@ -1145,14 +1146,9 @@ static struct ext3_dir_entry_2 *do_split(handle_t *handle, struct inode *dir,
|
|
|
|
|
|
BUFFER_TRACE(*bh, "get_write_access");
|
|
|
err = ext3_journal_get_write_access(handle, *bh);
|
|
|
- if (err) {
|
|
|
- journal_error:
|
|
|
- brelse(*bh);
|
|
|
- brelse(bh2);
|
|
|
- *bh = NULL;
|
|
|
- ext3_std_error(dir->i_sb, err);
|
|
|
- goto errout;
|
|
|
- }
|
|
|
+ if (err)
|
|
|
+ goto journal_error;
|
|
|
+
|
|
|
BUFFER_TRACE(frame->bh, "get_write_access");
|
|
|
err = ext3_journal_get_write_access(handle, frame->bh);
|
|
|
if (err)
|
|
@@ -1195,8 +1191,16 @@ static struct ext3_dir_entry_2 *do_split(handle_t *handle, struct inode *dir,
|
|
|
goto journal_error;
|
|
|
brelse (bh2);
|
|
|
dxtrace(dx_show_index ("frame", frame->entries));
|
|
|
-errout:
|
|
|
return de;
|
|
|
+
|
|
|
+journal_error:
|
|
|
+ brelse(*bh);
|
|
|
+ brelse(bh2);
|
|
|
+ *bh = NULL;
|
|
|
+ ext3_std_error(dir->i_sb, err);
|
|
|
+errout:
|
|
|
+ *error = err;
|
|
|
+ return NULL;
|
|
|
}
|
|
|
#endif
|
|
|
|