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 | ||
