diff --git a/sys/dev/fdc/fdc.c b/sys/dev/fdc/fdc.c
index 68786b6dc508..1dfa3994d7a9 100644
--- a/sys/dev/fdc/fdc.c
+++ b/sys/dev/fdc/fdc.c
@@ -2561,6 +2561,7 @@ fdmisccmd(dev_t dev, u_int cmd, void *data)
 	struct fd_formb *finfo;
 	struct fdc_readid *idfield;
 	size_t fdblk;
+	int error;
 
  	fdu = FDUNIT(minor(dev));
 	fd = devclass_get_softc(fd_devclass, fdu);
@@ -2602,11 +2603,9 @@ fdmisccmd(dev_t dev, u_int cmd, void *data)
 	 * for the current context.
 	 */
 	fdstrategy(bp);
-	while ((bp->bio_flags & BIO_DONE) == 0)
-		tsleep(bp, PRIBIO, "fdcmd", 0);
-
+	error = biowait(bp, "fdcmd");
 	free(bp, M_TEMP);
-	return (bp->bio_flags & BIO_ERROR ? bp->bio_error : 0);
+	return (error);
 }
 
 static int
diff --git a/sys/isa/fd.c b/sys/isa/fd.c
index 68786b6dc508..1dfa3994d7a9 100644
--- a/sys/isa/fd.c
+++ b/sys/isa/fd.c
@@ -2561,6 +2561,7 @@ fdmisccmd(dev_t dev, u_int cmd, void *data)
 	struct fd_formb *finfo;
 	struct fdc_readid *idfield;
 	size_t fdblk;
+	int error;
 
  	fdu = FDUNIT(minor(dev));
 	fd = devclass_get_softc(fd_devclass, fdu);
@@ -2602,11 +2603,9 @@ fdmisccmd(dev_t dev, u_int cmd, void *data)
 	 * for the current context.
 	 */
 	fdstrategy(bp);
-	while ((bp->bio_flags & BIO_DONE) == 0)
-		tsleep(bp, PRIBIO, "fdcmd", 0);
-
+	error = biowait(bp, "fdcmd");
 	free(bp, M_TEMP);
-	return (bp->bio_flags & BIO_ERROR ? bp->bio_error : 0);
+	return (error);
 }
 
 static int