Page MenuHomeFreeBSD

D7360.id.diff
No OneTemporary

D7360.id.diff

Index: head/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c
===================================================================
--- head/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c
+++ head/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c
@@ -88,10 +88,25 @@
#define VSTOR_PKT_SIZE (sizeof(struct vstor_packet) - vmscsi_size_delta)
-#define STORVSC_DATA_SEGCNT_MAX 32
+/*
+ * 33 segments are needed to allow 128KB maxio, in case the data
+ * in the first page is _not_ PAGE_SIZE aligned, e.g.
+ *
+ * |<----------- 128KB ----------->|
+ * | |
+ * 0 2K 4K 8K 16K 124K 128K 130K
+ * | | | | | | | |
+ * +--+--+-----+-----+.......+-----+--+--+
+ * | | | | | | | | | DATA
+ * | | | | | | | | |
+ * +--+--+-----+-----+.......------+--+--+
+ * | | | |
+ * | 1| 31 | 1| ...... # of segments
+ */
+#define STORVSC_DATA_SEGCNT_MAX 33
#define STORVSC_DATA_SEGSZ_MAX PAGE_SIZE
#define STORVSC_DATA_SIZE_MAX \
- (STORVSC_DATA_SEGCNT_MAX * STORVSC_DATA_SEGSZ_MAX)
+ ((STORVSC_DATA_SEGCNT_MAX - 1) * STORVSC_DATA_SEGSZ_MAX)
struct storvsc_softc;
@@ -1386,6 +1401,7 @@
cpi->hba_misc = PIM_NOBUSRESET;
if (hv_storvsc_use_pim_unmapped)
cpi->hba_misc |= PIM_UNMAPPED;
+ cpi->maxio = STORVSC_DATA_SIZE_MAX;
cpi->hba_eng_cnt = 0;
cpi->max_target = STORVSC_MAX_TARGETS;
cpi->max_lun = sc->hs_drv_props->drv_max_luns_per_target;

File Metadata

Mime Type
text/plain
Expires
Mon, Mar 30, 12:02 PM (4 h, 14 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
30586128
Default Alt Text
D7360.id.diff (1 KB)

Event Timeline