diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-05-21 10:20:17 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-05-21 10:20:17 -0400 |
commit | 03e62303cf56e87337115f14842321043df2b4bb (patch) | |
tree | 3024495955beccddbae347d99613bcdd33801ee4 /fs/ocfs2/inode.c | |
parent | 33cf23b0a535475aead57707cb9f4fe135a93544 (diff) | |
parent | 18d3a98f3c1b0e27ce026afa4d1ef042f2903726 (diff) |
Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2
* 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2: (47 commits)
ocfs2: Silence a gcc warning.
ocfs2: Don't retry xattr set in case value extension fails.
ocfs2:dlm: avoid dlm->ast_lock lockres->spinlock dependency break
ocfs2: Reset xattr value size after xa_cleanup_value_truncate().
fs/ocfs2/dlm: Use kstrdup
fs/ocfs2/dlm: Drop memory allocation cast
Ocfs2: Optimize punching-hole code.
Ocfs2: Make ocfs2_find_cpos_for_left_leaf() public.
Ocfs2: Fix hole punching to correctly do CoW during cluster zeroing.
Ocfs2: Optimize ocfs2 truncate to use ocfs2_remove_btree_range() instead.
ocfs2: Block signals for mkdir/link/symlink/O_CREAT.
ocfs2: Wrap signal blocking in void functions.
ocfs2/dlm: Increase o2dlm lockres hash size
ocfs2: Make ocfs2_extend_trans() really extend.
ocfs2/trivial: Code cleanup for allocation reservation.
ocfs2: make ocfs2_adjust_resv_from_alloc simple.
ocfs2: Make nointr a default mount option
ocfs2/dlm: Make o2dlm domain join/leave messages KERN_NOTICE
o2net: log socket state changes
ocfs2: print node # when tcp fails
...
Diffstat (limited to 'fs/ocfs2/inode.c')
-rw-r--r-- | fs/ocfs2/inode.c | 45 |
1 files changed, 14 insertions, 31 deletions
diff --git a/fs/ocfs2/inode.c b/fs/ocfs2/inode.c index af189887201c..abb0a95cc717 100644 --- a/fs/ocfs2/inode.c +++ b/fs/ocfs2/inode.c | |||
@@ -376,6 +376,10 @@ void ocfs2_populate_inode(struct inode *inode, struct ocfs2_dinode *fe, | |||
376 | 376 | ||
377 | OCFS2_I(inode)->ip_last_used_slot = 0; | 377 | OCFS2_I(inode)->ip_last_used_slot = 0; |
378 | OCFS2_I(inode)->ip_last_used_group = 0; | 378 | OCFS2_I(inode)->ip_last_used_group = 0; |
379 | |||
380 | if (S_ISDIR(inode->i_mode)) | ||
381 | ocfs2_resv_set_type(&OCFS2_I(inode)->ip_la_data_resv, | ||
382 | OCFS2_RESV_FLAG_DIR); | ||
379 | mlog_exit_void(); | 383 | mlog_exit_void(); |
380 | } | 384 | } |
381 | 385 | ||
@@ -539,7 +543,6 @@ static int ocfs2_truncate_for_delete(struct ocfs2_super *osb, | |||
539 | struct buffer_head *fe_bh) | 543 | struct buffer_head *fe_bh) |
540 | { | 544 | { |
541 | int status = 0; | 545 | int status = 0; |
542 | struct ocfs2_truncate_context *tc = NULL; | ||
543 | struct ocfs2_dinode *fe; | 546 | struct ocfs2_dinode *fe; |
544 | handle_t *handle = NULL; | 547 | handle_t *handle = NULL; |
545 | 548 | ||
@@ -582,13 +585,7 @@ static int ocfs2_truncate_for_delete(struct ocfs2_super *osb, | |||
582 | ocfs2_commit_trans(osb, handle); | 585 | ocfs2_commit_trans(osb, handle); |
583 | handle = NULL; | 586 | handle = NULL; |
584 | 587 | ||
585 | status = ocfs2_prepare_truncate(osb, inode, fe_bh, &tc); | 588 | status = ocfs2_commit_truncate(osb, inode, fe_bh); |
586 | if (status < 0) { | ||
587 | mlog_errno(status); | ||
588 | goto out; | ||
589 | } | ||
590 | |||
591 | status = ocfs2_commit_truncate(osb, inode, fe_bh, tc); | ||
592 | if (status < 0) { | 589 | if (status < 0) { |
593 | mlog_errno(status); | 590 | mlog_errno(status); |
594 | goto out; | 591 | goto out; |
@@ -659,12 +656,7 @@ static int ocfs2_remove_inode(struct inode *inode, | |||
659 | 656 | ||
660 | di->i_dtime = cpu_to_le64(CURRENT_TIME.tv_sec); | 657 | di->i_dtime = cpu_to_le64(CURRENT_TIME.tv_sec); |
661 | di->i_flags &= cpu_to_le32(~(OCFS2_VALID_FL | OCFS2_ORPHANED_FL)); | 658 | di->i_flags &= cpu_to_le32(~(OCFS2_VALID_FL | OCFS2_ORPHANED_FL)); |
662 | 659 | ocfs2_journal_dirty(handle, di_bh); | |
663 | status = ocfs2_journal_dirty(handle, di_bh); | ||
664 | if (status < 0) { | ||
665 | mlog_errno(status); | ||
666 | goto bail_commit; | ||
667 | } | ||
668 | 660 | ||
669 | ocfs2_remove_from_cache(INODE_CACHE(inode), di_bh); | 661 | ocfs2_remove_from_cache(INODE_CACHE(inode), di_bh); |
670 | dquot_free_inode(inode); | 662 | dquot_free_inode(inode); |
@@ -980,7 +972,7 @@ static void ocfs2_cleanup_delete_inode(struct inode *inode, | |||
980 | void ocfs2_delete_inode(struct inode *inode) | 972 | void ocfs2_delete_inode(struct inode *inode) |
981 | { | 973 | { |
982 | int wipe, status; | 974 | int wipe, status; |
983 | sigset_t blocked, oldset; | 975 | sigset_t oldset; |
984 | struct buffer_head *di_bh = NULL; | 976 | struct buffer_head *di_bh = NULL; |
985 | 977 | ||
986 | mlog_entry("(inode->i_ino = %lu)\n", inode->i_ino); | 978 | mlog_entry("(inode->i_ino = %lu)\n", inode->i_ino); |
@@ -1007,13 +999,7 @@ void ocfs2_delete_inode(struct inode *inode) | |||
1007 | * messaging paths may return us -ERESTARTSYS. Which would | 999 | * messaging paths may return us -ERESTARTSYS. Which would |
1008 | * cause us to exit early, resulting in inodes being orphaned | 1000 | * cause us to exit early, resulting in inodes being orphaned |
1009 | * forever. */ | 1001 | * forever. */ |
1010 | sigfillset(&blocked); | 1002 | ocfs2_block_signals(&oldset); |
1011 | status = sigprocmask(SIG_BLOCK, &blocked, &oldset); | ||
1012 | if (status < 0) { | ||
1013 | mlog_errno(status); | ||
1014 | ocfs2_cleanup_delete_inode(inode, 1); | ||
1015 | goto bail; | ||
1016 | } | ||
1017 | 1003 | ||
1018 | /* | 1004 | /* |
1019 | * Synchronize us against ocfs2_get_dentry. We take this in | 1005 | * Synchronize us against ocfs2_get_dentry. We take this in |
@@ -1087,9 +1073,7 @@ bail_unlock_nfs_sync: | |||
1087 | ocfs2_nfs_sync_unlock(OCFS2_SB(inode->i_sb), 0); | 1073 | ocfs2_nfs_sync_unlock(OCFS2_SB(inode->i_sb), 0); |
1088 | 1074 | ||
1089 | bail_unblock: | 1075 | bail_unblock: |
1090 | status = sigprocmask(SIG_SETMASK, &oldset, NULL); | 1076 | ocfs2_unblock_signals(&oldset); |
1091 | if (status < 0) | ||
1092 | mlog_errno(status); | ||
1093 | bail: | 1077 | bail: |
1094 | clear_inode(inode); | 1078 | clear_inode(inode); |
1095 | mlog_exit_void(); | 1079 | mlog_exit_void(); |
@@ -1123,6 +1107,10 @@ void ocfs2_clear_inode(struct inode *inode) | |||
1123 | ocfs2_mark_lockres_freeing(&oi->ip_inode_lockres); | 1107 | ocfs2_mark_lockres_freeing(&oi->ip_inode_lockres); |
1124 | ocfs2_mark_lockres_freeing(&oi->ip_open_lockres); | 1108 | ocfs2_mark_lockres_freeing(&oi->ip_open_lockres); |
1125 | 1109 | ||
1110 | ocfs2_resv_discard(&OCFS2_SB(inode->i_sb)->osb_la_resmap, | ||
1111 | &oi->ip_la_data_resv); | ||
1112 | ocfs2_resv_init_once(&oi->ip_la_data_resv); | ||
1113 | |||
1126 | /* We very well may get a clear_inode before all an inodes | 1114 | /* We very well may get a clear_inode before all an inodes |
1127 | * metadata has hit disk. Of course, we can't drop any cluster | 1115 | * metadata has hit disk. Of course, we can't drop any cluster |
1128 | * locks until the journal has finished with it. The only | 1116 | * locks until the journal has finished with it. The only |
@@ -1298,13 +1286,8 @@ int ocfs2_mark_inode_dirty(handle_t *handle, | |||
1298 | fe->i_mtime = cpu_to_le64(inode->i_mtime.tv_sec); | 1286 | fe->i_mtime = cpu_to_le64(inode->i_mtime.tv_sec); |
1299 | fe->i_mtime_nsec = cpu_to_le32(inode->i_mtime.tv_nsec); | 1287 | fe->i_mtime_nsec = cpu_to_le32(inode->i_mtime.tv_nsec); |
1300 | 1288 | ||
1301 | status = ocfs2_journal_dirty(handle, bh); | 1289 | ocfs2_journal_dirty(handle, bh); |
1302 | if (status < 0) | ||
1303 | mlog_errno(status); | ||
1304 | |||
1305 | status = 0; | ||
1306 | leave: | 1290 | leave: |
1307 | |||
1308 | mlog_exit(status); | 1291 | mlog_exit(status); |
1309 | return status; | 1292 | return status; |
1310 | } | 1293 | } |