diff options
Diffstat (limited to 'fs/xfs/xfs_trans.c')
| -rw-r--r-- | fs/xfs/xfs_trans.c | 41 |
1 files changed, 11 insertions, 30 deletions
diff --git a/fs/xfs/xfs_trans.c b/fs/xfs/xfs_trans.c index be578ecb4af2..40d9595a8de2 100644 --- a/fs/xfs/xfs_trans.c +++ b/fs/xfs/xfs_trans.c | |||
| @@ -44,6 +44,7 @@ | |||
| 44 | #include "xfs_trans_priv.h" | 44 | #include "xfs_trans_priv.h" |
| 45 | #include "xfs_trans_space.h" | 45 | #include "xfs_trans_space.h" |
| 46 | #include "xfs_inode_item.h" | 46 | #include "xfs_inode_item.h" |
| 47 | #include "xfs_trace.h" | ||
| 47 | 48 | ||
| 48 | kmem_zone_t *xfs_trans_zone; | 49 | kmem_zone_t *xfs_trans_zone; |
| 49 | 50 | ||
| @@ -243,9 +244,8 @@ _xfs_trans_alloc( | |||
| 243 | tp->t_type = type; | 244 | tp->t_type = type; |
| 244 | tp->t_mountp = mp; | 245 | tp->t_mountp = mp; |
| 245 | tp->t_items_free = XFS_LIC_NUM_SLOTS; | 246 | tp->t_items_free = XFS_LIC_NUM_SLOTS; |
| 246 | tp->t_busy_free = XFS_LBC_NUM_SLOTS; | ||
| 247 | xfs_lic_init(&(tp->t_items)); | 247 | xfs_lic_init(&(tp->t_items)); |
| 248 | XFS_LBC_INIT(&(tp->t_busy)); | 248 | INIT_LIST_HEAD(&tp->t_busy); |
| 249 | return tp; | 249 | return tp; |
| 250 | } | 250 | } |
| 251 | 251 | ||
| @@ -255,8 +255,13 @@ _xfs_trans_alloc( | |||
| 255 | */ | 255 | */ |
| 256 | STATIC void | 256 | STATIC void |
| 257 | xfs_trans_free( | 257 | xfs_trans_free( |
| 258 | xfs_trans_t *tp) | 258 | struct xfs_trans *tp) |
| 259 | { | 259 | { |
| 260 | struct xfs_busy_extent *busyp, *n; | ||
| 261 | |||
| 262 | list_for_each_entry_safe(busyp, n, &tp->t_busy, list) | ||
| 263 | xfs_alloc_busy_clear(tp->t_mountp, busyp); | ||
| 264 | |||
| 260 | atomic_dec(&tp->t_mountp->m_active_trans); | 265 | atomic_dec(&tp->t_mountp->m_active_trans); |
| 261 | xfs_trans_free_dqinfo(tp); | 266 | xfs_trans_free_dqinfo(tp); |
| 262 | kmem_zone_free(xfs_trans_zone, tp); | 267 | kmem_zone_free(xfs_trans_zone, tp); |
| @@ -285,9 +290,8 @@ xfs_trans_dup( | |||
| 285 | ntp->t_type = tp->t_type; | 290 | ntp->t_type = tp->t_type; |
| 286 | ntp->t_mountp = tp->t_mountp; | 291 | ntp->t_mountp = tp->t_mountp; |
| 287 | ntp->t_items_free = XFS_LIC_NUM_SLOTS; | 292 | ntp->t_items_free = XFS_LIC_NUM_SLOTS; |
| 288 | ntp->t_busy_free = XFS_LBC_NUM_SLOTS; | ||
| 289 | xfs_lic_init(&(ntp->t_items)); | 293 | xfs_lic_init(&(ntp->t_items)); |
| 290 | XFS_LBC_INIT(&(ntp->t_busy)); | 294 | INIT_LIST_HEAD(&ntp->t_busy); |
| 291 | 295 | ||
| 292 | ASSERT(tp->t_flags & XFS_TRANS_PERM_LOG_RES); | 296 | ASSERT(tp->t_flags & XFS_TRANS_PERM_LOG_RES); |
| 293 | ASSERT(tp->t_ticket != NULL); | 297 | ASSERT(tp->t_ticket != NULL); |
| @@ -423,7 +427,6 @@ undo_blocks: | |||
| 423 | return error; | 427 | return error; |
| 424 | } | 428 | } |
| 425 | 429 | ||
| 426 | |||
| 427 | /* | 430 | /* |
| 428 | * Record the indicated change to the given field for application | 431 | * Record the indicated change to the given field for application |
| 429 | * to the file system's superblock when the transaction commits. | 432 | * to the file system's superblock when the transaction commits. |
| @@ -930,26 +933,6 @@ xfs_trans_item_committed( | |||
| 930 | IOP_UNPIN(lip); | 933 | IOP_UNPIN(lip); |
| 931 | } | 934 | } |
| 932 | 935 | ||
| 933 | /* Clear all the per-AG busy list items listed in this transaction */ | ||
| 934 | static void | ||
| 935 | xfs_trans_clear_busy_extents( | ||
| 936 | struct xfs_trans *tp) | ||
| 937 | { | ||
| 938 | xfs_log_busy_chunk_t *lbcp; | ||
| 939 | xfs_log_busy_slot_t *lbsp; | ||
| 940 | int i; | ||
| 941 | |||
| 942 | for (lbcp = &tp->t_busy; lbcp != NULL; lbcp = lbcp->lbc_next) { | ||
| 943 | i = 0; | ||
| 944 | for (lbsp = lbcp->lbc_busy; i < lbcp->lbc_unused; i++, lbsp++) { | ||
| 945 | if (XFS_LBC_ISFREE(lbcp, i)) | ||
| 946 | continue; | ||
| 947 | xfs_alloc_clear_busy(tp, lbsp->lbc_ag, lbsp->lbc_idx); | ||
| 948 | } | ||
| 949 | } | ||
| 950 | xfs_trans_free_busy(tp); | ||
| 951 | } | ||
| 952 | |||
| 953 | /* | 936 | /* |
| 954 | * This is typically called by the LM when a transaction has been fully | 937 | * This is typically called by the LM when a transaction has been fully |
| 955 | * committed to disk. It needs to unpin the items which have | 938 | * committed to disk. It needs to unpin the items which have |
| @@ -984,7 +967,6 @@ xfs_trans_committed( | |||
| 984 | kmem_free(licp); | 967 | kmem_free(licp); |
| 985 | } | 968 | } |
| 986 | 969 | ||
| 987 | xfs_trans_clear_busy_extents(tp); | ||
| 988 | xfs_trans_free(tp); | 970 | xfs_trans_free(tp); |
| 989 | } | 971 | } |
| 990 | 972 | ||
| @@ -1013,7 +995,6 @@ xfs_trans_uncommit( | |||
| 1013 | xfs_trans_unreserve_and_mod_dquots(tp); | 995 | xfs_trans_unreserve_and_mod_dquots(tp); |
| 1014 | 996 | ||
| 1015 | xfs_trans_free_items(tp, flags); | 997 | xfs_trans_free_items(tp, flags); |
| 1016 | xfs_trans_free_busy(tp); | ||
| 1017 | xfs_trans_free(tp); | 998 | xfs_trans_free(tp); |
| 1018 | } | 999 | } |
| 1019 | 1000 | ||
| @@ -1075,6 +1056,8 @@ xfs_trans_commit_iclog( | |||
| 1075 | *commit_lsn = xfs_log_done(mp, tp->t_ticket, &commit_iclog, log_flags); | 1056 | *commit_lsn = xfs_log_done(mp, tp->t_ticket, &commit_iclog, log_flags); |
| 1076 | 1057 | ||
| 1077 | tp->t_commit_lsn = *commit_lsn; | 1058 | tp->t_commit_lsn = *commit_lsn; |
| 1059 | trace_xfs_trans_commit_lsn(tp); | ||
| 1060 | |||
| 1078 | if (nvec > XFS_TRANS_LOGVEC_COUNT) | 1061 | if (nvec > XFS_TRANS_LOGVEC_COUNT) |
| 1079 | kmem_free(log_vector); | 1062 | kmem_free(log_vector); |
| 1080 | 1063 | ||
| @@ -1260,7 +1243,6 @@ out_unreserve: | |||
| 1260 | } | 1243 | } |
| 1261 | current_restore_flags_nested(&tp->t_pflags, PF_FSTRANS); | 1244 | current_restore_flags_nested(&tp->t_pflags, PF_FSTRANS); |
| 1262 | xfs_trans_free_items(tp, error ? XFS_TRANS_ABORT : 0); | 1245 | xfs_trans_free_items(tp, error ? XFS_TRANS_ABORT : 0); |
| 1263 | xfs_trans_free_busy(tp); | ||
| 1264 | xfs_trans_free(tp); | 1246 | xfs_trans_free(tp); |
| 1265 | 1247 | ||
| 1266 | XFS_STATS_INC(xs_trans_empty); | 1248 | XFS_STATS_INC(xs_trans_empty); |
| @@ -1339,7 +1321,6 @@ xfs_trans_cancel( | |||
| 1339 | current_restore_flags_nested(&tp->t_pflags, PF_FSTRANS); | 1321 | current_restore_flags_nested(&tp->t_pflags, PF_FSTRANS); |
| 1340 | 1322 | ||
| 1341 | xfs_trans_free_items(tp, flags); | 1323 | xfs_trans_free_items(tp, flags); |
| 1342 | xfs_trans_free_busy(tp); | ||
| 1343 | xfs_trans_free(tp); | 1324 | xfs_trans_free(tp); |
| 1344 | } | 1325 | } |
| 1345 | 1326 | ||
