xfs: fix double ijoin in xfs_inactive_symlink_rmt()
authorDave Chinner <dchinner@redhat.com>
Wed, 9 May 2018 14:49:09 +0000 (07:49 -0700)
committerDarrick J. Wong <darrick.wong@oracle.com>
Thu, 10 May 2018 15:56:46 +0000 (08:56 -0700)
commit3565b660e56a78dea189fed75f359fe6d59b6023
tree44e179757d83d08ec2e7c9a00b01e395fb4fc2e4
parentd686d12d23ae1a6a5a52ad2f794f3955985fd54d
xfs: fix double ijoin in xfs_inactive_symlink_rmt()

xfs_inactive_symlink_rmt() does something nasty - it joins an inode
into a transaction it is already joined to. This means the inode can
have multiple log item descriptors attached to the transaction for
it. This breaks teh 1:1 mapping that is supposed to exist
between the log item and log item descriptor.

This results in the log item being processed twice during
transaction commit and CIL formatting, and there are lots of other
potential issues tha arise from double processing of log items in
the transaction commit state machine.

In this case, the inode is already held by the rolling transaction
returned from xfs_defer_finish(), so there's no need to join it
again.

Signed-Off-By: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-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>
fs/xfs/xfs_symlink.c