diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
index 5776d7b0a97e5d7db0eb0b5d4ad8ada3e33f1b45..eaed180613143652c1f6ef21049da0056790b41b 100644
--- a/fs/cifs/smb2ops.c
+++ b/fs/cifs/smb2ops.c
@@ -4055,6 +4055,7 @@ static void smb2_decrypt_offload(struct work_struct *work)
 		goto free_pages;
 	}
 
+	dw->server->lstrp = jiffies;
 	mid = smb2_find_mid(dw->server, dw->buf);
 	if (mid == NULL)
 		cifs_dbg(FYI, "mid not found\n");
@@ -4063,14 +4064,10 @@ static void smb2_decrypt_offload(struct work_struct *work)
 		rc = handle_read_data(dw->server, mid, dw->buf,
 				      dw->server->vals->read_rsp_size,
 				      dw->ppages, dw->npages, dw->len);
+		mid->callback(mid);
+		cifs_mid_q_entry_release(mid);
 	}
 
-	dw->server->lstrp = jiffies;
-
-	mid->callback(mid);
-
-	cifs_mid_q_entry_release(mid);
-
 free_pages:
 	for (i = dw->npages-1; i >= 0; i--)
 		put_page(dw->ppages[i]);