aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/xfs/xfs_attr_remote.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/fs/xfs/xfs_attr_remote.c b/fs/xfs/xfs_attr_remote.c
index aad95b08e76b..bcdc07c4e8f4 100644
--- a/fs/xfs/xfs_attr_remote.c
+++ b/fs/xfs/xfs_attr_remote.c
@@ -52,9 +52,11 @@ xfs_attr3_rmt_blocks(
52 struct xfs_mount *mp, 52 struct xfs_mount *mp,
53 int attrlen) 53 int attrlen)
54{ 54{
55 int buflen = XFS_ATTR3_RMT_BUF_SPACE(mp, 55 if (xfs_sb_version_hascrc(&mp->m_sb)) {
56 mp->m_sb.sb_blocksize); 56 int buflen = XFS_ATTR3_RMT_BUF_SPACE(mp, mp->m_sb.sb_blocksize);
57 return (attrlen + buflen - 1) / buflen; 57 return (attrlen + buflen - 1) / buflen;
58 }
59 return XFS_B_TO_FSB(mp, attrlen);
58} 60}
59 61
60static bool 62static bool
@@ -206,8 +208,9 @@ xfs_attr_rmtval_get(
206 208
207 while (valuelen > 0) { 209 while (valuelen > 0) {
208 nmap = ATTR_RMTVALUE_MAPSIZE; 210 nmap = ATTR_RMTVALUE_MAPSIZE;
211 blkcnt = xfs_attr3_rmt_blocks(mp, valuelen);
209 error = xfs_bmapi_read(args->dp, (xfs_fileoff_t)lblkno, 212 error = xfs_bmapi_read(args->dp, (xfs_fileoff_t)lblkno,
210 args->rmtblkcnt, map, &nmap, 213 blkcnt, map, &nmap,
211 XFS_BMAPI_ATTRFORK); 214 XFS_BMAPI_ATTRFORK);
212 if (error) 215 if (error)
213 return error; 216 return error;
@@ -227,8 +230,8 @@ xfs_attr_rmtval_get(
227 if (error) 230 if (error)
228 return error; 231 return error;
229 232
230 byte_cnt = min_t(int, valuelen, BBTOB(bp->b_length)); 233 byte_cnt = XFS_ATTR3_RMT_BUF_SPACE(mp, BBTOB(bp->b_length));
231 byte_cnt = XFS_ATTR3_RMT_BUF_SPACE(mp, byte_cnt); 234 byte_cnt = min_t(int, valuelen, byte_cnt);
232 235
233 src = bp->b_addr; 236 src = bp->b_addr;
234 if (xfs_sb_version_hascrc(&mp->m_sb)) { 237 if (xfs_sb_version_hascrc(&mp->m_sb)) {