diff options
Diffstat (limited to 'fs/ocfs2/dir.c')
-rw-r--r-- | fs/ocfs2/dir.c | 48 |
1 files changed, 31 insertions, 17 deletions
diff --git a/fs/ocfs2/dir.c b/fs/ocfs2/dir.c index 3708fe482e3e..45e4e03d8f71 100644 --- a/fs/ocfs2/dir.c +++ b/fs/ocfs2/dir.c | |||
@@ -378,14 +378,18 @@ int ocfs2_update_entry(struct inode *dir, handle_t *handle, | |||
378 | struct inode *new_entry_inode) | 378 | struct inode *new_entry_inode) |
379 | { | 379 | { |
380 | int ret; | 380 | int ret; |
381 | ocfs2_journal_access_func access = ocfs2_journal_access_db; | ||
381 | 382 | ||
382 | /* | 383 | /* |
383 | * The same code works fine for both inline-data and extent | 384 | * The same code works fine for both inline-data and extent |
384 | * based directories, so no need to split this up. | 385 | * based directories, so no need to split this up. The only |
386 | * difference is the journal_access function. | ||
385 | */ | 387 | */ |
386 | 388 | ||
387 | ret = ocfs2_journal_access(handle, dir, de_bh, | 389 | if (OCFS2_I(dir)->ip_dyn_features & OCFS2_INLINE_DATA_FL) |
388 | OCFS2_JOURNAL_ACCESS_WRITE); | 390 | access = ocfs2_journal_access_di; |
391 | |||
392 | ret = access(handle, dir, de_bh, OCFS2_JOURNAL_ACCESS_WRITE); | ||
389 | if (ret) { | 393 | if (ret) { |
390 | mlog_errno(ret); | 394 | mlog_errno(ret); |
391 | goto out; | 395 | goto out; |
@@ -407,9 +411,13 @@ static int __ocfs2_delete_entry(handle_t *handle, struct inode *dir, | |||
407 | { | 411 | { |
408 | struct ocfs2_dir_entry *de, *pde; | 412 | struct ocfs2_dir_entry *de, *pde; |
409 | int i, status = -ENOENT; | 413 | int i, status = -ENOENT; |
414 | ocfs2_journal_access_func access = ocfs2_journal_access_db; | ||
410 | 415 | ||
411 | mlog_entry("(0x%p, 0x%p, 0x%p, 0x%p)\n", handle, dir, de_del, bh); | 416 | mlog_entry("(0x%p, 0x%p, 0x%p, 0x%p)\n", handle, dir, de_del, bh); |
412 | 417 | ||
418 | if (OCFS2_I(dir)->ip_dyn_features & OCFS2_INLINE_DATA_FL) | ||
419 | access = ocfs2_journal_access_di; | ||
420 | |||
413 | i = 0; | 421 | i = 0; |
414 | pde = NULL; | 422 | pde = NULL; |
415 | de = (struct ocfs2_dir_entry *) first_de; | 423 | de = (struct ocfs2_dir_entry *) first_de; |
@@ -420,8 +428,8 @@ static int __ocfs2_delete_entry(handle_t *handle, struct inode *dir, | |||
420 | goto bail; | 428 | goto bail; |
421 | } | 429 | } |
422 | if (de == de_del) { | 430 | if (de == de_del) { |
423 | status = ocfs2_journal_access(handle, dir, bh, | 431 | status = access(handle, dir, bh, |
424 | OCFS2_JOURNAL_ACCESS_WRITE); | 432 | OCFS2_JOURNAL_ACCESS_WRITE); |
425 | if (status < 0) { | 433 | if (status < 0) { |
426 | status = -EIO; | 434 | status = -EIO; |
427 | mlog_errno(status); | 435 | mlog_errno(status); |
@@ -581,8 +589,14 @@ int __ocfs2_add_entry(handle_t *handle, | |||
581 | goto bail; | 589 | goto bail; |
582 | } | 590 | } |
583 | 591 | ||
584 | status = ocfs2_journal_access(handle, dir, insert_bh, | 592 | if (insert_bh == parent_fe_bh) |
585 | OCFS2_JOURNAL_ACCESS_WRITE); | 593 | status = ocfs2_journal_access_di(handle, dir, |
594 | insert_bh, | ||
595 | OCFS2_JOURNAL_ACCESS_WRITE); | ||
596 | else | ||
597 | status = ocfs2_journal_access_db(handle, dir, | ||
598 | insert_bh, | ||
599 | OCFS2_JOURNAL_ACCESS_WRITE); | ||
586 | /* By now the buffer is marked for journaling */ | 600 | /* By now the buffer is marked for journaling */ |
587 | offset += le16_to_cpu(de->rec_len); | 601 | offset += le16_to_cpu(de->rec_len); |
588 | if (le64_to_cpu(de->inode)) { | 602 | if (le64_to_cpu(de->inode)) { |
@@ -1081,8 +1095,8 @@ static int ocfs2_fill_new_dir_id(struct ocfs2_super *osb, | |||
1081 | struct ocfs2_inline_data *data = &di->id2.i_data; | 1095 | struct ocfs2_inline_data *data = &di->id2.i_data; |
1082 | unsigned int size = le16_to_cpu(data->id_count); | 1096 | unsigned int size = le16_to_cpu(data->id_count); |
1083 | 1097 | ||
1084 | ret = ocfs2_journal_access(handle, inode, di_bh, | 1098 | ret = ocfs2_journal_access_di(handle, inode, di_bh, |
1085 | OCFS2_JOURNAL_ACCESS_WRITE); | 1099 | OCFS2_JOURNAL_ACCESS_WRITE); |
1086 | if (ret) { | 1100 | if (ret) { |
1087 | mlog_errno(ret); | 1101 | mlog_errno(ret); |
1088 | goto out; | 1102 | goto out; |
@@ -1129,8 +1143,8 @@ static int ocfs2_fill_new_dir_el(struct ocfs2_super *osb, | |||
1129 | 1143 | ||
1130 | ocfs2_set_new_buffer_uptodate(inode, new_bh); | 1144 | ocfs2_set_new_buffer_uptodate(inode, new_bh); |
1131 | 1145 | ||
1132 | status = ocfs2_journal_access(handle, inode, new_bh, | 1146 | status = ocfs2_journal_access_db(handle, inode, new_bh, |
1133 | OCFS2_JOURNAL_ACCESS_CREATE); | 1147 | OCFS2_JOURNAL_ACCESS_CREATE); |
1134 | if (status < 0) { | 1148 | if (status < 0) { |
1135 | mlog_errno(status); | 1149 | mlog_errno(status); |
1136 | goto bail; | 1150 | goto bail; |
@@ -1292,8 +1306,8 @@ static int ocfs2_expand_inline_dir(struct inode *dir, struct buffer_head *di_bh, | |||
1292 | 1306 | ||
1293 | ocfs2_set_new_buffer_uptodate(dir, dirdata_bh); | 1307 | ocfs2_set_new_buffer_uptodate(dir, dirdata_bh); |
1294 | 1308 | ||
1295 | ret = ocfs2_journal_access(handle, dir, dirdata_bh, | 1309 | ret = ocfs2_journal_access_db(handle, dir, dirdata_bh, |
1296 | OCFS2_JOURNAL_ACCESS_CREATE); | 1310 | OCFS2_JOURNAL_ACCESS_CREATE); |
1297 | if (ret) { | 1311 | if (ret) { |
1298 | mlog_errno(ret); | 1312 | mlog_errno(ret); |
1299 | goto out_commit; | 1313 | goto out_commit; |
@@ -1319,8 +1333,8 @@ static int ocfs2_expand_inline_dir(struct inode *dir, struct buffer_head *di_bh, | |||
1319 | * We let the later dirent insert modify c/mtime - to the user | 1333 | * We let the later dirent insert modify c/mtime - to the user |
1320 | * the data hasn't changed. | 1334 | * the data hasn't changed. |
1321 | */ | 1335 | */ |
1322 | ret = ocfs2_journal_access(handle, dir, di_bh, | 1336 | ret = ocfs2_journal_access_di(handle, dir, di_bh, |
1323 | OCFS2_JOURNAL_ACCESS_CREATE); | 1337 | OCFS2_JOURNAL_ACCESS_CREATE); |
1324 | if (ret) { | 1338 | if (ret) { |
1325 | mlog_errno(ret); | 1339 | mlog_errno(ret); |
1326 | goto out_commit; | 1340 | goto out_commit; |
@@ -1583,8 +1597,8 @@ do_extend: | |||
1583 | 1597 | ||
1584 | ocfs2_set_new_buffer_uptodate(dir, new_bh); | 1598 | ocfs2_set_new_buffer_uptodate(dir, new_bh); |
1585 | 1599 | ||
1586 | status = ocfs2_journal_access(handle, dir, new_bh, | 1600 | status = ocfs2_journal_access_db(handle, dir, new_bh, |
1587 | OCFS2_JOURNAL_ACCESS_CREATE); | 1601 | OCFS2_JOURNAL_ACCESS_CREATE); |
1588 | if (status < 0) { | 1602 | if (status < 0) { |
1589 | mlog_errno(status); | 1603 | mlog_errno(status); |
1590 | goto bail; | 1604 | goto bail; |