VirtualBox

Ignore:
Timestamp:
Oct 7, 2009 1:48:35 PM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
53266
Message:

Storage/iSCSI: add config value to define the threshold for write splitting.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Storage/ISCSIHDDCore.cpp

    r23450 r23594  
    108108
    109109
    110 /** Maximum PDU payload size we can handle in one piece. */
     110/** Maximum PDU payload size we can handle in one piece. Greater or equal than
     111 * s_iscsiConfigDefaultWriteSplit. */
    111112#define ISCSI_DATA_LENGTH_MAX _256K
    112113
     
    280281    /** Length of the secret for authenticating the Initiator. */
    281282    size_t              cbTargetSecret;
     283    /** Limit for iSCSI writes, essentially limiting the amount of data
     284     * written in a single write. This is negotiated with the target, so
     285     * the actual size might be smaller. */
     286    uint32_t            cbWriteSplit;
    282287    /** Initiator session identifier. */
    283288    uint64_t            ISID;
     
    424429static const char *s_iscsiConfigDefaultTimeout = "10000";
    425430
     431/** Default write split value, less or equal to ISCSI_DATA_LENGTH_MAX. */
     432static const char *s_iscsiConfigDefaultWriteSplit = "262144";
     433
    426434/** Default host IP stack. */
    427435static const char *s_iscsiConfigDefaultHostIPStack = "1";
     
    439447    { "TargetUsername",     NULL,                               VDCFGVALUETYPE_STRING,  VD_CFGKEY_EXPERT },
    440448    { "TargetSecret",       NULL,                               VDCFGVALUETYPE_BYTES,   VD_CFGKEY_EXPERT },
     449    { "WriteSplit",         s_iscsiConfigDefaultWriteSplit,     VDCFGVALUETYPE_INTEGER, VD_CFGKEY_EXPERT },
    441450    { "Timeout",            s_iscsiConfigDefaultTimeout,        VDCFGVALUETYPE_INTEGER, VD_CFGKEY_EXPERT },
    442451    { "HostIPStack",        s_iscsiConfigDefaultHostIPStack,    VDCFGVALUETYPE_INTEGER, VD_CFGKEY_EXPERT },
     
    838847    bool fParameterNeg = true;;
    839848    pImage->cbRecvDataLength = ISCSI_DATA_LENGTH_MAX;
    840     pImage->cbSendDataLength = ISCSI_DATA_LENGTH_MAX;
     849    pImage->cbSendDataLength = RT_MIN(ISCSI_DATA_LENGTH_MAX, pImage->cbWriteSplit);
    841850    char szMaxDataLength[16];
    842851    RTStrPrintf(szMaxDataLength, sizeof(szMaxDataLength), "%u", ISCSI_DATA_LENGTH_MAX);
     
    22152224    char *pszLUN = NULL, *pszLUNInitial = NULL;
    22162225    bool fLunEncoded = false;
     2226    uint32_t uWriteSplitDef = 0;
    22172227    uint32_t uTimeoutDef = 0;
    22182228    uint64_t uHostIPTmp = 0;
    22192229    bool fHostIPDef = 0;
     2230    rc = RTStrToUInt32Full(s_iscsiConfigDefaultWriteSplit, 0, &uWriteSplitDef);
     2231    AssertRC(rc);
    22202232    rc = RTStrToUInt32Full(s_iscsiConfigDefaultTimeout, 0, &uTimeoutDef);
    22212233    AssertRC(rc);
     
    22712283    if (!VDCFGAreKeysValid(pImage->pInterfaceConfigCallbacks,
    22722284                           pImage->pInterfaceConfig->pvUser,
    2273                            "TargetName\0InitiatorName\0LUN\0TargetAddress\0InitiatorUsername\0InitiatorSecret\0TargetUsername\0TargetSecret\0Timeout\0HostIPStack\0"))
     2285                           "TargetName\0InitiatorName\0LUN\0TargetAddress\0InitiatorUsername\0InitiatorSecret\0TargetUsername\0TargetSecret\0WriteSplit\0Timeout\0HostIPStack\0"))
    22742286    {
    22752287        rc = iscsiError(pImage, VERR_VD_ISCSI_UNKNOWN_CFG_VALUES, RT_SRC_POS, N_("iSCSI: configuration error: unknown configuration keys present"));
     
    23892401    {
    23902402        rc = iscsiError(pImage, rc, RT_SRC_POS, N_("iSCSI: configuration error: failed to read TargetSecret as byte string"));
     2403        goto out;
     2404    }
     2405    rc = VDCFGQueryU32Def(pImage->pInterfaceConfigCallbacks,
     2406                          pImage->pInterfaceConfig->pvUser,
     2407                          "WriteSplit", &pImage->cbWriteSplit,
     2408                          uWriteSplitDef);
     2409    if (RT_FAILURE(rc))
     2410    {
     2411        rc = iscsiError(pImage, rc, RT_SRC_POS, N_("iSCSI: configuration error: failed to read WriteSplit as U32"));
    23912412        goto out;
    23922413    }
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette