diff options
author | Dave Chinner <dchinner@redhat.com> | 2015-01-21 17:30:06 -0500 |
---|---|---|
committer | Dave Chinner <david@fromorbit.com> | 2015-01-21 17:30:06 -0500 |
commit | fe22d552b82d7cc7de1851233ae8bef579198637 (patch) | |
tree | 106482e8bd9a8567a0754c59d5fc38d3cb9a577b /fs | |
parent | f19b872b086711bb4b22c3a0f52f16aa920bcc61 (diff) |
xfs: set buf types when converting extent formats
Conversion from local to extent format does not set the buffer type
correctly on the new extent buffer when a symlink data is moved out
of line.
Fix the symlink code and leave a comment in the generic bmap code
reminding us that the format-specific data copy needs to set the
destination buffer type appropriately.
cc: <stable@vger.kernel.org> # 3.10 to current
Tested-by: Jan Kara <jack@suse.cz>
Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/xfs/libxfs/xfs_bmap.c | 6 | ||||
-rw-r--r-- | fs/xfs/libxfs/xfs_symlink_remote.c | 2 |
2 files changed, 7 insertions, 1 deletions
diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c index b5eb4743f75a..4e20fe7497b3 100644 --- a/fs/xfs/libxfs/xfs_bmap.c +++ b/fs/xfs/libxfs/xfs_bmap.c | |||
@@ -973,7 +973,11 @@ xfs_bmap_local_to_extents( | |||
973 | *firstblock = args.fsbno; | 973 | *firstblock = args.fsbno; |
974 | bp = xfs_btree_get_bufl(args.mp, tp, args.fsbno, 0); | 974 | bp = xfs_btree_get_bufl(args.mp, tp, args.fsbno, 0); |
975 | 975 | ||
976 | /* initialise the block and copy the data */ | 976 | /* |
977 | * Initialise the block and copy the data | ||
978 | * | ||
979 | * Note: init_fn must set the buffer log item type correctly! | ||
980 | */ | ||
977 | init_fn(tp, bp, ip, ifp); | 981 | init_fn(tp, bp, ip, ifp); |
978 | 982 | ||
979 | /* account for the change in fork size and log everything */ | 983 | /* account for the change in fork size and log everything */ |
diff --git a/fs/xfs/libxfs/xfs_symlink_remote.c b/fs/xfs/libxfs/xfs_symlink_remote.c index c80c5236c3da..e7e26bd6468f 100644 --- a/fs/xfs/libxfs/xfs_symlink_remote.c +++ b/fs/xfs/libxfs/xfs_symlink_remote.c | |||
@@ -178,6 +178,8 @@ xfs_symlink_local_to_remote( | |||
178 | struct xfs_mount *mp = ip->i_mount; | 178 | struct xfs_mount *mp = ip->i_mount; |
179 | char *buf; | 179 | char *buf; |
180 | 180 | ||
181 | xfs_trans_buf_set_type(tp, bp, XFS_BLFT_SYMLINK_BUF); | ||
182 | |||
181 | if (!xfs_sb_version_hascrc(&mp->m_sb)) { | 183 | if (!xfs_sb_version_hascrc(&mp->m_sb)) { |
182 | bp->b_ops = NULL; | 184 | bp->b_ops = NULL; |
183 | memcpy(bp->b_addr, ifp->if_u1.if_data, ifp->if_bytes); | 185 | memcpy(bp->b_addr, ifp->if_u1.if_data, ifp->if_bytes); |