aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
Diffstat (limited to 'fs')
-rw-r--r--fs/xfs/xfs_attr.c28
-rw-r--r--fs/xfs/xfs_bmap.c4
-rw-r--r--fs/xfs/xfs_dfrag.c4
-rw-r--r--fs/xfs/xfs_dquot.c2
-rw-r--r--fs/xfs/xfs_file.c2
-rw-r--r--fs/xfs/xfs_inode.c6
-rw-r--r--fs/xfs/xfs_inode_item.c4
-rw-r--r--fs/xfs/xfs_ioctl.c2
-rw-r--r--fs/xfs/xfs_iomap.c6
-rw-r--r--fs/xfs/xfs_iops.c4
-rw-r--r--fs/xfs/xfs_qm_syscalls.c2
-rw-r--r--fs/xfs/xfs_rename.c8
-rw-r--r--fs/xfs/xfs_rtalloc.c10
-rw-r--r--fs/xfs/xfs_super.c2
-rw-r--r--fs/xfs/xfs_trans.c2
-rw-r--r--fs/xfs/xfs_trans.h3
-rw-r--r--fs/xfs/xfs_trans_inode.c25
-rw-r--r--fs/xfs/xfs_vnodeops.c34
18 files changed, 65 insertions, 83 deletions
diff --git a/fs/xfs/xfs_attr.c b/fs/xfs/xfs_attr.c
index 5484766938f9..981a0624f382 100644
--- a/fs/xfs/xfs_attr.c
+++ b/fs/xfs/xfs_attr.c
@@ -319,7 +319,7 @@ xfs_attr_set_int(
319 return (error); 319 return (error);
320 } 320 }
321 321
322 xfs_trans_ijoin(args.trans, dp); 322 xfs_trans_ijoin(args.trans, dp, 0);
323 323
324 /* 324 /*
325 * If the attribute list is non-existent or a shortform list, 325 * If the attribute list is non-existent or a shortform list,
@@ -389,7 +389,7 @@ xfs_attr_set_int(
389 * a new one. We need the inode to be in all transactions. 389 * a new one. We need the inode to be in all transactions.
390 */ 390 */
391 if (committed) 391 if (committed)
392 xfs_trans_ijoin(args.trans, dp); 392 xfs_trans_ijoin(args.trans, dp, 0);
393 393
394 /* 394 /*
395 * Commit the leaf transformation. We'll need another (linked) 395 * Commit the leaf transformation. We'll need another (linked)
@@ -537,7 +537,7 @@ xfs_attr_remove_int(xfs_inode_t *dp, struct xfs_name *name, int flags)
537 * No need to make quota reservations here. We expect to release some 537 * No need to make quota reservations here. We expect to release some
538 * blocks not allocate in the common case. 538 * blocks not allocate in the common case.
539 */ 539 */
540 xfs_trans_ijoin(args.trans, dp); 540 xfs_trans_ijoin(args.trans, dp, 0);
541 541
542 /* 542 /*
543 * Decide on what work routines to call based on the inode size. 543 * Decide on what work routines to call based on the inode size.
@@ -809,7 +809,7 @@ xfs_attr_inactive(xfs_inode_t *dp)
809 * No need to make quota reservations here. We expect to release some 809 * No need to make quota reservations here. We expect to release some
810 * blocks, not allocate, in the common case. 810 * blocks, not allocate, in the common case.
811 */ 811 */
812 xfs_trans_ijoin(trans, dp); 812 xfs_trans_ijoin(trans, dp, 0);
813 813
814 /* 814 /*
815 * Decide on what work routines to call based on the inode size. 815 * Decide on what work routines to call based on the inode size.
@@ -961,7 +961,7 @@ xfs_attr_leaf_addname(xfs_da_args_t *args)
961 * a new one. We need the inode to be in all transactions. 961 * a new one. We need the inode to be in all transactions.
962 */ 962 */
963 if (committed) 963 if (committed)
964 xfs_trans_ijoin(args->trans, dp); 964 xfs_trans_ijoin(args->trans, dp, 0);
965 965
966 /* 966 /*
967 * Commit the current trans (including the inode) and start 967 * Commit the current trans (including the inode) and start
@@ -1063,7 +1063,7 @@ xfs_attr_leaf_addname(xfs_da_args_t *args)
1063 * in all transactions. 1063 * in all transactions.
1064 */ 1064 */
1065 if (committed) 1065 if (committed)
1066 xfs_trans_ijoin(args->trans, dp); 1066 xfs_trans_ijoin(args->trans, dp, 0);
1067 } else 1067 } else
1068 xfs_da_buf_done(bp); 1068 xfs_da_buf_done(bp);
1069 1069
@@ -1137,7 +1137,7 @@ xfs_attr_leaf_removename(xfs_da_args_t *args)
1137 * a new one. We need the inode to be in all transactions. 1137 * a new one. We need the inode to be in all transactions.
1138 */ 1138 */
1139 if (committed) 1139 if (committed)
1140 xfs_trans_ijoin(args->trans, dp); 1140 xfs_trans_ijoin(args->trans, dp, 0);
1141 } else 1141 } else
1142 xfs_da_buf_done(bp); 1142 xfs_da_buf_done(bp);
1143 return(0); 1143 return(0);
@@ -1291,7 +1291,7 @@ restart:
1291 * in all transactions. 1291 * in all transactions.
1292 */ 1292 */
1293 if (committed) 1293 if (committed)
1294 xfs_trans_ijoin(args->trans, dp); 1294 xfs_trans_ijoin(args->trans, dp, 0);
1295 1295
1296 /* 1296 /*
1297 * Commit the node conversion and start the next 1297 * Commit the node conversion and start the next
@@ -1328,7 +1328,7 @@ restart:
1328 * a new one. We need the inode to be in all transactions. 1328 * a new one. We need the inode to be in all transactions.
1329 */ 1329 */
1330 if (committed) 1330 if (committed)
1331 xfs_trans_ijoin(args->trans, dp); 1331 xfs_trans_ijoin(args->trans, dp, 0);
1332 } else { 1332 } else {
1333 /* 1333 /*
1334 * Addition succeeded, update Btree hashvals. 1334 * Addition succeeded, update Btree hashvals.
@@ -1440,7 +1440,7 @@ restart:
1440 * in all transactions. 1440 * in all transactions.
1441 */ 1441 */
1442 if (committed) 1442 if (committed)
1443 xfs_trans_ijoin(args->trans, dp); 1443 xfs_trans_ijoin(args->trans, dp, 0);
1444 } 1444 }
1445 1445
1446 /* 1446 /*
@@ -1572,7 +1572,7 @@ xfs_attr_node_removename(xfs_da_args_t *args)
1572 * a new one. We need the inode to be in all transactions. 1572 * a new one. We need the inode to be in all transactions.
1573 */ 1573 */
1574 if (committed) 1574 if (committed)
1575 xfs_trans_ijoin(args->trans, dp); 1575 xfs_trans_ijoin(args->trans, dp, 0);
1576 1576
1577 /* 1577 /*
1578 * Commit the Btree join operation and start a new trans. 1578 * Commit the Btree join operation and start a new trans.
@@ -1623,7 +1623,7 @@ xfs_attr_node_removename(xfs_da_args_t *args)
1623 * in all transactions. 1623 * in all transactions.
1624 */ 1624 */
1625 if (committed) 1625 if (committed)
1626 xfs_trans_ijoin(args->trans, dp); 1626 xfs_trans_ijoin(args->trans, dp, 0);
1627 } else 1627 } else
1628 xfs_da_brelse(args->trans, bp); 1628 xfs_da_brelse(args->trans, bp);
1629 } 1629 }
@@ -2060,7 +2060,7 @@ xfs_attr_rmtval_set(xfs_da_args_t *args)
2060 * a new one. We need the inode to be in all transactions. 2060 * a new one. We need the inode to be in all transactions.
2061 */ 2061 */
2062 if (committed) 2062 if (committed)
2063 xfs_trans_ijoin(args->trans, dp); 2063 xfs_trans_ijoin(args->trans, dp, 0);
2064 2064
2065 ASSERT(nmap == 1); 2065 ASSERT(nmap == 1);
2066 ASSERT((map.br_startblock != DELAYSTARTBLOCK) && 2066 ASSERT((map.br_startblock != DELAYSTARTBLOCK) &&
@@ -2207,7 +2207,7 @@ xfs_attr_rmtval_remove(xfs_da_args_t *args)
2207 * a new one. We need the inode to be in all transactions. 2207 * a new one. We need the inode to be in all transactions.
2208 */ 2208 */
2209 if (committed) 2209 if (committed)
2210 xfs_trans_ijoin(args->trans, args->dp); 2210 xfs_trans_ijoin(args->trans, args->dp, 0);
2211 2211
2212 /* 2212 /*
2213 * Close out trans and start the next one in the chain. 2213 * Close out trans and start the next one in the chain.
diff --git a/fs/xfs/xfs_bmap.c b/fs/xfs/xfs_bmap.c
index bb31d37bf49b..c68baeb0974a 100644
--- a/fs/xfs/xfs_bmap.c
+++ b/fs/xfs/xfs_bmap.c
@@ -2195,7 +2195,7 @@ xfs_bmap_rtalloc(
2195 * Lock out other modifications to the RT bitmap inode. 2195 * Lock out other modifications to the RT bitmap inode.
2196 */ 2196 */
2197 xfs_ilock(mp->m_rbmip, XFS_ILOCK_EXCL); 2197 xfs_ilock(mp->m_rbmip, XFS_ILOCK_EXCL);
2198 xfs_trans_ijoin_ref(ap->tp, mp->m_rbmip, XFS_ILOCK_EXCL); 2198 xfs_trans_ijoin(ap->tp, mp->m_rbmip, XFS_ILOCK_EXCL);
2199 2199
2200 /* 2200 /*
2201 * If it's an allocation to an empty file at offset 0, 2201 * If it's an allocation to an empty file at offset 0,
@@ -3460,7 +3460,7 @@ xfs_bmap_add_attrfork(
3460 } 3460 }
3461 ASSERT(ip->i_d.di_anextents == 0); 3461 ASSERT(ip->i_d.di_anextents == 0);
3462 3462
3463 xfs_trans_ijoin_ref(tp, ip, XFS_ILOCK_EXCL); 3463 xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL);
3464 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); 3464 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
3465 3465
3466 switch (ip->i_d.di_format) { 3466 switch (ip->i_d.di_format) {
diff --git a/fs/xfs/xfs_dfrag.c b/fs/xfs/xfs_dfrag.c
index 645387b69738..654dc6f05bac 100644
--- a/fs/xfs/xfs_dfrag.c
+++ b/fs/xfs/xfs_dfrag.c
@@ -425,8 +425,8 @@ xfs_swap_extents(
425 } 425 }
426 426
427 427
428 xfs_trans_ijoin_ref(tp, ip, XFS_ILOCK_EXCL | XFS_IOLOCK_EXCL); 428 xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL | XFS_IOLOCK_EXCL);
429 xfs_trans_ijoin_ref(tp, tip, XFS_ILOCK_EXCL | XFS_IOLOCK_EXCL); 429 xfs_trans_ijoin(tp, tip, XFS_ILOCK_EXCL | XFS_IOLOCK_EXCL);
430 430
431 xfs_trans_log_inode(tp, ip, ilf_fields); 431 xfs_trans_log_inode(tp, ip, ilf_fields);
432 xfs_trans_log_inode(tp, tip, tilf_fields); 432 xfs_trans_log_inode(tp, tip, tilf_fields);
diff --git a/fs/xfs/xfs_dquot.c b/fs/xfs/xfs_dquot.c
index 179673531f20..c597bfe4ada0 100644
--- a/fs/xfs/xfs_dquot.c
+++ b/fs/xfs/xfs_dquot.c
@@ -377,7 +377,7 @@ xfs_qm_dqalloc(
377 return (ESRCH); 377 return (ESRCH);
378 } 378 }
379 379
380 xfs_trans_ijoin_ref(tp, quotip, XFS_ILOCK_EXCL); 380 xfs_trans_ijoin(tp, quotip, XFS_ILOCK_EXCL);
381 nmaps = 1; 381 nmaps = 1;
382 error = xfs_bmapi_write(tp, quotip, offset_fsb, 382 error = xfs_bmapi_write(tp, quotip, offset_fsb,
383 XFS_DQUOT_CLUSTER_SIZE_FSB, XFS_BMAPI_METADATA, 383 XFS_DQUOT_CLUSTER_SIZE_FSB, XFS_BMAPI_METADATA,
diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c
index d8ef02eb178a..0b600b51778c 100644
--- a/fs/xfs/xfs_file.c
+++ b/fs/xfs/xfs_file.c
@@ -213,7 +213,7 @@ xfs_file_fsync(
213 * transaction. So we play it safe and fire off the 213 * transaction. So we play it safe and fire off the
214 * transaction anyway. 214 * transaction anyway.
215 */ 215 */
216 xfs_trans_ijoin(tp, ip); 216 xfs_trans_ijoin(tp, ip, 0);
217 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); 217 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
218 error = xfs_trans_commit(tp, 0); 218 error = xfs_trans_commit(tp, 0);
219 219
diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
index f690d3a10b34..b676494a55ca 100644
--- a/fs/xfs/xfs_inode.c
+++ b/fs/xfs/xfs_inode.c
@@ -1152,7 +1152,7 @@ xfs_ialloc(
1152 /* 1152 /*
1153 * Log the new values stuffed into the inode. 1153 * Log the new values stuffed into the inode.
1154 */ 1154 */
1155 xfs_trans_ijoin_ref(tp, ip, XFS_ILOCK_EXCL); 1155 xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL);
1156 xfs_trans_log_inode(tp, ip, flags); 1156 xfs_trans_log_inode(tp, ip, flags);
1157 1157
1158 /* now that we have an i_mode we can setup inode ops and unlock */ 1158 /* now that we have an i_mode we can setup inode ops and unlock */
@@ -1297,7 +1297,7 @@ xfs_itruncate_extents(
1297 */ 1297 */
1298 error = xfs_bmap_finish(&tp, &free_list, &committed); 1298 error = xfs_bmap_finish(&tp, &free_list, &committed);
1299 if (committed) 1299 if (committed)
1300 xfs_trans_ijoin(tp, ip); 1300 xfs_trans_ijoin(tp, ip, 0);
1301 if (error) 1301 if (error)
1302 goto out_bmap_cancel; 1302 goto out_bmap_cancel;
1303 1303
@@ -1313,7 +1313,7 @@ xfs_itruncate_extents(
1313 error = xfs_trans_commit(tp, 0); 1313 error = xfs_trans_commit(tp, 0);
1314 tp = ntp; 1314 tp = ntp;
1315 1315
1316 xfs_trans_ijoin(tp, ip); 1316 xfs_trans_ijoin(tp, ip, 0);
1317 1317
1318 if (error) 1318 if (error)
1319 goto out; 1319 goto out;
diff --git a/fs/xfs/xfs_inode_item.c b/fs/xfs/xfs_inode_item.c
index 588406dc6a35..8704a99241d7 100644
--- a/fs/xfs/xfs_inode_item.c
+++ b/fs/xfs/xfs_inode_item.c
@@ -658,10 +658,8 @@ xfs_inode_item_unlock(
658 658
659 lock_flags = iip->ili_lock_flags; 659 lock_flags = iip->ili_lock_flags;
660 iip->ili_lock_flags = 0; 660 iip->ili_lock_flags = 0;
661 if (lock_flags) { 661 if (lock_flags)
662 xfs_iunlock(ip, lock_flags); 662 xfs_iunlock(ip, lock_flags);
663 IRELE(ip);
664 }
665} 663}
666 664
667/* 665/*
diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c
index f7ce7debe14c..d99a90518909 100644
--- a/fs/xfs/xfs_ioctl.c
+++ b/fs/xfs/xfs_ioctl.c
@@ -1069,7 +1069,7 @@ xfs_ioctl_setattr(
1069 } 1069 }
1070 } 1070 }
1071 1071
1072 xfs_trans_ijoin(tp, ip); 1072 xfs_trans_ijoin(tp, ip, 0);
1073 1073
1074 /* 1074 /*
1075 * Change file ownership. Must be the owner or privileged. 1075 * Change file ownership. Must be the owner or privileged.
diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c
index da5bf05c5bb7..9afa282aa937 100644
--- a/fs/xfs/xfs_iomap.c
+++ b/fs/xfs/xfs_iomap.c
@@ -208,7 +208,7 @@ xfs_iomap_write_direct(
208 if (error) 208 if (error)
209 goto error1; 209 goto error1;
210 210
211 xfs_trans_ijoin(tp, ip); 211 xfs_trans_ijoin(tp, ip, 0);
212 212
213 bmapi_flag = 0; 213 bmapi_flag = 0;
214 if (offset < ip->i_size || extsz) 214 if (offset < ip->i_size || extsz)
@@ -528,7 +528,7 @@ xfs_iomap_write_allocate(
528 return XFS_ERROR(error); 528 return XFS_ERROR(error);
529 } 529 }
530 xfs_ilock(ip, XFS_ILOCK_EXCL); 530 xfs_ilock(ip, XFS_ILOCK_EXCL);
531 xfs_trans_ijoin(tp, ip); 531 xfs_trans_ijoin(tp, ip, 0);
532 532
533 xfs_bmap_init(&free_list, &first_block); 533 xfs_bmap_init(&free_list, &first_block);
534 534
@@ -692,7 +692,7 @@ xfs_iomap_write_unwritten(
692 } 692 }
693 693
694 xfs_ilock(ip, XFS_ILOCK_EXCL); 694 xfs_ilock(ip, XFS_ILOCK_EXCL);
695 xfs_trans_ijoin(tp, ip); 695 xfs_trans_ijoin(tp, ip, 0);
696 696
697 /* 697 /*
698 * Modify the unwritten extent state of the buffer. 698 * Modify the unwritten extent state of the buffer.
diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c
index e6b3e7620888..556bbe7751b7 100644
--- a/fs/xfs/xfs_iops.c
+++ b/fs/xfs/xfs_iops.c
@@ -611,7 +611,7 @@ xfs_setattr_nonsize(
611 } 611 }
612 } 612 }
613 613
614 xfs_trans_ijoin(tp, ip); 614 xfs_trans_ijoin(tp, ip, 0);
615 615
616 /* 616 /*
617 * Change file ownership. Must be the owner or privileged. 617 * Change file ownership. Must be the owner or privileged.
@@ -863,7 +863,7 @@ xfs_setattr_size(
863 863
864 xfs_ilock(ip, XFS_ILOCK_EXCL); 864 xfs_ilock(ip, XFS_ILOCK_EXCL);
865 865
866 xfs_trans_ijoin(tp, ip); 866 xfs_trans_ijoin(tp, ip, 0);
867 867
868 /* 868 /*
869 * Only change the c/mtime if we are changing the size or we are 869 * Only change the c/mtime if we are changing the size or we are
diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c
index 609246f42e6c..5cc3dde1bc90 100644
--- a/fs/xfs/xfs_qm_syscalls.c
+++ b/fs/xfs/xfs_qm_syscalls.c
@@ -261,7 +261,7 @@ xfs_qm_scall_trunc_qfile(
261 } 261 }
262 262
263 xfs_ilock(ip, XFS_ILOCK_EXCL); 263 xfs_ilock(ip, XFS_ILOCK_EXCL);
264 xfs_trans_ijoin(tp, ip); 264 xfs_trans_ijoin(tp, ip, 0);
265 265
266 error = xfs_itruncate_data(&tp, ip, 0); 266 error = xfs_itruncate_data(&tp, ip, 0);
267 if (error) { 267 if (error) {
diff --git a/fs/xfs/xfs_rename.c b/fs/xfs/xfs_rename.c
index df78c297d1a1..866de277079a 100644
--- a/fs/xfs/xfs_rename.c
+++ b/fs/xfs/xfs_rename.c
@@ -170,12 +170,12 @@ xfs_rename(
170 * we can rely on either trans_commit or trans_cancel to unlock 170 * we can rely on either trans_commit or trans_cancel to unlock
171 * them. 171 * them.
172 */ 172 */
173 xfs_trans_ijoin_ref(tp, src_dp, XFS_ILOCK_EXCL); 173 xfs_trans_ijoin(tp, src_dp, XFS_ILOCK_EXCL);
174 if (new_parent) 174 if (new_parent)
175 xfs_trans_ijoin_ref(tp, target_dp, XFS_ILOCK_EXCL); 175 xfs_trans_ijoin(tp, target_dp, XFS_ILOCK_EXCL);
176 xfs_trans_ijoin_ref(tp, src_ip, XFS_ILOCK_EXCL); 176 xfs_trans_ijoin(tp, src_ip, XFS_ILOCK_EXCL);
177 if (target_ip) 177 if (target_ip)
178 xfs_trans_ijoin_ref(tp, target_ip, XFS_ILOCK_EXCL); 178 xfs_trans_ijoin(tp, target_ip, XFS_ILOCK_EXCL);
179 179
180 /* 180 /*
181 * If we are using project inheritance, we only allow renames 181 * If we are using project inheritance, we only allow renames
diff --git a/fs/xfs/xfs_rtalloc.c b/fs/xfs/xfs_rtalloc.c
index f29424964521..87323f1ded64 100644
--- a/fs/xfs/xfs_rtalloc.c
+++ b/fs/xfs/xfs_rtalloc.c
@@ -112,7 +112,7 @@ xfs_growfs_rt_alloc(
112 * Lock the inode. 112 * Lock the inode.
113 */ 113 */
114 xfs_ilock(ip, XFS_ILOCK_EXCL); 114 xfs_ilock(ip, XFS_ILOCK_EXCL);
115 xfs_trans_ijoin_ref(tp, ip, XFS_ILOCK_EXCL); 115 xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL);
116 116
117 xfs_bmap_init(&flist, &firstblock); 117 xfs_bmap_init(&flist, &firstblock);
118 /* 118 /*
@@ -155,7 +155,7 @@ xfs_growfs_rt_alloc(
155 * Lock the bitmap inode. 155 * Lock the bitmap inode.
156 */ 156 */
157 xfs_ilock(ip, XFS_ILOCK_EXCL); 157 xfs_ilock(ip, XFS_ILOCK_EXCL);
158 xfs_trans_ijoin_ref(tp, ip, XFS_ILOCK_EXCL); 158 xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL);
159 /* 159 /*
160 * Get a buffer for the block. 160 * Get a buffer for the block.
161 */ 161 */
@@ -1960,7 +1960,7 @@ xfs_growfs_rt(
1960 * Lock out other callers by grabbing the bitmap inode lock. 1960 * Lock out other callers by grabbing the bitmap inode lock.
1961 */ 1961 */
1962 xfs_ilock(mp->m_rbmip, XFS_ILOCK_EXCL); 1962 xfs_ilock(mp->m_rbmip, XFS_ILOCK_EXCL);
1963 xfs_trans_ijoin_ref(tp, mp->m_rbmip, XFS_ILOCK_EXCL); 1963 xfs_trans_ijoin(tp, mp->m_rbmip, XFS_ILOCK_EXCL);
1964 /* 1964 /*
1965 * Update the bitmap inode's size. 1965 * Update the bitmap inode's size.
1966 */ 1966 */
@@ -1972,7 +1972,7 @@ xfs_growfs_rt(
1972 * Get the summary inode into the transaction. 1972 * Get the summary inode into the transaction.
1973 */ 1973 */
1974 xfs_ilock(mp->m_rsumip, XFS_ILOCK_EXCL); 1974 xfs_ilock(mp->m_rsumip, XFS_ILOCK_EXCL);
1975 xfs_trans_ijoin_ref(tp, mp->m_rsumip, XFS_ILOCK_EXCL); 1975 xfs_trans_ijoin(tp, mp->m_rsumip, XFS_ILOCK_EXCL);
1976 /* 1976 /*
1977 * Update the summary inode's size. 1977 * Update the summary inode's size.
1978 */ 1978 */
@@ -2143,7 +2143,7 @@ xfs_rtfree_extent(
2143 * Synchronize by locking the bitmap inode. 2143 * Synchronize by locking the bitmap inode.
2144 */ 2144 */
2145 xfs_ilock(mp->m_rbmip, XFS_ILOCK_EXCL); 2145 xfs_ilock(mp->m_rbmip, XFS_ILOCK_EXCL);
2146 xfs_trans_ijoin_ref(tp, mp->m_rbmip, XFS_ILOCK_EXCL); 2146 xfs_trans_ijoin(tp, mp->m_rbmip, XFS_ILOCK_EXCL);
2147 2147
2148#if defined(__KERNEL__) && defined(DEBUG) 2148#if defined(__KERNEL__) && defined(DEBUG)
2149 /* 2149 /*
diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
index 54d5e102ffe1..6ad05e68abda 100644
--- a/fs/xfs/xfs_super.c
+++ b/fs/xfs/xfs_super.c
@@ -884,7 +884,7 @@ xfs_log_inode(
884 } 884 }
885 885
886 xfs_ilock(ip, XFS_ILOCK_EXCL); 886 xfs_ilock(ip, XFS_ILOCK_EXCL);
887 xfs_trans_ijoin_ref(tp, ip, XFS_ILOCK_EXCL); 887 xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL);
888 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); 888 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
889 return xfs_trans_commit(tp, 0); 889 return xfs_trans_commit(tp, 0);
890} 890}
diff --git a/fs/xfs/xfs_trans.c b/fs/xfs/xfs_trans.c
index b64c8c79736a..1f35b2feca97 100644
--- a/fs/xfs/xfs_trans.c
+++ b/fs/xfs/xfs_trans.c
@@ -2018,6 +2018,6 @@ xfs_trans_roll(
2018 if (error) 2018 if (error)
2019 return error; 2019 return error;
2020 2020
2021 xfs_trans_ijoin(trans, dp); 2021 xfs_trans_ijoin(trans, dp, 0);
2022 return 0; 2022 return 0;
2023} 2023}
diff --git a/fs/xfs/xfs_trans.h b/fs/xfs/xfs_trans.h
index 54b0b1cc3e3f..f5df16969f82 100644
--- a/fs/xfs/xfs_trans.h
+++ b/fs/xfs/xfs_trans.h
@@ -470,8 +470,7 @@ void xfs_trans_stale_inode_buf(xfs_trans_t *, struct xfs_buf *);
470void xfs_trans_dquot_buf(xfs_trans_t *, struct xfs_buf *, uint); 470void xfs_trans_dquot_buf(xfs_trans_t *, struct xfs_buf *, uint);
471void xfs_trans_inode_alloc_buf(xfs_trans_t *, struct xfs_buf *); 471void xfs_trans_inode_alloc_buf(xfs_trans_t *, struct xfs_buf *);
472void xfs_trans_ichgtime(struct xfs_trans *, struct xfs_inode *, int); 472void xfs_trans_ichgtime(struct xfs_trans *, struct xfs_inode *, int);
473void xfs_trans_ijoin_ref(struct xfs_trans *, struct xfs_inode *, uint); 473void xfs_trans_ijoin(struct xfs_trans *, struct xfs_inode *, uint);
474void xfs_trans_ijoin(struct xfs_trans *, struct xfs_inode *);
475void xfs_trans_log_buf(xfs_trans_t *, struct xfs_buf *, uint, uint); 474void xfs_trans_log_buf(xfs_trans_t *, struct xfs_buf *, uint, uint);
476void xfs_trans_log_inode(xfs_trans_t *, struct xfs_inode *, uint); 475void xfs_trans_log_inode(xfs_trans_t *, struct xfs_inode *, uint);
477struct xfs_efi_log_item *xfs_trans_get_efi(xfs_trans_t *, uint); 476struct xfs_efi_log_item *xfs_trans_get_efi(xfs_trans_t *, uint);
diff --git a/fs/xfs/xfs_trans_inode.c b/fs/xfs/xfs_trans_inode.c
index c8dea2fd7e68..32f0288ae10f 100644
--- a/fs/xfs/xfs_trans_inode.c
+++ b/fs/xfs/xfs_trans_inode.c
@@ -47,11 +47,13 @@ xfs_trans_inode_broot_debug(
47 * Add a locked inode to the transaction. 47 * Add a locked inode to the transaction.
48 * 48 *
49 * The inode must be locked, and it cannot be associated with any transaction. 49 * The inode must be locked, and it cannot be associated with any transaction.
50 * If lock_flags is non-zero the inode will be unlocked on transaction commit.
50 */ 51 */
51void 52void
52xfs_trans_ijoin( 53xfs_trans_ijoin(
53 struct xfs_trans *tp, 54 struct xfs_trans *tp,
54 struct xfs_inode *ip) 55 struct xfs_inode *ip,
56 uint lock_flags)
55{ 57{
56 xfs_inode_log_item_t *iip; 58 xfs_inode_log_item_t *iip;
57 59
@@ -59,7 +61,9 @@ xfs_trans_ijoin(
59 if (ip->i_itemp == NULL) 61 if (ip->i_itemp == NULL)
60 xfs_inode_item_init(ip, ip->i_mount); 62 xfs_inode_item_init(ip, ip->i_mount);
61 iip = ip->i_itemp; 63 iip = ip->i_itemp;
64
62 ASSERT(iip->ili_lock_flags == 0); 65 ASSERT(iip->ili_lock_flags == 0);
66 iip->ili_lock_flags = lock_flags;
63 67
64 /* 68 /*
65 * Get a log_item_desc to point at the new item. 69 * Get a log_item_desc to point at the new item.
@@ -70,25 +74,6 @@ xfs_trans_ijoin(
70} 74}
71 75
72/* 76/*
73 * Add a locked inode to the transaction.
74 *
75 *
76 * Grabs a reference to the inode which will be dropped when the transaction
77 * is committed. The inode will also be unlocked at that point. The inode
78 * must be locked, and it cannot be associated with any transaction.
79 */
80void
81xfs_trans_ijoin_ref(
82 struct xfs_trans *tp,
83 struct xfs_inode *ip,
84 uint lock_flags)
85{
86 xfs_trans_ijoin(tp, ip);
87 IHOLD(ip);
88 ip->i_itemp->ili_lock_flags = lock_flags;
89}
90
91/*
92 * Transactional inode timestamp update. Requires the inode to be locked and 77 * Transactional inode timestamp update. Requires the inode to be locked and
93 * joined to the transaction supplied. Relies on the transaction subsystem to 78 * joined to the transaction supplied. Relies on the transaction subsystem to
94 * track dirty state and update/writeback the inode accordingly. 79 * track dirty state and update/writeback the inode accordingly.
diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c
index c9c8e8230b21..fc38f15808c6 100644
--- a/fs/xfs/xfs_vnodeops.c
+++ b/fs/xfs/xfs_vnodeops.c
@@ -219,7 +219,7 @@ xfs_free_eofblocks(
219 } 219 }
220 220
221 xfs_ilock(ip, XFS_ILOCK_EXCL); 221 xfs_ilock(ip, XFS_ILOCK_EXCL);
222 xfs_trans_ijoin(tp, ip); 222 xfs_trans_ijoin(tp, ip, 0);
223 223
224 error = xfs_itruncate_data(&tp, ip, ip->i_size); 224 error = xfs_itruncate_data(&tp, ip, ip->i_size);
225 if (error) { 225 if (error) {
@@ -288,7 +288,7 @@ xfs_inactive_symlink_rmt(
288 xfs_ilock(ip, XFS_IOLOCK_EXCL | XFS_ILOCK_EXCL); 288 xfs_ilock(ip, XFS_IOLOCK_EXCL | XFS_ILOCK_EXCL);
289 size = (int)ip->i_d.di_size; 289 size = (int)ip->i_d.di_size;
290 ip->i_d.di_size = 0; 290 ip->i_d.di_size = 0;
291 xfs_trans_ijoin(tp, ip); 291 xfs_trans_ijoin(tp, ip, 0);
292 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); 292 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
293 /* 293 /*
294 * Find the block(s) so we can inval and unmap them. 294 * Find the block(s) so we can inval and unmap them.
@@ -336,7 +336,7 @@ xfs_inactive_symlink_rmt(
336 * Mark it dirty so it will be logged and moved forward in the log as 336 * Mark it dirty so it will be logged and moved forward in the log as
337 * part of every commit. 337 * part of every commit.
338 */ 338 */
339 xfs_trans_ijoin(tp, ip); 339 xfs_trans_ijoin(tp, ip, 0);
340 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); 340 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
341 /* 341 /*
342 * Get a new, empty transaction to return to our caller. 342 * Get a new, empty transaction to return to our caller.
@@ -469,7 +469,7 @@ xfs_inactive_attrs(
469 goto error_cancel; 469 goto error_cancel;
470 470
471 xfs_ilock(ip, XFS_ILOCK_EXCL); 471 xfs_ilock(ip, XFS_ILOCK_EXCL);
472 xfs_trans_ijoin(tp, ip); 472 xfs_trans_ijoin(tp, ip, 0);
473 xfs_idestroy_fork(ip, XFS_ATTR_FORK); 473 xfs_idestroy_fork(ip, XFS_ATTR_FORK);
474 474
475 ASSERT(ip->i_d.di_anextents == 0); 475 ASSERT(ip->i_d.di_anextents == 0);
@@ -663,7 +663,7 @@ xfs_inactive(
663 } 663 }
664 664
665 xfs_ilock(ip, XFS_ILOCK_EXCL); 665 xfs_ilock(ip, XFS_ILOCK_EXCL);
666 xfs_trans_ijoin(tp, ip); 666 xfs_trans_ijoin(tp, ip, 0);
667 667
668 error = xfs_itruncate_data(&tp, ip, 0); 668 error = xfs_itruncate_data(&tp, ip, 0);
669 if (error) { 669 if (error) {
@@ -687,7 +687,7 @@ xfs_inactive(
687 return VN_INACTIVE_CACHE; 687 return VN_INACTIVE_CACHE;
688 } 688 }
689 689
690 xfs_trans_ijoin(tp, ip); 690 xfs_trans_ijoin(tp, ip, 0);
691 } else { 691 } else {
692 error = xfs_trans_reserve(tp, 0, 692 error = xfs_trans_reserve(tp, 0,
693 XFS_IFREE_LOG_RES(mp), 693 XFS_IFREE_LOG_RES(mp),
@@ -700,7 +700,7 @@ xfs_inactive(
700 } 700 }
701 701
702 xfs_ilock(ip, XFS_ILOCK_EXCL | XFS_IOLOCK_EXCL); 702 xfs_ilock(ip, XFS_ILOCK_EXCL | XFS_IOLOCK_EXCL);
703 xfs_trans_ijoin(tp, ip); 703 xfs_trans_ijoin(tp, ip, 0);
704 } 704 }
705 705
706 /* 706 /*
@@ -940,7 +940,7 @@ xfs_create(
940 * the transaction cancel unlocking dp so don't do it explicitly in the 940 * the transaction cancel unlocking dp so don't do it explicitly in the
941 * error path. 941 * error path.
942 */ 942 */
943 xfs_trans_ijoin_ref(tp, dp, XFS_ILOCK_EXCL); 943 xfs_trans_ijoin(tp, dp, XFS_ILOCK_EXCL);
944 unlock_dp_on_error = B_FALSE; 944 unlock_dp_on_error = B_FALSE;
945 945
946 error = xfs_dir_createname(tp, dp, name, ip->i_ino, 946 error = xfs_dir_createname(tp, dp, name, ip->i_ino,
@@ -1261,8 +1261,8 @@ xfs_remove(
1261 1261
1262 xfs_lock_two_inodes(dp, ip, XFS_ILOCK_EXCL); 1262 xfs_lock_two_inodes(dp, ip, XFS_ILOCK_EXCL);
1263 1263
1264 xfs_trans_ijoin_ref(tp, dp, XFS_ILOCK_EXCL); 1264 xfs_trans_ijoin(tp, dp, XFS_ILOCK_EXCL);
1265 xfs_trans_ijoin_ref(tp, ip, XFS_ILOCK_EXCL); 1265 xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL);
1266 1266
1267 /* 1267 /*
1268 * If we're removing a directory perform some additional validation. 1268 * If we're removing a directory perform some additional validation.
@@ -1407,8 +1407,8 @@ xfs_link(
1407 1407
1408 xfs_lock_two_inodes(sip, tdp, XFS_ILOCK_EXCL); 1408 xfs_lock_two_inodes(sip, tdp, XFS_ILOCK_EXCL);
1409 1409
1410 xfs_trans_ijoin_ref(tp, sip, XFS_ILOCK_EXCL); 1410 xfs_trans_ijoin(tp, sip, XFS_ILOCK_EXCL);
1411 xfs_trans_ijoin_ref(tp, tdp, XFS_ILOCK_EXCL); 1411 xfs_trans_ijoin(tp, tdp, XFS_ILOCK_EXCL);
1412 1412
1413 /* 1413 /*
1414 * If the source has too many links, we can't make any more to it. 1414 * If the source has too many links, we can't make any more to it.
@@ -1602,7 +1602,7 @@ xfs_symlink(
1602 * transaction cancel unlocking dp so don't do it explicitly in the 1602 * transaction cancel unlocking dp so don't do it explicitly in the
1603 * error path. 1603 * error path.
1604 */ 1604 */
1605 xfs_trans_ijoin_ref(tp, dp, XFS_ILOCK_EXCL); 1605 xfs_trans_ijoin(tp, dp, XFS_ILOCK_EXCL);
1606 unlock_dp_on_error = B_FALSE; 1606 unlock_dp_on_error = B_FALSE;
1607 1607
1608 /* 1608 /*
@@ -1735,7 +1735,7 @@ xfs_set_dmattrs(
1735 return error; 1735 return error;
1736 } 1736 }
1737 xfs_ilock(ip, XFS_ILOCK_EXCL); 1737 xfs_ilock(ip, XFS_ILOCK_EXCL);
1738 xfs_trans_ijoin_ref(tp, ip, XFS_ILOCK_EXCL); 1738 xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL);
1739 1739
1740 ip->i_d.di_dmevmask = evmask; 1740 ip->i_d.di_dmevmask = evmask;
1741 ip->i_d.di_dmstate = state; 1741 ip->i_d.di_dmstate = state;
@@ -1878,7 +1878,7 @@ xfs_alloc_file_space(
1878 if (error) 1878 if (error)
1879 goto error1; 1879 goto error1;
1880 1880
1881 xfs_trans_ijoin(tp, ip); 1881 xfs_trans_ijoin(tp, ip, 0);
1882 1882
1883 xfs_bmap_init(&free_list, &firstfsb); 1883 xfs_bmap_init(&free_list, &firstfsb);
1884 error = xfs_bmapi_write(tp, ip, startoffset_fsb, 1884 error = xfs_bmapi_write(tp, ip, startoffset_fsb,
@@ -2176,7 +2176,7 @@ xfs_free_file_space(
2176 if (error) 2176 if (error)
2177 goto error1; 2177 goto error1;
2178 2178
2179 xfs_trans_ijoin(tp, ip); 2179 xfs_trans_ijoin(tp, ip, 0);
2180 2180
2181 /* 2181 /*
2182 * issue the bunmapi() call to free the blocks 2182 * issue the bunmapi() call to free the blocks
@@ -2349,7 +2349,7 @@ xfs_change_file_space(
2349 } 2349 }
2350 2350
2351 xfs_ilock(ip, XFS_ILOCK_EXCL); 2351 xfs_ilock(ip, XFS_ILOCK_EXCL);
2352 xfs_trans_ijoin_ref(tp, ip, XFS_ILOCK_EXCL); 2352 xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL);
2353 2353
2354 if ((attr_flags & XFS_ATTR_DMI) == 0) { 2354 if ((attr_flags & XFS_ATTR_DMI) == 0) {
2355 ip->i_d.di_mode &= ~S_ISUID; 2355 ip->i_d.di_mode &= ~S_ISUID;