]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs_copy: fix copy of hard 4k devices
authorEric Sandeen <sandeen@redhat.com>
Tue, 23 Jun 2015 01:35:16 +0000 (11:35 +1000)
committerDave Chinner <david@fromorbit.com>
Tue, 23 Jun 2015 01:35:16 +0000 (11:35 +1000)
If we have a pure 4k device with no 512 emulation, xfs_copy
fails straightaway because it tries to do a 512-byte direct
IO read of the superblock.

Do like we do in xfs_db, and read in the max possible sector size,
because we don't yet know what the filesystem's sector size is.

This fixes a failure in xfs/032 on a hard 4k device.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Chinner <david@fromorbit.com>
copy/xfs_copy.c

index 279527cdad005a2332e36d3e3499a7b2be718aa9..b39c84dc306bdd5af0f4c37e44e91cbd34fb50cf 100644 (file)
@@ -654,8 +654,9 @@ main(int argc, char **argv)
 
        memset(&mbuf, 0, sizeof(xfs_mount_t));
        libxfs_buftarg_init(&mbuf, xargs.ddev, xargs.logdev, xargs.rtdev);
-       sbp = libxfs_readbuf(mbuf.m_ddev_targp, XFS_SB_DADDR, 1, 0,
-                                                       &xfs_sb_buf_ops);
+       sbp = libxfs_readbuf(mbuf.m_ddev_targp, XFS_SB_DADDR,
+                            1 << (XFS_MAX_SECTORSIZE_LOG - BBSHIFT),
+                            0, &xfs_sb_buf_ops);
        sb = &mbuf.m_sb;
        libxfs_sb_from_disk(sb, XFS_BUF_TO_SBP(sbp));