svn commit: r300866 - head/sys/boot/efi/libefi

Doug Ambrisko ambrisko at FreeBSD.org
Fri May 27 19:23:17 UTC 2016


Author: ambrisko
Date: Fri May 27 19:23:15 2016
New Revision: 300866
URL: https://svnweb.freebsd.org/changeset/base/300866

Log:
  If the I/O offset and length is multiple of the media size then
  directly pass the request otherwise use a buffer that is a
  multiple of the media size.  This speeds up I/O quite a bit
  when using large transfer sizes on 4Kn disks etc.
  
  MFC after:	1 week

Modified:
  head/sys/boot/efi/libefi/efipart.c

Modified: head/sys/boot/efi/libefi/efipart.c
==============================================================================
--- head/sys/boot/efi/libefi/efipart.c	Fri May 27 19:15:45 2016	(r300865)
+++ head/sys/boot/efi/libefi/efipart.c	Fri May 27 19:23:15 2016	(r300866)
@@ -325,11 +325,14 @@ efipart_realstrategy(void *devdata, int 
 	if (rsize != NULL)
 		*rsize = size;
 
-	if (blkio->Media->BlockSize == 512)
-		return (efipart_readwrite(blkio, rw, blk, size / 512, buf));
+        if ((size % blkio->Media->BlockSize == 0) &&
+	    ((blk * 512) % blkio->Media->BlockSize == 0))
+                return (efipart_readwrite(blkio, rw,
+		    blk * 512 / blkio->Media->BlockSize,
+		    size / blkio->Media->BlockSize, buf));
 
 	/*
-	 * The block size of the media is not 512B per sector.
+	 * The block size of the media is not a multiple of I/O.
 	 */
 	blkbuf = malloc(blkio->Media->BlockSize);
 	if (blkbuf == NULL)


More information about the svn-src-all mailing list