Message ID | 20180417191710.14855-3-longli@linuxonhyperv.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Didn't see any obvious problems, but can you fix the checkpatch warnings and resend to the list (I am more concerned about the last two warnings rather than the first one). $ scripts/checkpatch.pl 0001-cifs-smbd-Avoid-allocating-iov-on-the-stack.patch WARNING: line over 80 characters #60: FILE: fs/cifs/smbdirect.c:2106: + log_write(ERR, "expected the pdu length in 1st iov, but got 0x%lu\n", rqst->rq_iov[0].iov_len); ERROR: Prefixing 0x with decimal output is defective #60: FILE: fs/cifs/smbdirect.c:2106: + log_write(ERR, "expected the pdu length in 1st iov, but got 0x%lu\n", rqst->rq_iov[0].iov_len); WARNING: braces {} are not necessary for single statement blocks #69: FILE: fs/cifs/smbdirect.c:2112: + for (i = 0; i < rqst->rq_nvec-1; i++) { buflen += iov[i].iov_len; } total: 1 errors, 2 warnings, 65 lines checked NOTE: For some of the reported defects, checkpatch may be able to mechanically convert to the typical style using --fix or --fix-inplace. 0001-cifs-smbd-Avoid-allocating-iov-on-the-stack.patch has style problems, please review. On Tue, Apr 17, 2018 at 2:17 PM, Long Li <longli@linuxonhyperv.com> wrote: > From: Long Li <longli@microsoft.com> > > It's not necessary to allocate another iov when going through the buffers > in smbd_send() through RDMA send. > > Remove it to reduce stack size. > > Signed-off-by: Long Li <longli@microsoft.com> > Cc: stable@vger.kernel.org > --- > fs/cifs/smbdirect.c | 36 ++++++++++++------------------------ > 1 file changed, 12 insertions(+), 24 deletions(-) > > diff --git a/fs/cifs/smbdirect.c b/fs/cifs/smbdirect.c > index b5c6c0d..f575e9a 100644 > --- a/fs/cifs/smbdirect.c > +++ b/fs/cifs/smbdirect.c > @@ -2088,7 +2088,7 @@ int smbd_send(struct smbd_connection *info, struct smb_rqst *rqst) > int start, i, j; > int max_iov_size = > info->max_send_size - sizeof(struct smbd_data_transfer); > - struct kvec iov[SMBDIRECT_MAX_SGE]; > + struct kvec *iov; > int rc; > > info->smbd_send_pending++; > @@ -2099,32 +2099,20 @@ int smbd_send(struct smbd_connection *info, struct smb_rqst *rqst) > } > > /* > - * This usually means a configuration error > - * We use RDMA read/write for packet size > rdma_readwrite_threshold > - * as long as it's properly configured we should never get into this > - * situation > - */ > - if (rqst->rq_nvec + rqst->rq_npages > SMBDIRECT_MAX_SGE) { > - log_write(ERR, "maximum send segment %x exceeding %x\n", > - rqst->rq_nvec + rqst->rq_npages, SMBDIRECT_MAX_SGE); > - rc = -EINVAL; > - goto done; > - } > - > - /* > - * Remove the RFC1002 length defined in MS-SMB2 section 2.1 > - * It is used only for TCP transport > + * Skip the RFC1002 length defined in MS-SMB2 section 2.1 > + * It is used only for TCP transport in the iov[0] > * In future we may want to add a transport layer under protocol > * layer so this will only be issued to TCP transport > */ > - iov[0].iov_base = (char *)rqst->rq_iov[0].iov_base + 4; > - iov[0].iov_len = rqst->rq_iov[0].iov_len - 4; > - buflen += iov[0].iov_len; > + > + if (rqst->rq_iov[0].iov_len != 4) { > + log_write(ERR, "expected the pdu length in 1st iov, but got 0x%lu\n", rqst->rq_iov[0].iov_len); > + return -EINVAL; > + } > + iov = &rqst->rq_iov[1]; > > /* total up iov array first */ > - for (i = 1; i < rqst->rq_nvec; i++) { > - iov[i].iov_base = rqst->rq_iov[i].iov_base; > - iov[i].iov_len = rqst->rq_iov[i].iov_len; > + for (i = 0; i < rqst->rq_nvec-1; i++) { > buflen += iov[i].iov_len; > } > > @@ -2197,14 +2185,14 @@ int smbd_send(struct smbd_connection *info, struct smb_rqst *rqst) > goto done; > } > i++; > - if (i == rqst->rq_nvec) > + if (i == rqst->rq_nvec-1) > break; > } > start = i; > buflen = 0; > } else { > i++; > - if (i == rqst->rq_nvec) { > + if (i == rqst->rq_nvec-1) { > /* send out all remaining vecs */ > remaining_data_length -= buflen; > log_write(INFO, > -- > 2.7.4 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-cifs" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html
PiBTdWJqZWN0OiBSZTogW1BhdGNoIHYyIDMvNl0gY2lmczogc21iZDogQXZvaWQgYWxsb2NhdGlu ZyBpb3Ygb24gdGhlIHN0YWNrDQo+IA0KPiBEaWRuJ3Qgc2VlIGFueSBvYnZpb3VzIHByb2JsZW1z LCBidXQgY2FuIHlvdSBmaXggdGhlIGNoZWNrcGF0Y2ggd2FybmluZ3MNCj4gYW5kIHJlc2VuZCB0 byB0aGUgbGlzdCAoSSBhbSBtb3JlIGNvbmNlcm5lZCBhYm91dCB0aGUgbGFzdCB0d28gd2Fybmlu Z3MNCj4gcmF0aGVyIHRoYW4gdGhlIGZpcnN0IG9uZSkuDQoNClllcywgSSB3aWxsIGZpeCBpdCBh bmQgcmVzZW5kLg0KDQo+IA0KPiAkIHNjcmlwdHMvY2hlY2twYXRjaC5wbCAwMDAxLWNpZnMtc21i ZC1Bdm9pZC1hbGxvY2F0aW5nLWlvdi1vbi10aGUtDQo+IHN0YWNrLnBhdGNoDQo+IFdBUk5JTkc6 IGxpbmUgb3ZlciA4MCBjaGFyYWN0ZXJzDQo+ICM2MDogRklMRTogZnMvY2lmcy9zbWJkaXJlY3Qu YzoyMTA2Og0KPiArICAgICAgICBsb2dfd3JpdGUoRVJSLCAiZXhwZWN0ZWQgdGhlIHBkdSBsZW5n dGggaW4gMXN0IGlvdiwgYnV0IGdvdA0KPiAweCVsdVxuIiwgcnFzdC0+cnFfaW92WzBdLmlvdl9s ZW4pOw0KPiANCj4gRVJST1I6IFByZWZpeGluZyAweCB3aXRoIGRlY2ltYWwgb3V0cHV0IGlzIGRl ZmVjdGl2ZQ0KPiAjNjA6IEZJTEU6IGZzL2NpZnMvc21iZGlyZWN0LmM6MjEwNjoNCj4gKyAgICAg ICAgbG9nX3dyaXRlKEVSUiwgImV4cGVjdGVkIHRoZSBwZHUgbGVuZ3RoIGluIDFzdCBpb3YsIGJ1 dCBnb3QNCj4gMHglbHVcbiIsIHJxc3QtPnJxX2lvdlswXS5pb3ZfbGVuKTsNCj4gDQo+IFdBUk5J Tkc6IGJyYWNlcyB7fSBhcmUgbm90IG5lY2Vzc2FyeSBmb3Igc2luZ2xlIHN0YXRlbWVudCBibG9j a3MNCj4gIzY5OiBGSUxFOiBmcy9jaWZzL3NtYmRpcmVjdC5jOjIxMTI6DQo+ICsgICAgZm9yIChp ID0gMDsgaSA8IHJxc3QtPnJxX252ZWMtMTsgaSsrKSB7DQo+ICAgICAgICAgIGJ1ZmxlbiArPSBp b3ZbaV0uaW92X2xlbjsNCj4gICAgICB9DQo+IA0KPiB0b3RhbDogMSBlcnJvcnMsIDIgd2Fybmlu Z3MsIDY1IGxpbmVzIGNoZWNrZWQNCj4gDQo+IE5PVEU6IEZvciBzb21lIG9mIHRoZSByZXBvcnRl ZCBkZWZlY3RzLCBjaGVja3BhdGNoIG1heSBiZSBhYmxlIHRvDQo+ICAgICAgIG1lY2hhbmljYWxs eSBjb252ZXJ0IHRvIHRoZSB0eXBpY2FsIHN0eWxlIHVzaW5nIC0tZml4IG9yIC0tZml4LWlucGxh Y2UuDQo+IA0KPiAwMDAxLWNpZnMtc21iZC1Bdm9pZC1hbGxvY2F0aW5nLWlvdi1vbi10aGUtc3Rh Y2sucGF0Y2ggaGFzIHN0eWxlIHByb2JsZW1zLA0KPiBwbGVhc2UgcmV2aWV3Lg0KPiANCj4gT24g VHVlLCBBcHIgMTcsIDIwMTggYXQgMjoxNyBQTSwgTG9uZyBMaSA8bG9uZ2xpQGxpbnV4b25oeXBl cnYuY29tPiB3cm90ZToNCj4gPiBGcm9tOiBMb25nIExpIDxsb25nbGlAbWljcm9zb2Z0LmNvbT4N Cj4gPg0KPiA+IEl0J3Mgbm90IG5lY2Vzc2FyeSB0byBhbGxvY2F0ZSBhbm90aGVyIGlvdiB3aGVu IGdvaW5nIHRocm91Z2ggdGhlDQo+ID4gYnVmZmVycyBpbiBzbWJkX3NlbmQoKSB0aHJvdWdoIFJE TUEgc2VuZC4NCj4gPg0KPiA+IFJlbW92ZSBpdCB0byByZWR1Y2Ugc3RhY2sgc2l6ZS4NCj4gPg0K PiA+IFNpZ25lZC1vZmYtYnk6IExvbmcgTGkgPGxvbmdsaUBtaWNyb3NvZnQuY29tPg0KPiA+IENj OiBzdGFibGVAdmdlci5rZXJuZWwub3JnDQo+ID4gLS0tDQo+ID4gIGZzL2NpZnMvc21iZGlyZWN0 LmMgfCAzNiArKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gPiAgMSBmaWxl IGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDI0IGRlbGV0aW9ucygtKQ0KPiA+DQo+ID4gZGlm ZiAtLWdpdCBhL2ZzL2NpZnMvc21iZGlyZWN0LmMgYi9mcy9jaWZzL3NtYmRpcmVjdC5jIGluZGV4 DQo+ID4gYjVjNmMwZC4uZjU3NWU5YSAxMDA2NDQNCj4gPiAtLS0gYS9mcy9jaWZzL3NtYmRpcmVj dC5jDQo+ID4gKysrIGIvZnMvY2lmcy9zbWJkaXJlY3QuYw0KPiA+IEBAIC0yMDg4LDcgKzIwODgs NyBAQCBpbnQgc21iZF9zZW5kKHN0cnVjdCBzbWJkX2Nvbm5lY3Rpb24gKmluZm8sDQo+IHN0cnVj dCBzbWJfcnFzdCAqcnFzdCkNCj4gPiAgICAgICAgIGludCBzdGFydCwgaSwgajsNCj4gPiAgICAg ICAgIGludCBtYXhfaW92X3NpemUgPQ0KPiA+ICAgICAgICAgICAgICAgICBpbmZvLT5tYXhfc2Vu ZF9zaXplIC0gc2l6ZW9mKHN0cnVjdCBzbWJkX2RhdGFfdHJhbnNmZXIpOw0KPiA+IC0gICAgICAg c3RydWN0IGt2ZWMgaW92W1NNQkRJUkVDVF9NQVhfU0dFXTsNCj4gPiArICAgICAgIHN0cnVjdCBr dmVjICppb3Y7DQo+ID4gICAgICAgICBpbnQgcmM7DQo+ID4NCj4gPiAgICAgICAgIGluZm8tPnNt YmRfc2VuZF9wZW5kaW5nKys7DQo+ID4gQEAgLTIwOTksMzIgKzIwOTksMjAgQEAgaW50IHNtYmRf c2VuZChzdHJ1Y3Qgc21iZF9jb25uZWN0aW9uICppbmZvLA0KPiBzdHJ1Y3Qgc21iX3Jxc3QgKnJx c3QpDQo+ID4gICAgICAgICB9DQo+ID4NCj4gPiAgICAgICAgIC8qDQo+ID4gLSAgICAgICAgKiBU aGlzIHVzdWFsbHkgbWVhbnMgYSBjb25maWd1cmF0aW9uIGVycm9yDQo+ID4gLSAgICAgICAgKiBX ZSB1c2UgUkRNQSByZWFkL3dyaXRlIGZvciBwYWNrZXQgc2l6ZSA+DQo+IHJkbWFfcmVhZHdyaXRl X3RocmVzaG9sZA0KPiA+IC0gICAgICAgICogYXMgbG9uZyBhcyBpdCdzIHByb3Blcmx5IGNvbmZp Z3VyZWQgd2Ugc2hvdWxkIG5ldmVyIGdldCBpbnRvIHRoaXMNCj4gPiAtICAgICAgICAqIHNpdHVh dGlvbg0KPiA+IC0gICAgICAgICovDQo+ID4gLSAgICAgICBpZiAocnFzdC0+cnFfbnZlYyArIHJx c3QtPnJxX25wYWdlcyA+IFNNQkRJUkVDVF9NQVhfU0dFKSB7DQo+ID4gLSAgICAgICAgICAgICAg IGxvZ193cml0ZShFUlIsICJtYXhpbXVtIHNlbmQgc2VnbWVudCAleCBleGNlZWRpbmcgJXhcbiIs DQo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgIHJxc3QtPnJxX252ZWMgKyBycXN0LT5ycV9u cGFnZXMsIFNNQkRJUkVDVF9NQVhfU0dFKTsNCj4gPiAtICAgICAgICAgICAgICAgcmMgPSAtRUlO VkFMOw0KPiA+IC0gICAgICAgICAgICAgICBnb3RvIGRvbmU7DQo+ID4gLSAgICAgICB9DQo+ID4g LQ0KPiA+IC0gICAgICAgLyoNCj4gPiAtICAgICAgICAqIFJlbW92ZSB0aGUgUkZDMTAwMiBsZW5n dGggZGVmaW5lZCBpbiBNUy1TTUIyIHNlY3Rpb24gMi4xDQo+ID4gLSAgICAgICAgKiBJdCBpcyB1 c2VkIG9ubHkgZm9yIFRDUCB0cmFuc3BvcnQNCj4gPiArICAgICAgICAqIFNraXAgdGhlIFJGQzEw MDIgbGVuZ3RoIGRlZmluZWQgaW4gTVMtU01CMiBzZWN0aW9uIDIuMQ0KPiA+ICsgICAgICAgICog SXQgaXMgdXNlZCBvbmx5IGZvciBUQ1AgdHJhbnNwb3J0IGluIHRoZSBpb3ZbMF0NCj4gPiAgICAg ICAgICAqIEluIGZ1dHVyZSB3ZSBtYXkgd2FudCB0byBhZGQgYSB0cmFuc3BvcnQgbGF5ZXIgdW5k ZXIgcHJvdG9jb2wNCj4gPiAgICAgICAgICAqIGxheWVyIHNvIHRoaXMgd2lsbCBvbmx5IGJlIGlz c3VlZCB0byBUQ1AgdHJhbnNwb3J0DQo+ID4gICAgICAgICAgKi8NCj4gPiAtICAgICAgIGlvdlsw XS5pb3ZfYmFzZSA9IChjaGFyICopcnFzdC0+cnFfaW92WzBdLmlvdl9iYXNlICsgNDsNCj4gPiAt ICAgICAgIGlvdlswXS5pb3ZfbGVuID0gcnFzdC0+cnFfaW92WzBdLmlvdl9sZW4gLSA0Ow0KPiA+ IC0gICAgICAgYnVmbGVuICs9IGlvdlswXS5pb3ZfbGVuOw0KPiA+ICsNCj4gPiArICAgICAgIGlm IChycXN0LT5ycV9pb3ZbMF0uaW92X2xlbiAhPSA0KSB7DQo+ID4gKyAgICAgICAgICAgICAgIGxv Z193cml0ZShFUlIsICJleHBlY3RlZCB0aGUgcGR1IGxlbmd0aCBpbiAxc3QgaW92LCBidXQgZ290 DQo+IDB4JWx1XG4iLCBycXN0LT5ycV9pb3ZbMF0uaW92X2xlbik7DQo+ID4gKyAgICAgICAgICAg ICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsgICAgICAgfQ0KPiA+ICsgICAgICAgaW92ID0gJnJx c3QtPnJxX2lvdlsxXTsNCj4gPg0KPiA+ICAgICAgICAgLyogdG90YWwgdXAgaW92IGFycmF5IGZp cnN0ICovDQo+ID4gLSAgICAgICBmb3IgKGkgPSAxOyBpIDwgcnFzdC0+cnFfbnZlYzsgaSsrKSB7 DQo+ID4gLSAgICAgICAgICAgICAgIGlvdltpXS5pb3ZfYmFzZSA9IHJxc3QtPnJxX2lvdltpXS5p b3ZfYmFzZTsNCj4gPiAtICAgICAgICAgICAgICAgaW92W2ldLmlvdl9sZW4gPSBycXN0LT5ycV9p b3ZbaV0uaW92X2xlbjsNCj4gPiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBycXN0LT5ycV9udmVj LTE7IGkrKykgew0KPiA+ICAgICAgICAgICAgICAgICBidWZsZW4gKz0gaW92W2ldLmlvdl9sZW47 DQo+ID4gICAgICAgICB9DQo+ID4NCj4gPiBAQCAtMjE5NywxNCArMjE4NSwxNCBAQCBpbnQgc21i ZF9zZW5kKHN0cnVjdCBzbWJkX2Nvbm5lY3Rpb24gKmluZm8sDQo+IHN0cnVjdCBzbWJfcnFzdCAq cnFzdCkNCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBnb3RvIGRvbmU7DQo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQo+ID4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7DQo+ID4gLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpZiAoaSA9PSBycXN0LT5ycV9udmVjKQ0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gcnFzdC0+cnFfbnZlYy0xKQ0KPiA+ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gPiAgICAgICAgICAg ICAgICAgICAgICAgICB9DQo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBpOw0K PiA+ICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmxlbiA9IDA7DQo+ID4gICAgICAgICAgICAg ICAgIH0gZWxzZSB7DQo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgaSsrOw0KPiA+IC0gICAg ICAgICAgICAgICAgICAgICAgIGlmIChpID09IHJxc3QtPnJxX252ZWMpIHsNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICBpZiAoaSA9PSBycXN0LT5ycV9udmVjLTEpIHsNCj4gPiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNlbmQgb3V0IGFsbCByZW1haW5pbmcgdmVjcyAq Lw0KPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nX2RhdGFfbGVu Z3RoIC09IGJ1ZmxlbjsNCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ193 cml0ZShJTkZPLA0KPiA+IC0tDQo+ID4gMi43LjQNCj4gPg0KPiA+IC0tDQo+ID4gVG8gdW5zdWJz Y3JpYmUgZnJvbSB0aGlzIGxpc3Q6IHNlbmQgdGhlIGxpbmUgInVuc3Vic2NyaWJlIGxpbnV4LWNp ZnMiDQo+ID4gaW4gdGhlIGJvZHkgb2YgYSBtZXNzYWdlIHRvIG1ham9yZG9tb0B2Z2VyLmtlcm5l bC5vcmcgTW9yZQ0KPiBtYWpvcmRvbW8NCj4gPiBpbmZvIGF0DQo+ID4NCj4gaHR0cHM6Ly9uYTAx LnNhZmVsaW5rcy5wcm90ZWN0aW9uLm91dGxvb2suY29tLz91cmw9aHR0cCUzQSUyRiUyRnZnZXIu aw0KPiA+IGVybmVsLm9yZyUyRm1ham9yZG9tby0NCj4gaW5mby5odG1sJmRhdGE9MDIlN0MwMSU3 Q2xvbmdsaSU0MG1pY3Jvc29mdC5jb20lDQo+ID4NCj4gN0MyM2ZiZGJiMDU5OGE0OTdmNjI0NzA4 ZDVhOTJmNjQzNSU3QzcyZjk4OGJmODZmMTQxYWY5MWFiMmQ3Y2QwMTFkDQo+IGI0NyUNCj4gPg0K PiA3QzElN0MwJTdDNjM2NjAwOTQzMzgwODg3OTg4JnNkYXRhPWltaDljV0RRUUVYcXhIZFVyQ3VF eWtnaUxmS3MNCj4gVUFsMjBqQg0KPiA+IHlQT1M3RnJJJTNEJnJlc2VydmVkPTANCj4gDQo+IA0K PiANCj4gLS0NCj4gVGhhbmtzLA0KPiANCj4gU3RldmUNCj4gLS0NCj4gVG8gdW5zdWJzY3JpYmUg ZnJvbSB0aGlzIGxpc3Q6IHNlbmQgdGhlIGxpbmUgInVuc3Vic2NyaWJlIGxpbnV4LWNpZnMiIGlu IHRoZQ0KPiBib2R5IG9mIGEgbWVzc2FnZSB0byBtYWpvcmRvbW9Admdlci5rZXJuZWwub3JnIE1v cmUgbWFqb3Jkb21vIGluZm8gYXQNCj4gaHR0cHM6Ly9uYTAxLnNhZmVsaW5rcy5wcm90ZWN0aW9u Lm91dGxvb2suY29tLz91cmw9aHR0cCUzQSUyRiUyRnZnZXIua2UNCj4gcm5lbC5vcmclMkZtYWpv cmRvbW8tDQo+IGluZm8uaHRtbCZkYXRhPTAyJTdDMDElN0Nsb25nbGklNDBtaWNyb3NvZnQuY29t JTdDMjNmYmRiYjA1OThhNDk3Zg0KPiA2MjQ3MDhkNWE5MmY2NDM1JTdDNzJmOTg4YmY4NmYxNDFh ZjkxYWIyZDdjZDAxMWRiNDclN0MxJTdDMCU3QzYzDQo+IDY2MDA5NDMzODA4ODc5ODgmc2RhdGE9 aW1oOWNXRFFRRVhxeEhkVXJDdUV5a2dpTGZLc1VBbDIwakJ5UE9TN0YNCj4gckklM0QmcmVzZXJ2 ZWQ9MA0K -- To unsubscribe from this list: send the line "unsubscribe linux-cifs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/fs/cifs/smbdirect.c b/fs/cifs/smbdirect.c index b5c6c0d..f575e9a 100644 --- a/fs/cifs/smbdirect.c +++ b/fs/cifs/smbdirect.c @@ -2088,7 +2088,7 @@ int smbd_send(struct smbd_connection *info, struct smb_rqst *rqst) int start, i, j; int max_iov_size = info->max_send_size - sizeof(struct smbd_data_transfer); - struct kvec iov[SMBDIRECT_MAX_SGE]; + struct kvec *iov; int rc; info->smbd_send_pending++; @@ -2099,32 +2099,20 @@ int smbd_send(struct smbd_connection *info, struct smb_rqst *rqst) } /* - * This usually means a configuration error - * We use RDMA read/write for packet size > rdma_readwrite_threshold - * as long as it's properly configured we should never get into this - * situation - */ - if (rqst->rq_nvec + rqst->rq_npages > SMBDIRECT_MAX_SGE) { - log_write(ERR, "maximum send segment %x exceeding %x\n", - rqst->rq_nvec + rqst->rq_npages, SMBDIRECT_MAX_SGE); - rc = -EINVAL; - goto done; - } - - /* - * Remove the RFC1002 length defined in MS-SMB2 section 2.1 - * It is used only for TCP transport + * Skip the RFC1002 length defined in MS-SMB2 section 2.1 + * It is used only for TCP transport in the iov[0] * In future we may want to add a transport layer under protocol * layer so this will only be issued to TCP transport */ - iov[0].iov_base = (char *)rqst->rq_iov[0].iov_base + 4; - iov[0].iov_len = rqst->rq_iov[0].iov_len - 4; - buflen += iov[0].iov_len; + + if (rqst->rq_iov[0].iov_len != 4) { + log_write(ERR, "expected the pdu length in 1st iov, but got 0x%lu\n", rqst->rq_iov[0].iov_len); + return -EINVAL; + } + iov = &rqst->rq_iov[1]; /* total up iov array first */ - for (i = 1; i < rqst->rq_nvec; i++) { - iov[i].iov_base = rqst->rq_iov[i].iov_base; - iov[i].iov_len = rqst->rq_iov[i].iov_len; + for (i = 0; i < rqst->rq_nvec-1; i++) { buflen += iov[i].iov_len; } @@ -2197,14 +2185,14 @@ int smbd_send(struct smbd_connection *info, struct smb_rqst *rqst) goto done; } i++; - if (i == rqst->rq_nvec) + if (i == rqst->rq_nvec-1) break; } start = i; buflen = 0; } else { i++; - if (i == rqst->rq_nvec) { + if (i == rqst->rq_nvec-1) { /* send out all remaining vecs */ remaining_data_length -= buflen; log_write(INFO,