> Subject: Re: [Patch v2 3/6] cifs: smbd: Avoid allocating iov on the stack > > 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). Yes, I will fix it and resend. > > $ 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@xxxxxxxxxxxxxxxxx> wrote: > > From: Long Li <longli@xxxxxxxxxxxxx> > > > > 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@xxxxxxxxxxxxx> > > Cc: stable@xxxxxxxxxxxxxxx > > --- > > 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@xxxxxxxxxxxxxxx More > majordomo > > info at > > > https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fvger.k > > ernel.org%2Fmajordomo- > info.html&data=02%7C01%7Clongli%40microsoft.com% > > > 7C23fbdbb0598a497f624708d5a92f6435%7C72f988bf86f141af91ab2d7cd011d > b47% > > > 7C1%7C0%7C636600943380887988&sdata=imh9cWDQQEXqxHdUrCuEykgiLfKs > UAl20jB > > yPOS7FrI%3D&reserved=0 > > > > -- > Thanks, > > Steve > -- > To unsubscribe from this list: send the line "unsubscribe linux-cifs" in the > body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at > https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fvger.ke > rnel.org%2Fmajordomo- > info.html&data=02%7C01%7Clongli%40microsoft.com%7C23fbdbb0598a497f > 624708d5a92f6435%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C63 > 6600943380887988&sdata=imh9cWDQQEXqxHdUrCuEykgiLfKsUAl20jByPOS7F > rI%3D&reserved=0 ��.n��������+%������w��{.n�����{�����ܨ}���Ơz�j:+v�����w����ޙ��&�)ߡ�a����z�ޗ���ݢj��w�f