diff mbox

[V2] xfs: fix unaligned access in xfs_btree_visit_blocks

Message ID 1ad226af-4b1b-18ca-274c-20a030ca4768@sandeen.net (mailing list archive)
State Accepted
Headers show

Commit Message

Eric Sandeen May 22, 2017, 8:06 p.m. UTC
This structure copy was throwing unaligned access warnings on sparc64:

Kernel unaligned access at TPC[1043c088] xfs_btree_visit_blocks+0x88/0xe0 [xfs]

xfs_btree_copy_ptrs does a memcpy, which avoids it.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
---


--
To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Darrick J. Wong May 22, 2017, 8:43 p.m. UTC | #1
On Mon, May 22, 2017 at 03:06:40PM -0500, Eric Sandeen wrote:
> This structure copy was throwing unaligned access warnings on sparc64:
> 
> Kernel unaligned access at TPC[1043c088] xfs_btree_visit_blocks+0x88/0xe0 [xfs]
> 
> xfs_btree_copy_ptrs does a memcpy, which avoids it.
> 
> Signed-off-by: Eric Sandeen <sandeen@redhat.com>

Heh. :(

Looks ok to me...
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>

--D

> ---
> 
> diff --git a/fs/xfs/libxfs/xfs_btree.c b/fs/xfs/libxfs/xfs_btree.c
> index 5392674..3a673ba 100644
> --- a/fs/xfs/libxfs/xfs_btree.c
> +++ b/fs/xfs/libxfs/xfs_btree.c
> @@ -4395,7 +4395,7 @@ struct xfs_btree_split_args {
>  			xfs_btree_readahead_ptr(cur, ptr, 1);
>  
>  			/* save for the next iteration of the loop */
> -			lptr = *ptr;
> +			xfs_btree_copy_ptrs(cur, &lptr, ptr, 1);
>  		}
>  
>  		/* for each buffer in the level */
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/fs/xfs/libxfs/xfs_btree.c b/fs/xfs/libxfs/xfs_btree.c
index 5392674..3a673ba 100644
--- a/fs/xfs/libxfs/xfs_btree.c
+++ b/fs/xfs/libxfs/xfs_btree.c
@@ -4395,7 +4395,7 @@  struct xfs_btree_split_args {
 			xfs_btree_readahead_ptr(cur, ptr, 1);
 
 			/* save for the next iteration of the loop */
-			lptr = *ptr;
+			xfs_btree_copy_ptrs(cur, &lptr, ptr, 1);
 		}
 
 		/* for each buffer in the level */