DEF_TPG_PARAM(MaxRecvDataSegmentLength);
 TPG_PARAM_ATTR(MaxRecvDataSegmentLength, S_IRUGO | S_IWUSR);
 
+DEF_TPG_PARAM(MaxXmitDataSegmentLength);
+TPG_PARAM_ATTR(MaxXmitDataSegmentLength, S_IRUGO | S_IWUSR);
+
 DEF_TPG_PARAM(MaxBurstLength);
 TPG_PARAM_ATTR(MaxBurstLength, S_IRUGO | S_IWUSR);
 
        &iscsi_tpg_param_InitialR2T.attr,
        &iscsi_tpg_param_ImmediateData.attr,
        &iscsi_tpg_param_MaxRecvDataSegmentLength.attr,
+       &iscsi_tpg_param_MaxXmitDataSegmentLength.attr,
        &iscsi_tpg_param_MaxBurstLength.attr,
        &iscsi_tpg_param_FirstBurstLength.attr,
        &iscsi_tpg_param_DefaultTime2Wait.attr,
 
        u8      HeaderDigest;                   /* [0,1] == [None,CRC32C] */
        u8      DataDigest;                     /* [0,1] == [None,CRC32C] */
        u32     MaxRecvDataSegmentLength;       /* [512..2**24-1] */
+       u32     MaxXmitDataSegmentLength;       /* [512..2**24-1] */
        u8      OFMarker;                       /* [0,1] == [No,Yes] */
        u8      IFMarker;                       /* [0,1] == [No,Yes] */
        u32     OFMarkInt;                      /* [1..65535] */
 
        if (!param)
                goto out;
 
+       param = iscsi_set_default_param(pl, MAXXMITDATASEGMENTLENGTH,
+                       INITIAL_MAXXMITDATASEGMENTLENGTH,
+                       PHASE_OPERATIONAL, SCOPE_CONNECTION_ONLY, SENDER_BOTH,
+                       TYPERANGE_512_TO_16777215, USE_ALL);
+       if (!param)
+               goto out;
+
        param = iscsi_set_default_param(pl, MAXRECVDATASEGMENTLENGTH,
                        INITIAL_MAXRECVDATASEGMENTLENGTH,
                        PHASE_OPERATIONAL, SCOPE_CONNECTION_ONLY, SENDER_BOTH,
                        SET_PSTATE_NEGOTIATE(param);
                } else if (!strcmp(param->name, MAXRECVDATASEGMENTLENGTH)) {
                        SET_PSTATE_NEGOTIATE(param);
+               } else if (!strcmp(param->name, MAXXMITDATASEGMENTLENGTH)) {
+                       continue;
                } else if (!strcmp(param->name, MAXBURSTLENGTH)) {
                        SET_PSTATE_NEGOTIATE(param);
                } else if (!strcmp(param->name, FIRSTBURSTLENGTH)) {
        pr_debug("---------------------------------------------------"
                        "---------------\n");
        list_for_each_entry(param, ¶m_list->param_list, p_list) {
+               /*
+                * Special case to set MAXXMITDATASEGMENTLENGTH from the
+                * target requested MaxRecvDataSegmentLength, even though
+                * this key is not sent over the wire.
+                */
+               if (!strcmp(param->name, MAXXMITDATASEGMENTLENGTH)) {
+                       ops->MaxXmitDataSegmentLength =
+                               simple_strtoul(param->value, &tmpptr, 0);
+                       pr_debug("MaxXmitDataSegmentLength:     %s\n",
+                               param->value);
+               }
+
                if (!IS_PSTATE_ACCEPTOR(param) && !IS_PSTATE_PROPOSER(param))
                        continue;
                if (!strcmp(param->name, AUTHMETHOD)) {
 
 #define INITIALR2T                     "InitialR2T"
 #define IMMEDIATEDATA                  "ImmediateData"
 #define MAXRECVDATASEGMENTLENGTH       "MaxRecvDataSegmentLength"
+#define MAXXMITDATASEGMENTLENGTH       "MaxXmitDataSegmentLength"
 #define MAXBURSTLENGTH                 "MaxBurstLength"
 #define FIRSTBURSTLENGTH               "FirstBurstLength"
 #define DEFAULTTIME2WAIT               "DefaultTime2Wait"
 #define INITIAL_INITIALR2T                     YES
 #define INITIAL_IMMEDIATEDATA                  YES
 #define INITIAL_MAXRECVDATASEGMENTLENGTH       "8192"
+/*
+ * Match outgoing MXDSL default to incoming Open-iSCSI default
+ */
+#define INITIAL_MAXXMITDATASEGMENTLENGTH       "262144"
 #define INITIAL_MAXBURSTLENGTH                 "262144"
 #define INITIAL_FIRSTBURSTLENGTH               "65536"
 #define INITIAL_DEFAULTTIME2WAIT               "2"