diff options
-rw-r--r-- | fs/ext3/namei.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/fs/ext3/namei.c b/fs/ext3/namei.c index f6ce3e79d315..34b6d9bfc48a 100644 --- a/fs/ext3/namei.c +++ b/fs/ext3/namei.c | |||
@@ -1416,10 +1416,19 @@ static int make_indexed_dir(handle_t *handle, struct dentry *dentry, | |||
1416 | frame->at = entries; | 1416 | frame->at = entries; |
1417 | frame->bh = bh; | 1417 | frame->bh = bh; |
1418 | bh = bh2; | 1418 | bh = bh2; |
1419 | /* | ||
1420 | * Mark buffers dirty here so that if do_split() fails we write a | ||
1421 | * consistent set of buffers to disk. | ||
1422 | */ | ||
1423 | ext3_journal_dirty_metadata(handle, frame->bh); | ||
1424 | ext3_journal_dirty_metadata(handle, bh); | ||
1419 | de = do_split(handle,dir, &bh, frame, &hinfo, &retval); | 1425 | de = do_split(handle,dir, &bh, frame, &hinfo, &retval); |
1420 | dx_release (frames); | 1426 | if (!de) { |
1421 | if (!(de)) | 1427 | ext3_mark_inode_dirty(handle, dir); |
1428 | dx_release(frames); | ||
1422 | return retval; | 1429 | return retval; |
1430 | } | ||
1431 | dx_release(frames); | ||
1423 | 1432 | ||
1424 | return add_dirent_to_buf(handle, dentry, inode, de, bh); | 1433 | return add_dirent_to_buf(handle, dentry, inode, de, bh); |
1425 | } | 1434 | } |
@@ -2282,7 +2291,7 @@ out_stop: | |||
2282 | return err; | 2291 | return err; |
2283 | err_drop_inode: | 2292 | err_drop_inode: |
2284 | unlock_new_inode(inode); | 2293 | unlock_new_inode(inode); |
2285 | iput (inode); | 2294 | iput(inode); |
2286 | return err; | 2295 | return err; |
2287 | } | 2296 | } |
2288 | 2297 | ||