summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Foster <bfoster@redhat.com>2019-10-07 15:54:15 -0400
committerDarrick J. Wong <darrick.wong@oracle.com>2019-10-09 11:54:30 -0400
commit603efebd6768356fb7cea02e4a822587c2dc5d7c (patch)
tree5dc552d9a9253cedc698c926f2af303deba4a26d
parent0b10d8a89f55c416f6a1f6a616669543fa8bdb69 (diff)
xfs: remove broken error handling on failed attr sf to leaf change
xfs_attr_shortform_to_leaf() attempts to put the shortform fork back together after a failed attempt to convert from shortform to leaf format. While this code reallocates and copies back the shortform attr fork data, it never resets the inode format field back to local format. Further, now that the inode is properly logged after the initial switch from local format, any error that triggers the recovery code will eventually abort the transaction and shutdown the fs. Therefore, remove the broken and unnecessary error handling code. Signed-off-by: Brian Foster <bfoster@redhat.com> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
-rw-r--r--fs/xfs/libxfs/xfs_attr_leaf.c19
1 files changed, 2 insertions, 17 deletions
diff --git a/fs/xfs/libxfs/xfs_attr_leaf.c b/fs/xfs/libxfs/xfs_attr_leaf.c
index 36c0a32cefcf..1b956c313b6b 100644
--- a/fs/xfs/libxfs/xfs_attr_leaf.c
+++ b/fs/xfs/libxfs/xfs_attr_leaf.c
@@ -831,28 +831,13 @@ xfs_attr_shortform_to_leaf(
831 831
832 bp = NULL; 832 bp = NULL;
833 error = xfs_da_grow_inode(args, &blkno); 833 error = xfs_da_grow_inode(args, &blkno);
834 if (error) { 834 if (error)
835 /*
836 * If we hit an IO error middle of the transaction inside
837 * grow_inode(), we may have inconsistent data. Bail out.
838 */
839 if (error == -EIO)
840 goto out;
841 xfs_idata_realloc(dp, size, XFS_ATTR_FORK); /* try to put */
842 memcpy(ifp->if_u1.if_data, tmpbuffer, size); /* it back */
843 goto out; 835 goto out;
844 }
845 836
846 ASSERT(blkno == 0); 837 ASSERT(blkno == 0);
847 error = xfs_attr3_leaf_create(args, blkno, &bp); 838 error = xfs_attr3_leaf_create(args, blkno, &bp);
848 if (error) { 839 if (error)
849 /* xfs_attr3_leaf_create may not have instantiated a block */
850 if (bp && (xfs_da_shrink_inode(args, 0, bp) != 0))
851 goto out;
852 xfs_idata_realloc(dp, size, XFS_ATTR_FORK); /* try to put */
853 memcpy(ifp->if_u1.if_data, tmpbuffer, size); /* it back */
854 goto out; 840 goto out;
855 }
856 841
857 memset((char *)&nargs, 0, sizeof(nargs)); 842 memset((char *)&nargs, 0, sizeof(nargs));
858 nargs.dp = dp; 843 nargs.dp = dp;