aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ext4/namei.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ext4/namei.c')
-rw-r--r--fs/ext4/namei.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
index e7e1d79a7d75..4ec57be5baf5 100644
--- a/fs/ext4/namei.c
+++ b/fs/ext4/namei.c
@@ -36,7 +36,6 @@
36#include <linux/quotaops.h> 36#include <linux/quotaops.h>
37#include <linux/buffer_head.h> 37#include <linux/buffer_head.h>
38#include <linux/bio.h> 38#include <linux/bio.h>
39#include <linux/smp_lock.h>
40 39
41#include "namei.h" 40#include "namei.h"
42#include "xattr.h" 41#include "xattr.h"
@@ -967,6 +966,7 @@ static struct buffer_head * ext4_dx_find_entry(struct dentry *dentry,
967 (block<<EXT4_BLOCK_SIZE_BITS(sb)) 966 (block<<EXT4_BLOCK_SIZE_BITS(sb))
968 +((char *)de - bh->b_data))) { 967 +((char *)de - bh->b_data))) {
969 brelse (bh); 968 brelse (bh);
969 *err = ERR_BAD_DX_DIR;
970 goto errout; 970 goto errout;
971 } 971 }
972 *res_dir = de; 972 *res_dir = de;
@@ -1132,9 +1132,9 @@ static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir,
1132 char *data1 = (*bh)->b_data, *data2; 1132 char *data1 = (*bh)->b_data, *data2;
1133 unsigned split; 1133 unsigned split;
1134 struct ext4_dir_entry_2 *de = NULL, *de2; 1134 struct ext4_dir_entry_2 *de = NULL, *de2;
1135 int err; 1135 int err = 0;
1136 1136
1137 bh2 = ext4_append (handle, dir, &newblock, error); 1137 bh2 = ext4_append (handle, dir, &newblock, &err);
1138 if (!(bh2)) { 1138 if (!(bh2)) {
1139 brelse(*bh); 1139 brelse(*bh);
1140 *bh = NULL; 1140 *bh = NULL;
@@ -1143,14 +1143,9 @@ static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir,
1143 1143
1144 BUFFER_TRACE(*bh, "get_write_access"); 1144 BUFFER_TRACE(*bh, "get_write_access");
1145 err = ext4_journal_get_write_access(handle, *bh); 1145 err = ext4_journal_get_write_access(handle, *bh);
1146 if (err) { 1146 if (err)
1147 journal_error: 1147 goto journal_error;
1148 brelse(*bh); 1148
1149 brelse(bh2);
1150 *bh = NULL;
1151 ext4_std_error(dir->i_sb, err);
1152 goto errout;
1153 }
1154 BUFFER_TRACE(frame->bh, "get_write_access"); 1149 BUFFER_TRACE(frame->bh, "get_write_access");
1155 err = ext4_journal_get_write_access(handle, frame->bh); 1150 err = ext4_journal_get_write_access(handle, frame->bh);
1156 if (err) 1151 if (err)
@@ -1193,8 +1188,16 @@ static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir,
1193 goto journal_error; 1188 goto journal_error;
1194 brelse (bh2); 1189 brelse (bh2);
1195 dxtrace(dx_show_index ("frame", frame->entries)); 1190 dxtrace(dx_show_index ("frame", frame->entries));
1196errout:
1197 return de; 1191 return de;
1192
1193journal_error:
1194 brelse(*bh);
1195 brelse(bh2);
1196 *bh = NULL;
1197 ext4_std_error(dir->i_sb, err);
1198errout:
1199 *error = err;
1200 return NULL;
1198} 1201}
1199#endif 1202#endif
1200 1203