Commit b7a55bbd authored by Long Li's avatar Long Li Committed by Steve French
Browse files

cifs: smbd: Invalidate and deregister memory registration on re-send for direct I/O



On re-send, there might be a reconnect and all prevoius memory registrations
need to be invalidated and deregistered.

Signed-off-by: default avatarLong Li <longli@microsoft.com>
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent 14cc639c
Loading
Loading
Loading
Loading
+18 −2
Original line number Diff line number Diff line
@@ -2803,10 +2803,18 @@ cifs_resend_wdata(struct cifs_writedata *wdata, struct list_head *wdata_list,
		if (!rc) {
			if (wdata->cfile->invalidHandle)
				rc = -EAGAIN;
			else
			else {
#ifdef CONFIG_CIFS_SMB_DIRECT
				if (wdata->mr) {
					wdata->mr->need_invalidate = true;
					smbd_deregister_mr(wdata->mr);
					wdata->mr = NULL;
				}
#endif
				rc = server->ops->async_writev(wdata,
					cifs_uncached_writedata_release);
			}
		}

		/* If the write was successfully sent, we are done */
		if (!rc) {
@@ -3528,9 +3536,17 @@ static int cifs_resend_rdata(struct cifs_readdata *rdata,
		if (!rc) {
			if (rdata->cfile->invalidHandle)
				rc = -EAGAIN;
			else
			else {
#ifdef CONFIG_CIFS_SMB_DIRECT
				if (rdata->mr) {
					rdata->mr->need_invalidate = true;
					smbd_deregister_mr(rdata->mr);
					rdata->mr = NULL;
				}
#endif
				rc = server->ops->async_readv(rdata);
			}
		}

		/* If the read was successfully sent, we are done */
		if (!rc) {