View | Details | Raw Unified | Return to bug 144214 | Differences between
and this patch

Collapse All | Expand All

(-)b/sys/boot/zfs/zfsimpl.c (-4 / +8 lines)
Lines 958-969 zio_read_gang(spa_t *spa, const blkptr_t *bp, const dva_t *dva, void *buf) Link Here
958
			break;
969
			break;
959
	if (!vdev || !vdev->v_read)
970
	if (!vdev || !vdev->v_read)
960
		return (EIO);
971
		return (EIO);
961
	if (vdev->v_read(vdev, bp, &zio_gb, offset, SPA_GANGBLOCKSIZE))
972
	if (vdev->v_read(vdev, NULL, &zio_gb, offset, SPA_GANGBLOCKSIZE))
962
		return (EIO);
973
		return (EIO);
963
974
964
	for (i = 0; i < SPA_GBH_NBLKPTRS; i++) {
975
	for (i = 0; i < SPA_GBH_NBLKPTRS; i++) {
965
		if (zio_read(spa, &zio_gb.zg_blkptr[i], buf))
976
		blkptr_t *gbp = &zio_gb.zg_blkptr[i];
977
978
		if (BP_IS_HOLE(gbp))
979
			continue;
980
		if (zio_read(spa, gbp, buf))
966
			return (EIO);
981
			return (EIO);
982
		buf = (char*)buf + BP_GET_PSIZE(gbp);
967
	}
983
	}
968
 
984
 
969
	return (0);
985
	return (0);
Lines 994-1002 zio_read(spa_t *spa, const blkptr_t *bp, void *buf) Link Here
994
			continue;
1010
			continue;
995
1011
996
		if (DVA_GET_GANG(dva)) {
1012
		if (DVA_GET_GANG(dva)) {
997
			printf("ZFS: gang block detected!\n");
998
			if (zio_read_gang(spa, bp, dva, buf))
1013
			if (zio_read_gang(spa, bp, dva, buf))
999
				return (EIO); 
1014
				continue;
1000
		} else {
1015
		} else {
1001
			vdevid = DVA_GET_VDEV(dva);
1016
			vdevid = DVA_GET_VDEV(dva);
1002
			offset = DVA_GET_OFFSET(dva);
1017
			offset = DVA_GET_OFFSET(dva);

Return to bug 144214