diff options
-rw-r--r-- | fs/xfs/libxfs/xfs_attr.c | 9 | ||||
-rw-r--r-- | fs/xfs/libxfs/xfs_attr_remote.c | 2 | ||||
-rw-r--r-- | fs/xfs/libxfs/xfs_bmap.c | 8 | ||||
-rw-r--r-- | fs/xfs/libxfs/xfs_defer.c | 59 | ||||
-rw-r--r-- | fs/xfs/libxfs/xfs_defer.h | 1 | ||||
-rw-r--r-- | fs/xfs/xfs_bmap_util.c | 4 | ||||
-rw-r--r-- | fs/xfs/xfs_inode.c | 2 | ||||
-rw-r--r-- | fs/xfs/xfs_iomap.c | 3 | ||||
-rw-r--r-- | fs/xfs/xfs_reflink.c | 4 | ||||
-rw-r--r-- | fs/xfs/xfs_symlink.c | 1 | ||||
-rw-r--r-- | fs/xfs/xfs_trans.h | 3 |
11 files changed, 21 insertions, 75 deletions
diff --git a/fs/xfs/libxfs/xfs_attr.c b/fs/xfs/libxfs/xfs_attr.c index 227887bee00d..3190dfc21b60 100644 --- a/fs/xfs/libxfs/xfs_attr.c +++ b/fs/xfs/libxfs/xfs_attr.c | |||
@@ -320,7 +320,6 @@ xfs_attr_set( | |||
320 | * buffer and run into problems with the write verifier. | 320 | * buffer and run into problems with the write verifier. |
321 | */ | 321 | */ |
322 | xfs_trans_bhold(args.trans, leaf_bp); | 322 | xfs_trans_bhold(args.trans, leaf_bp); |
323 | xfs_defer_ijoin(args.trans->t_dfops, dp); | ||
324 | error = xfs_defer_finish(&args.trans); | 323 | error = xfs_defer_finish(&args.trans); |
325 | if (error) | 324 | if (error) |
326 | goto out; | 325 | goto out; |
@@ -589,7 +588,6 @@ xfs_attr_leaf_addname( | |||
589 | error = xfs_attr3_leaf_to_node(args); | 588 | error = xfs_attr3_leaf_to_node(args); |
590 | if (error) | 589 | if (error) |
591 | goto out_defer_cancel; | 590 | goto out_defer_cancel; |
592 | xfs_defer_ijoin(args->trans->t_dfops, dp); | ||
593 | error = xfs_defer_finish(&args->trans); | 591 | error = xfs_defer_finish(&args->trans); |
594 | if (error) | 592 | if (error) |
595 | goto out_defer_cancel; | 593 | goto out_defer_cancel; |
@@ -678,7 +676,6 @@ xfs_attr_leaf_addname( | |||
678 | /* bp is gone due to xfs_da_shrink_inode */ | 676 | /* bp is gone due to xfs_da_shrink_inode */ |
679 | if (error) | 677 | if (error) |
680 | goto out_defer_cancel; | 678 | goto out_defer_cancel; |
681 | xfs_defer_ijoin(args->trans->t_dfops, dp); | ||
682 | error = xfs_defer_finish(&args->trans); | 679 | error = xfs_defer_finish(&args->trans); |
683 | if (error) | 680 | if (error) |
684 | goto out_defer_cancel; | 681 | goto out_defer_cancel; |
@@ -742,7 +739,6 @@ xfs_attr_leaf_removename( | |||
742 | /* bp is gone due to xfs_da_shrink_inode */ | 739 | /* bp is gone due to xfs_da_shrink_inode */ |
743 | if (error) | 740 | if (error) |
744 | goto out_defer_cancel; | 741 | goto out_defer_cancel; |
745 | xfs_defer_ijoin(args->trans->t_dfops, dp); | ||
746 | error = xfs_defer_finish(&args->trans); | 742 | error = xfs_defer_finish(&args->trans); |
747 | if (error) | 743 | if (error) |
748 | goto out_defer_cancel; | 744 | goto out_defer_cancel; |
@@ -869,7 +865,6 @@ restart: | |||
869 | error = xfs_attr3_leaf_to_node(args); | 865 | error = xfs_attr3_leaf_to_node(args); |
870 | if (error) | 866 | if (error) |
871 | goto out_defer_cancel; | 867 | goto out_defer_cancel; |
872 | xfs_defer_ijoin(args->trans->t_dfops, dp); | ||
873 | error = xfs_defer_finish(&args->trans); | 868 | error = xfs_defer_finish(&args->trans); |
874 | if (error) | 869 | if (error) |
875 | goto out_defer_cancel; | 870 | goto out_defer_cancel; |
@@ -894,7 +889,6 @@ restart: | |||
894 | error = xfs_da3_split(state); | 889 | error = xfs_da3_split(state); |
895 | if (error) | 890 | if (error) |
896 | goto out_defer_cancel; | 891 | goto out_defer_cancel; |
897 | xfs_defer_ijoin(args->trans->t_dfops, dp); | ||
898 | error = xfs_defer_finish(&args->trans); | 892 | error = xfs_defer_finish(&args->trans); |
899 | if (error) | 893 | if (error) |
900 | goto out_defer_cancel; | 894 | goto out_defer_cancel; |
@@ -991,7 +985,6 @@ restart: | |||
991 | error = xfs_da3_join(state); | 985 | error = xfs_da3_join(state); |
992 | if (error) | 986 | if (error) |
993 | goto out_defer_cancel; | 987 | goto out_defer_cancel; |
994 | xfs_defer_ijoin(args->trans->t_dfops, dp); | ||
995 | error = xfs_defer_finish(&args->trans); | 988 | error = xfs_defer_finish(&args->trans); |
996 | if (error) | 989 | if (error) |
997 | goto out_defer_cancel; | 990 | goto out_defer_cancel; |
@@ -1115,7 +1108,6 @@ xfs_attr_node_removename( | |||
1115 | error = xfs_da3_join(state); | 1108 | error = xfs_da3_join(state); |
1116 | if (error) | 1109 | if (error) |
1117 | goto out_defer_cancel; | 1110 | goto out_defer_cancel; |
1118 | xfs_defer_ijoin(args->trans->t_dfops, dp); | ||
1119 | error = xfs_defer_finish(&args->trans); | 1111 | error = xfs_defer_finish(&args->trans); |
1120 | if (error) | 1112 | if (error) |
1121 | goto out_defer_cancel; | 1113 | goto out_defer_cancel; |
@@ -1147,7 +1139,6 @@ xfs_attr_node_removename( | |||
1147 | /* bp is gone due to xfs_da_shrink_inode */ | 1139 | /* bp is gone due to xfs_da_shrink_inode */ |
1148 | if (error) | 1140 | if (error) |
1149 | goto out_defer_cancel; | 1141 | goto out_defer_cancel; |
1150 | xfs_defer_ijoin(args->trans->t_dfops, dp); | ||
1151 | error = xfs_defer_finish(&args->trans); | 1142 | error = xfs_defer_finish(&args->trans); |
1152 | if (error) | 1143 | if (error) |
1153 | goto out_defer_cancel; | 1144 | goto out_defer_cancel; |
diff --git a/fs/xfs/libxfs/xfs_attr_remote.c b/fs/xfs/libxfs/xfs_attr_remote.c index 77ca38586913..f52552313773 100644 --- a/fs/xfs/libxfs/xfs_attr_remote.c +++ b/fs/xfs/libxfs/xfs_attr_remote.c | |||
@@ -486,7 +486,6 @@ xfs_attr_rmtval_set( | |||
486 | &nmap); | 486 | &nmap); |
487 | if (error) | 487 | if (error) |
488 | goto out_defer_cancel; | 488 | goto out_defer_cancel; |
489 | xfs_defer_ijoin(args->trans->t_dfops, dp); | ||
490 | error = xfs_defer_finish(&args->trans); | 489 | error = xfs_defer_finish(&args->trans); |
491 | if (error) | 490 | if (error) |
492 | goto out_defer_cancel; | 491 | goto out_defer_cancel; |
@@ -627,7 +626,6 @@ xfs_attr_rmtval_remove( | |||
627 | XFS_BMAPI_ATTRFORK, 1, &done); | 626 | XFS_BMAPI_ATTRFORK, 1, &done); |
628 | if (error) | 627 | if (error) |
629 | goto out_defer_cancel; | 628 | goto out_defer_cancel; |
630 | xfs_defer_ijoin(args->trans->t_dfops, args->dp); | ||
631 | error = xfs_defer_finish(&args->trans); | 629 | error = xfs_defer_finish(&args->trans); |
632 | if (error) | 630 | if (error) |
633 | goto out_defer_cancel; | 631 | goto out_defer_cancel; |
diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c index 71687d805f79..5cd490dc891a 100644 --- a/fs/xfs/libxfs/xfs_bmap.c +++ b/fs/xfs/libxfs/xfs_bmap.c | |||
@@ -1119,7 +1119,6 @@ xfs_bmap_add_attrfork( | |||
1119 | xfs_log_sb(tp); | 1119 | xfs_log_sb(tp); |
1120 | } | 1120 | } |
1121 | 1121 | ||
1122 | xfs_defer_ijoin(tp->t_dfops, ip); | ||
1123 | error = xfs_trans_commit(tp); | 1122 | error = xfs_trans_commit(tp); |
1124 | xfs_iunlock(ip, XFS_ILOCK_EXCL); | 1123 | xfs_iunlock(ip, XFS_ILOCK_EXCL); |
1125 | return error; | 1124 | return error; |
@@ -5987,7 +5986,6 @@ __xfs_bmap_add( | |||
5987 | int whichfork, | 5986 | int whichfork, |
5988 | struct xfs_bmbt_irec *bmap) | 5987 | struct xfs_bmbt_irec *bmap) |
5989 | { | 5988 | { |
5990 | int error; | ||
5991 | struct xfs_bmap_intent *bi; | 5989 | struct xfs_bmap_intent *bi; |
5992 | 5990 | ||
5993 | trace_xfs_bmap_defer(mp, | 5991 | trace_xfs_bmap_defer(mp, |
@@ -6006,12 +6004,6 @@ __xfs_bmap_add( | |||
6006 | bi->bi_whichfork = whichfork; | 6004 | bi->bi_whichfork = whichfork; |
6007 | bi->bi_bmap = *bmap; | 6005 | bi->bi_bmap = *bmap; |
6008 | 6006 | ||
6009 | error = xfs_defer_ijoin(dfops, bi->bi_owner); | ||
6010 | if (error) { | ||
6011 | kmem_free(bi); | ||
6012 | return error; | ||
6013 | } | ||
6014 | |||
6015 | xfs_defer_add(dfops, XFS_DEFER_OPS_TYPE_BMAP, &bi->bi_list); | 6007 | xfs_defer_add(dfops, XFS_DEFER_OPS_TYPE_BMAP, &bi->bi_list); |
6016 | return 0; | 6008 | return 0; |
6017 | } | 6009 | } |
diff --git a/fs/xfs/libxfs/xfs_defer.c b/fs/xfs/libxfs/xfs_defer.c index e9b7671d289a..1e7073252a5e 100644 --- a/fs/xfs/libxfs/xfs_defer.c +++ b/fs/xfs/libxfs/xfs_defer.c | |||
@@ -15,6 +15,8 @@ | |||
15 | #include "xfs_defer.h" | 15 | #include "xfs_defer.h" |
16 | #include "xfs_trans.h" | 16 | #include "xfs_trans.h" |
17 | #include "xfs_buf_item.h" | 17 | #include "xfs_buf_item.h" |
18 | #include "xfs_inode.h" | ||
19 | #include "xfs_inode_item.h" | ||
18 | #include "xfs_trace.h" | 20 | #include "xfs_trace.h" |
19 | 21 | ||
20 | /* | 22 | /* |
@@ -230,16 +232,14 @@ xfs_defer_trans_roll( | |||
230 | { | 232 | { |
231 | struct xfs_defer_ops *dop = (*tp)->t_dfops; | 233 | struct xfs_defer_ops *dop = (*tp)->t_dfops; |
232 | struct xfs_buf_log_item *bli; | 234 | struct xfs_buf_log_item *bli; |
235 | struct xfs_inode_log_item *ili; | ||
233 | struct xfs_log_item *lip; | 236 | struct xfs_log_item *lip; |
234 | struct xfs_buf *bplist[XFS_DEFER_OPS_NR_BUFS]; | 237 | struct xfs_buf *bplist[XFS_DEFER_OPS_NR_BUFS]; |
235 | int bpcount = 0; | 238 | struct xfs_inode *iplist[XFS_DEFER_OPS_NR_INODES]; |
239 | int bpcount = 0, ipcount = 0; | ||
236 | int i; | 240 | int i; |
237 | int error; | 241 | int error; |
238 | 242 | ||
239 | /* Log all the joined inodes. */ | ||
240 | for (i = 0; i < XFS_DEFER_OPS_NR_INODES && dop->dop_inodes[i]; i++) | ||
241 | xfs_trans_log_inode(*tp, dop->dop_inodes[i], XFS_ILOG_CORE); | ||
242 | |||
243 | list_for_each_entry(lip, &(*tp)->t_items, li_trans) { | 243 | list_for_each_entry(lip, &(*tp)->t_items, li_trans) { |
244 | switch (lip->li_type) { | 244 | switch (lip->li_type) { |
245 | case XFS_LI_BUF: | 245 | case XFS_LI_BUF: |
@@ -254,6 +254,19 @@ xfs_defer_trans_roll( | |||
254 | bplist[bpcount++] = bli->bli_buf; | 254 | bplist[bpcount++] = bli->bli_buf; |
255 | } | 255 | } |
256 | break; | 256 | break; |
257 | case XFS_LI_INODE: | ||
258 | ili = container_of(lip, struct xfs_inode_log_item, | ||
259 | ili_item); | ||
260 | if (ili->ili_lock_flags == 0) { | ||
261 | if (ipcount >= XFS_DEFER_OPS_NR_INODES) { | ||
262 | ASSERT(0); | ||
263 | return -EFSCORRUPTED; | ||
264 | } | ||
265 | xfs_trans_log_inode(*tp, ili->ili_inode, | ||
266 | XFS_ILOG_CORE); | ||
267 | iplist[ipcount++] = ili->ili_inode; | ||
268 | } | ||
269 | break; | ||
257 | default: | 270 | default: |
258 | break; | 271 | break; |
259 | } | 272 | } |
@@ -271,8 +284,8 @@ xfs_defer_trans_roll( | |||
271 | } | 284 | } |
272 | 285 | ||
273 | /* Rejoin the joined inodes. */ | 286 | /* Rejoin the joined inodes. */ |
274 | for (i = 0; i < XFS_DEFER_OPS_NR_INODES && dop->dop_inodes[i]; i++) | 287 | for (i = 0; i < ipcount; i++) |
275 | xfs_trans_ijoin(*tp, dop->dop_inodes[i], 0); | 288 | xfs_trans_ijoin(*tp, iplist[i], 0); |
276 | 289 | ||
277 | /* Rejoin the buffers and dirty them so the log moves forward. */ | 290 | /* Rejoin the buffers and dirty them so the log moves forward. */ |
278 | for (i = 0; i < bpcount; i++) { | 291 | for (i = 0; i < bpcount; i++) { |
@@ -292,41 +305,13 @@ xfs_defer_has_unfinished_work( | |||
292 | } | 305 | } |
293 | 306 | ||
294 | /* | 307 | /* |
295 | * Add this inode to the deferred op. Each joined inode is relogged | ||
296 | * each time we roll the transaction. | ||
297 | */ | ||
298 | int | ||
299 | xfs_defer_ijoin( | ||
300 | struct xfs_defer_ops *dop, | ||
301 | struct xfs_inode *ip) | ||
302 | { | ||
303 | int i; | ||
304 | |||
305 | for (i = 0; i < XFS_DEFER_OPS_NR_INODES; i++) { | ||
306 | if (dop->dop_inodes[i] == ip) | ||
307 | return 0; | ||
308 | else if (dop->dop_inodes[i] == NULL) { | ||
309 | dop->dop_inodes[i] = ip; | ||
310 | return 0; | ||
311 | } | ||
312 | } | ||
313 | |||
314 | ASSERT(0); | ||
315 | return -EFSCORRUPTED; | ||
316 | } | ||
317 | |||
318 | /* | ||
319 | * Reset an already used dfops after finish. | 308 | * Reset an already used dfops after finish. |
320 | */ | 309 | */ |
321 | static void | 310 | static void |
322 | xfs_defer_reset( | 311 | xfs_defer_reset( |
323 | struct xfs_trans *tp) | 312 | struct xfs_trans *tp) |
324 | { | 313 | { |
325 | struct xfs_defer_ops *dop = tp->t_dfops; | 314 | ASSERT(!xfs_defer_has_unfinished_work(tp->t_dfops)); |
326 | |||
327 | ASSERT(!xfs_defer_has_unfinished_work(dop)); | ||
328 | |||
329 | memset(dop->dop_inodes, 0, sizeof(dop->dop_inodes)); | ||
330 | 315 | ||
331 | /* | 316 | /* |
332 | * Low mode state transfers across transaction rolls to mirror dfops | 317 | * Low mode state transfers across transaction rolls to mirror dfops |
@@ -588,8 +573,6 @@ xfs_defer_move( | |||
588 | list_splice_init(&src->dop_intake, &dst->dop_intake); | 573 | list_splice_init(&src->dop_intake, &dst->dop_intake); |
589 | list_splice_init(&src->dop_pending, &dst->dop_pending); | 574 | list_splice_init(&src->dop_pending, &dst->dop_pending); |
590 | 575 | ||
591 | memcpy(dst->dop_inodes, src->dop_inodes, sizeof(dst->dop_inodes)); | ||
592 | |||
593 | /* | 576 | /* |
594 | * Low free space mode was historically controlled by a dfops field. | 577 | * Low free space mode was historically controlled by a dfops field. |
595 | * This meant that low mode state potentially carried across multiple | 578 | * This meant that low mode state potentially carried across multiple |
diff --git a/fs/xfs/libxfs/xfs_defer.h b/fs/xfs/libxfs/xfs_defer.h index 4a8bb838adf2..bf1e9f78561e 100644 --- a/fs/xfs/libxfs/xfs_defer.h +++ b/fs/xfs/libxfs/xfs_defer.h | |||
@@ -42,7 +42,6 @@ int xfs_defer_finish(struct xfs_trans **tp); | |||
42 | void xfs_defer_cancel(struct xfs_trans *); | 42 | void xfs_defer_cancel(struct xfs_trans *); |
43 | void xfs_defer_init(struct xfs_trans *tp, struct xfs_defer_ops *dop); | 43 | void xfs_defer_init(struct xfs_trans *tp, struct xfs_defer_ops *dop); |
44 | bool xfs_defer_has_unfinished_work(struct xfs_defer_ops *dop); | 44 | bool xfs_defer_has_unfinished_work(struct xfs_defer_ops *dop); |
45 | int xfs_defer_ijoin(struct xfs_defer_ops *dop, struct xfs_inode *ip); | ||
46 | void xfs_defer_move(struct xfs_trans *dtp, struct xfs_trans *stp); | 45 | void xfs_defer_move(struct xfs_trans *dtp, struct xfs_trans *stp); |
47 | 46 | ||
48 | /* Description of a deferred type. */ | 47 | /* Description of a deferred type. */ |
diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c index 0c58a66b39e5..30ac1300dc49 100644 --- a/fs/xfs/xfs_bmap_util.c +++ b/fs/xfs/xfs_bmap_util.c | |||
@@ -979,7 +979,6 @@ xfs_alloc_file_space( | |||
979 | /* | 979 | /* |
980 | * Complete the transaction | 980 | * Complete the transaction |
981 | */ | 981 | */ |
982 | xfs_defer_ijoin(tp->t_dfops, ip); | ||
983 | error = xfs_trans_commit(tp); | 982 | error = xfs_trans_commit(tp); |
984 | xfs_iunlock(ip, XFS_ILOCK_EXCL); | 983 | xfs_iunlock(ip, XFS_ILOCK_EXCL); |
985 | if (error) | 984 | if (error) |
@@ -1037,8 +1036,6 @@ xfs_unmap_extent( | |||
1037 | if (error) | 1036 | if (error) |
1038 | goto out_trans_cancel; | 1037 | goto out_trans_cancel; |
1039 | 1038 | ||
1040 | xfs_defer_ijoin(tp->t_dfops, ip); | ||
1041 | |||
1042 | error = xfs_trans_commit(tp); | 1039 | error = xfs_trans_commit(tp); |
1043 | out_unlock: | 1040 | out_unlock: |
1044 | xfs_iunlock(ip, XFS_ILOCK_EXCL); | 1041 | xfs_iunlock(ip, XFS_ILOCK_EXCL); |
@@ -1624,7 +1621,6 @@ xfs_swap_extent_rmap( | |||
1624 | if (error) | 1621 | if (error) |
1625 | goto out_defer; | 1622 | goto out_defer; |
1626 | 1623 | ||
1627 | xfs_defer_ijoin(tp->t_dfops, ip); | ||
1628 | error = xfs_defer_finish(tpp); | 1624 | error = xfs_defer_finish(tpp); |
1629 | tp = *tpp; | 1625 | tp = *tpp; |
1630 | if (error) | 1626 | if (error) |
diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index 441c8593cfd7..7bb46a0eecfc 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c | |||
@@ -1569,7 +1569,6 @@ xfs_itruncate_extents_flags( | |||
1569 | * Duplicate the transaction that has the permanent | 1569 | * Duplicate the transaction that has the permanent |
1570 | * reservation and commit the old transaction. | 1570 | * reservation and commit the old transaction. |
1571 | */ | 1571 | */ |
1572 | xfs_defer_ijoin(tp->t_dfops, ip); | ||
1573 | error = xfs_defer_finish(&tp); | 1572 | error = xfs_defer_finish(&tp); |
1574 | if (error) | 1573 | if (error) |
1575 | goto out_bmap_cancel; | 1574 | goto out_bmap_cancel; |
@@ -1810,7 +1809,6 @@ xfs_inactive_ifree( | |||
1810 | * Just ignore errors at this point. There is nothing we can do except | 1809 | * Just ignore errors at this point. There is nothing we can do except |
1811 | * to try to keep going. Make sure it's not a silent error. | 1810 | * to try to keep going. Make sure it's not a silent error. |
1812 | */ | 1811 | */ |
1813 | xfs_defer_ijoin(tp->t_dfops, ip); | ||
1814 | error = xfs_trans_commit(tp); | 1812 | error = xfs_trans_commit(tp); |
1815 | if (error) | 1813 | if (error) |
1816 | xfs_notice(mp, "%s: xfs_trans_commit returned error %d", | 1814 | xfs_notice(mp, "%s: xfs_trans_commit returned error %d", |
diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c index 8093a01fcf9e..3282575e2df4 100644 --- a/fs/xfs/xfs_iomap.c +++ b/fs/xfs/xfs_iomap.c | |||
@@ -261,7 +261,6 @@ xfs_iomap_write_direct( | |||
261 | /* | 261 | /* |
262 | * Complete the transaction | 262 | * Complete the transaction |
263 | */ | 263 | */ |
264 | xfs_defer_ijoin(tp->t_dfops, ip); | ||
265 | error = xfs_trans_commit(tp); | 264 | error = xfs_trans_commit(tp); |
266 | if (error) | 265 | if (error) |
267 | goto out_unlock; | 266 | goto out_unlock; |
@@ -764,7 +763,6 @@ xfs_iomap_write_allocate( | |||
764 | if (error) | 763 | if (error) |
765 | goto trans_cancel; | 764 | goto trans_cancel; |
766 | 765 | ||
767 | xfs_defer_ijoin(tp->t_dfops, ip); | ||
768 | error = xfs_trans_commit(tp); | 766 | error = xfs_trans_commit(tp); |
769 | if (error) | 767 | if (error) |
770 | goto error0; | 768 | goto error0; |
@@ -884,7 +882,6 @@ xfs_iomap_write_unwritten( | |||
884 | xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); | 882 | xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); |
885 | } | 883 | } |
886 | 884 | ||
887 | xfs_defer_ijoin(tp->t_dfops, ip); | ||
888 | error = xfs_trans_commit(tp); | 885 | error = xfs_trans_commit(tp); |
889 | xfs_iunlock(ip, XFS_ILOCK_EXCL); | 886 | xfs_iunlock(ip, XFS_ILOCK_EXCL); |
890 | if (error) | 887 | if (error) |
diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c index e986fcf928e5..dce8ba8ab681 100644 --- a/fs/xfs/xfs_reflink.c +++ b/fs/xfs/xfs_reflink.c | |||
@@ -435,7 +435,6 @@ retry: | |||
435 | xfs_inode_set_cowblocks_tag(ip); | 435 | xfs_inode_set_cowblocks_tag(ip); |
436 | 436 | ||
437 | /* Finish up. */ | 437 | /* Finish up. */ |
438 | xfs_defer_ijoin(tp->t_dfops, ip); | ||
439 | error = xfs_trans_commit(tp); | 438 | error = xfs_trans_commit(tp); |
440 | if (error) | 439 | if (error) |
441 | return error; | 440 | return error; |
@@ -518,7 +517,6 @@ xfs_reflink_cancel_cow_blocks( | |||
518 | NULL); | 517 | NULL); |
519 | 518 | ||
520 | /* Roll the transaction */ | 519 | /* Roll the transaction */ |
521 | xfs_defer_ijoin((*tpp)->t_dfops, ip); | ||
522 | error = xfs_defer_finish(tpp); | 520 | error = xfs_defer_finish(tpp); |
523 | if (error) { | 521 | if (error) { |
524 | xfs_defer_cancel(*tpp); | 522 | xfs_defer_cancel(*tpp); |
@@ -716,7 +714,6 @@ xfs_reflink_end_cow( | |||
716 | /* Remove the mapping from the CoW fork. */ | 714 | /* Remove the mapping from the CoW fork. */ |
717 | xfs_bmap_del_extent_cow(ip, &icur, &got, &del); | 715 | xfs_bmap_del_extent_cow(ip, &icur, &got, &del); |
718 | 716 | ||
719 | xfs_defer_ijoin(tp->t_dfops, ip); | ||
720 | error = xfs_defer_finish(&tp); | 717 | error = xfs_defer_finish(&tp); |
721 | if (error) | 718 | if (error) |
722 | goto out_cancel; | 719 | goto out_cancel; |
@@ -1077,7 +1074,6 @@ xfs_reflink_remap_extent( | |||
1077 | 1074 | ||
1078 | next_extent: | 1075 | next_extent: |
1079 | /* Process all the deferred stuff. */ | 1076 | /* Process all the deferred stuff. */ |
1080 | xfs_defer_ijoin(tp->t_dfops, ip); | ||
1081 | error = xfs_defer_finish(&tp); | 1077 | error = xfs_defer_finish(&tp); |
1082 | if (error) | 1078 | if (error) |
1083 | goto out_cancel; | 1079 | goto out_cancel; |
diff --git a/fs/xfs/xfs_symlink.c b/fs/xfs/xfs_symlink.c index 2bfe7fbbedb2..a3e98c64b6e3 100644 --- a/fs/xfs/xfs_symlink.c +++ b/fs/xfs/xfs_symlink.c | |||
@@ -454,7 +454,6 @@ xfs_inactive_symlink_rmt( | |||
454 | * Commit the transaction. This first logs the EFI and the inode, then | 454 | * Commit the transaction. This first logs the EFI and the inode, then |
455 | * rolls and commits the transaction that frees the extents. | 455 | * rolls and commits the transaction that frees the extents. |
456 | */ | 456 | */ |
457 | xfs_defer_ijoin(tp->t_dfops, ip); | ||
458 | xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); | 457 | xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); |
459 | error = xfs_trans_commit(tp); | 458 | error = xfs_trans_commit(tp); |
460 | if (error) { | 459 | if (error) { |
diff --git a/fs/xfs/xfs_trans.h b/fs/xfs/xfs_trans.h index 581456c79197..8665d45b82c6 100644 --- a/fs/xfs/xfs_trans.h +++ b/fs/xfs/xfs_trans.h | |||
@@ -97,9 +97,6 @@ void xfs_log_item_init(struct xfs_mount *mp, struct xfs_log_item *item, | |||
97 | struct xfs_defer_ops { | 97 | struct xfs_defer_ops { |
98 | struct list_head dop_intake; /* unlogged pending work */ | 98 | struct list_head dop_intake; /* unlogged pending work */ |
99 | struct list_head dop_pending; /* logged pending work */ | 99 | struct list_head dop_pending; /* logged pending work */ |
100 | |||
101 | /* relog these with each roll */ | ||
102 | struct xfs_inode *dop_inodes[XFS_DEFER_OPS_NR_INODES]; | ||
103 | }; | 100 | }; |
104 | 101 | ||
105 | /* | 102 | /* |