linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Pavel Shilovsky <piastry-7qunaywFIewox3rIn2DAYQ@public.gmane.org>
To: linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Cc: linux-fsdevel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: [PATCH v2 13/53] CIFS: Add SMB2 transport routines
Date: Fri, 28 Oct 2011 23:54:24 +0400	[thread overview]
Message-ID: <1319831704-3572-14-git-send-email-piastry@etersoft.ru> (raw)
In-Reply-To: <1319831704-3572-1-git-send-email-piastry-7qunaywFIewox3rIn2DAYQ@public.gmane.org>

And simplify smb_sendv to make it process SMB2 requests. It let us
send SMB2 negotiate message to the server.

Signed-off-by: Pavel Shilovsky <piastry-7qunaywFIewox3rIn2DAYQ@public.gmane.org>
---
 fs/cifs/cifsglob.h      |    6 ++
 fs/cifs/cifsproto.h     |    4 +-
 fs/cifs/smb2misc.c      |   11 +--
 fs/cifs/smb2proto.h     |    4 +-
 fs/cifs/smb2transport.c |  209 ++++++++++++++++++++++++++++++++++++++++-------
 fs/cifs/transport.c     |   75 ++++++++++-------
 6 files changed, 240 insertions(+), 69 deletions(-)

diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
index 2703b7e..4ccd893 100644
--- a/fs/cifs/cifsglob.h
+++ b/fs/cifs/cifsglob.h
@@ -239,6 +239,12 @@ struct cifs_mnt_data {
 	int flags;
 };
 
+static inline unsigned int
+get_rfc1002_length(void *buf)
+{
+       return be32_to_cpu(*((__be32 *)buf));
+}
+
 struct TCP_Server_Info {
 	struct list_head tcp_ses_list;
 	struct list_head smb_ses_list;
diff --git a/fs/cifs/cifsproto.h b/fs/cifs/cifsproto.h
index 2b3fa3b..5109925 100644
--- a/fs/cifs/cifsproto.h
+++ b/fs/cifs/cifsproto.h
@@ -36,7 +36,9 @@ extern void cifs_buf_release(void *);
 extern struct smb_hdr *cifs_small_buf_get(void);
 extern void cifs_small_buf_release(void *);
 extern int smb_send(struct TCP_Server_Info *, struct smb_hdr *,
-			unsigned int /* length */);
+		    unsigned int /* length */);
+extern int smb_sendv(struct TCP_Server_Info *server, struct kvec *iov,
+		     int n_vec);
 extern unsigned int _GetXid(void);
 extern void _FreeXid(unsigned int);
 #define GetXid()						\
diff --git a/fs/cifs/smb2misc.c b/fs/cifs/smb2misc.c
index 1a600d8..6f7afdc 100644
--- a/fs/cifs/smb2misc.c
+++ b/fs/cifs/smb2misc.c
@@ -27,19 +27,18 @@
 #include "cifs_unicode.h"
 #include "smb2status.h"
 
-/*
-__u64 get_mid(struct tcp_srv_inf *server)
+__u64 get_mid(struct TCP_Server_Info *server)
 {
 	__u64 mid;
 
 	if (server == NULL)
 		return 0;
 
-	spin_lock(&SMB2_mid_lock);
-	mid = server->current_mid++;
-	spin_unlock(&SMB2_mid_lock);
+	spin_lock(&GlobalMid_Lock);
+	mid = server->current_smb2_mid++;
+	spin_unlock(&GlobalMid_Lock);
 	return mid;
-} */ /* BB do we eventually need an SMB2 version of this routine? BB */
+} /* BB do we eventually need an SMB2 version of this routine? BB */
 
 static int
 check_smb2_hdr(struct smb2_hdr *smb, __u64 mid)
diff --git a/fs/cifs/smb2proto.h b/fs/cifs/smb2proto.h
index c4c40bd..e826279 100644
--- a/fs/cifs/smb2proto.h
+++ b/fs/cifs/smb2proto.h
@@ -38,8 +38,8 @@ extern void free_rsp_buf(int resp_buftype, void *pSMB2r);
 extern struct smb2_hdr *smb2_buf_get(void);
 extern void smb2_buf_release(void *);
 extern struct smb2_hdr *smb2_small_buf_get(void);
-extern void smb2_small_buf_release(void *);
-extern __u64 get_mid(struct TCP_Server_Info *server);*/
+extern void smb2_small_buf_release(void *);*/
+extern __u64 get_mid(struct TCP_Server_Info *server);
 extern int small_smb2_init_no_tc(__le16 smb2_cmd,
 				struct cifs_ses *ses,
 				void **request_buf);
diff --git a/fs/cifs/smb2transport.c b/fs/cifs/smb2transport.c
index 2ca9943..adf24c4 100644
--- a/fs/cifs/smb2transport.c
+++ b/fs/cifs/smb2transport.c
@@ -38,22 +38,15 @@
 extern mempool_t *smb2_mid_poolp;
 
 /*
- *  Send an (optionally, already signed) SMB2 request over a socket.
- *  This socket is already locked (by a mutex) by the caller so we
- *  won't have framing problems or mess up SMB2 signatures.
+ * Set message id for the request. Should be called after wait_for_free_response
+ * and locking srv_mutex. iov array must have at least 1 element.
  */
-
-int smb2_sendv(struct TCP_Server_Info *server, struct kvec *iov, int n_vec)
+static inline void smb2_seq_num_into_buf(struct TCP_Server_Info *server,
+					 struct kvec *iov)
 {
-	int rc = -EHOSTDOWN;
-
-	cFYI(1, "function not merged yet");  /* BB fixme */
-
-	return rc;
+	((struct smb2_hdr *)iov[0].iov_base)->MessageId = get_mid(server);
 }
 
-
-
 /*
  *
  * Send an SMB Request.  No response info (other than return code)
@@ -108,23 +101,6 @@ smb2_sendrcv_blocking(const unsigned int xid, struct cifs_tcon *tcon,
 	return rc;
 }
 
-/*
- * sendrcv2 is passed a cifs_ses structure (rather than simply being
- * passed the ses->server->socket), because it needs the creds
- * contained in the cifs_ses struct in order to sign requests.
- */
-int
-smb2_sendrcv2(const unsigned int xid, struct cifs_ses *ses,
-	     struct kvec *iov, int n_vec, int *presp_buftype /* ret */,
-	     int *status /* ret SMB2 network status code */, const int flags)
-{
-	int rc = -EHOSTDOWN;
-
-	cFYI(1, "function not merged yet");  /* BB fixme */
-
-	return rc;
-}
-
 static void
 wake_up_smb2_task(struct smb2_mid_entry *mid)
 {
@@ -251,7 +227,7 @@ wait_for_smb2_response(struct TCP_Server_Info *server,
 {
 	int error;
 
-	error = wait_event_killable(server->response_q,
+	error = wait_event_freezekillable(server->response_q,
 				    midq->mid_state != MID_REQUEST_SUBMITTED);
 	if (error < 0)
 		return -ERESTARTSYS;
@@ -311,4 +287,177 @@ free_smb2_mid(struct smb2_mid_entry *mid)
 
 	smb2_mid_entry_free(mid);
 }
+
+static int
+smb2_check_receive(struct smb2_mid_entry *mid, struct TCP_Server_Info *server,
+		   unsigned int receive_len, bool log_error)
+{
+	unsigned int len = get_rfc1002_length(mid->resp_buf);
+
+	dump_smb2(mid->resp_buf, min_t(u32, 80, len));
+	/* convert the length into a more usable form */
+	if ((receive_len > 24) &&
+	    (server->sec_mode & SMB2_NEGOTIATE_SIGNING_REQUIRED)) {
+		/* BB fixme */
+		/*rc = smb2_verify_signature(mid->resp_buf,
+					&ses->server->mac_signing_key);
+		if (rc) {
+			cERROR(1, "Unexpected SMB signature");
+		} */
+	}
+
+	return map_smb2_to_linux_error(mid->resp_buf, log_error);
+}
+
+/*
+ * sendrcv2 is passed a cifs_ses structure (rather than simply being
+ * passed the ses->server->socket), because it needs the creds
+ * contained in the cifs_ses struct in order to sign requests
+ */
+int
+smb2_sendrcv2(const unsigned int xid, struct cifs_ses *ses,
+	     struct kvec *iov, int n_vec, int *presp_buftype /* ret */,
+	     int *status /* ret SMB2 network status code */, const int flags)
+{
+	int rc = 0;
+	int long_op;
+	unsigned int receive_len;
+	struct smb2_mid_entry *midQ;
+	struct smb2_hdr *buf = iov[0].iov_base;
+	unsigned int credits = 1;
+
+	if (status)
+		*status = STATUS_SUCCESS;
+	long_op = flags & CIFS_TIMEOUT_MASK;
+
+	*presp_buftype = CIFS_NO_BUFFER;  /* no response buf yet */
+
+	if ((ses == NULL) || (ses->server == NULL)) {
+		cifs_small_buf_release(buf);
+		cERROR(1, "Null session");
+		return -EIO;
+	}
+
+	if (ses->server->tcpStatus == CifsExiting) {
+		cifs_small_buf_release(buf);
+		cFYI(1, "ololo");
+		return -ENOENT;
+	}
+
+	rc = wait_for_free_request(ses->server, long_op);
+	if (rc) {
+		cifs_small_buf_release(buf);
+		return rc;
+	}
+
+	/*
+	 * Make sure that we sign in the same order that we send on this socket
+	 * and avoid races inside tcp sendmsg code that could cause corruption
+	 * of smb data.
+	 */
+
+	mutex_lock(&ses->server->srv_mutex);
+
+	smb2_seq_num_into_buf(ses->server, iov);
+
+	rc = get_smb2_mid(ses, buf, &midQ);
+	if (rc) {
+		mutex_unlock(&ses->server->srv_mutex);
+		cifs_small_buf_release(buf);
+		atomic_inc(&ses->server->credits);
+		wake_up(&ses->server->request_q);
+		return rc;
+	}
+	/* rc = sign_smb2(iov, n_vec, ses->server); BB
+	if (rc) {
+		mutex_unlock(&ses->server->srv_mutex);
+		cifs_small_buf_release(in_buf);
+		goto out;
+	} */
+
+	midQ->mid_state = MID_REQUEST_SUBMITTED;
+	cifs_in_send_inc(ses->server);
+	rc = smb_sendv(ses->server, iov, n_vec);
+	cifs_in_send_dec(ses->server);
+	cifs_save_when_sent(midQ);
+
+	mutex_unlock(&ses->server->srv_mutex);
+
+	if (rc < 0) {
+		cifs_small_buf_release(buf);
+		goto out;
+	}
+
+	if (long_op == CIFS_ASYNC_OP) {
+		cifs_small_buf_release(buf);
+		goto out;
+	}
+
+	rc = wait_for_smb2_response(ses->server, midQ);
+	if (rc != 0) {
+		/* send_nt_cancel(ses->server, in_buf, midQ); BB */
+		spin_lock(&GlobalMid_Lock);
+		if (midQ->mid_state == MID_REQUEST_SUBMITTED) {
+			midQ->callback = free_smb2_mid;
+			spin_unlock(&GlobalMid_Lock);
+			cifs_small_buf_release(buf);
+			atomic_inc(&ses->server->credits);
+			wake_up(&ses->server->request_q);
+			return rc;
+		}
+		spin_unlock(&GlobalMid_Lock);
+	}
+
+	cifs_small_buf_release(buf);
+
+	rc = sync_smb2_mid_result(midQ, ses->server);
+	if (rc) {
+		atomic_inc(&ses->server->credits);
+		wake_up(&ses->server->request_q);
+		return rc;
+	}
+
+	if (!midQ->resp_buf || (midQ->mid_state != MID_RESPONSE_RECEIVED)) {
+		rc = -EIO;
+		cFYI(1, "Bad MID state?");
+		goto out;
+	}
+
+	buf = (struct smb2_hdr *)midQ->resp_buf;
+	receive_len = be32_to_cpu(buf->smb2_buf_length);
+
+	if (receive_len > CIFSMaxBufSize + MAX_SMB2_HDR_SIZE) {
+		cERROR(1, "Frame too large received.  Length: %d  Xid: %d",
+			receive_len, xid);
+		rc = -EIO;
+		goto out;
+	}
+
+	/* rcvd frame is ok */
+
+	iov[0].iov_base = (char *)buf;
+	iov[0].iov_len = receive_len + 4;
+
+	if (midQ->large_buf)
+		*presp_buftype = CIFS_LARGE_BUFFER;
+	else
+		*presp_buftype = CIFS_SMALL_BUFFER;
+
+	rc = smb2_check_receive(midQ, ses->server, receive_len,
+				flags & CIFS_LOG_ERROR);
+
+	if (status)
+		*status = le32_to_cpu(buf->Status);
+
+	if ((flags & CIFS_NO_RESP) == 0)
+		/* mark it so buf will not be freed by free_smb2mid */
+		midQ->resp_buf = NULL;
+
+	credits = le16_to_cpu(buf->CreditRequest);
+out:
+	atomic_add(credits, &ses->server->credits);
+	free_smb2_mid(midQ);
+	wake_up(&ses->server->request_q);
+	return rc;
+}
 /* BB add missing functions here */
diff --git a/fs/cifs/transport.c b/fs/cifs/transport.c
index 25d04df..ee8a1f8 100644
--- a/fs/cifs/transport.c
+++ b/fs/cifs/transport.c
@@ -120,18 +120,24 @@ delete_mid(struct mid_q_entry *mid)
 	DeleteMidQEntry(mid);
 }
 
-static int
+int
 smb_sendv(struct TCP_Server_Info *server, struct kvec *iov, int n_vec)
 {
 	int rc = 0;
 	int i = 0;
 	struct msghdr smb_msg;
+	__be32 *buf_length = (__be32 *)iov[0].iov_base;
 	struct smb_hdr *smb_buffer = iov[0].iov_base;
+#ifdef CONFIG_CIFS_SMB2
+	struct smb2_hdr *smb2_buffer = iov[0].iov_base;
+#endif
 	unsigned int len = iov[0].iov_len;
 	unsigned int total_len;
 	int first_vec = 0;
-	unsigned int smb_buf_length = be32_to_cpu(smb_buffer->smb_buf_length);
 	struct socket *ssocket = server->ssocket;
+	unsigned int smb_buf_length;
+
+	smb_buf_length = get_rfc1002_length(iov[0].iov_base);
 
 	if (ssocket == NULL)
 		return -ENOTSOCK; /* BB eventually add reconnect code here */
@@ -150,7 +156,12 @@ smb_sendv(struct TCP_Server_Info *server, struct kvec *iov, int n_vec)
 		total_len += iov[i].iov_len;
 
 	cFYI(1, "Sending smb:  total_len %d", total_len);
-	dump_smb(smb_buffer, len);
+#ifdef CONFIG_CIFS_SMB2
+	if (server->is_smb2)
+		dump_smb2(smb2_buffer, len);
+	else
+#endif
+		dump_smb(smb_buffer, len);
 
 	i = 0;
 	while (total_len) {
@@ -158,24 +169,25 @@ smb_sendv(struct TCP_Server_Info *server, struct kvec *iov, int n_vec)
 				    n_vec - first_vec, total_len);
 		if ((rc == -ENOSPC) || (rc == -EAGAIN)) {
 			i++;
-			/* if blocking send we try 3 times, since each can block
-			   for 5 seconds. For nonblocking  we have to try more
-			   but wait increasing amounts of time allowing time for
-			   socket to clear.  The overall time we wait in either
-			   case to send on the socket is about 15 seconds.
-			   Similarly we wait for 15 seconds for
-			   a response from the server in SendReceive[2]
-			   for the server to send a response back for
-			   most types of requests (except SMB Write
-			   past end of file which can be slow, and
-			   blocking lock operations). NFS waits slightly longer
-			   than CIFS, but this can make it take longer for
-			   nonresponsive servers to be detected and 15 seconds
-			   is more than enough time for modern networks to
-			   send a packet.  In most cases if we fail to send
-			   after the retries we will kill the socket and
-			   reconnect which may clear the network problem.
-			*/
+			/*
+			 * If blocking send we try 3 times, since each can block
+			 * for 5 seconds. For nonblocking  we have to try more
+			 * but wait increasing amounts of time allowing time for
+			 * socket to clear.  The overall time we wait in either
+			 * case to send on the socket is about 15 seconds.
+			 * Similarly we wait for 15 seconds for
+			 * a response from the server in SendReceive[2]
+			 * for the server to send a response back for
+			 * most types of requests (except SMB Write
+			 * past end of file which can be slow, and
+			 * blocking lock operations). NFS waits slightly longer
+			 * than CIFS, but this can make it take longer for
+			 * nonresponsive servers to be detected and 15 seconds
+			 * is more than enough time for modern networks to
+			 * send a packet.  In most cases if we fail to send
+			 * after the retries we will kill the socket and
+			 * reconnect which may clear the network problem.
+			 */
 			if ((i >= 14) || (!server->noblocksnd && (i > 2))) {
 				cERROR(1, "sends on sock %p stuck for 15 seconds",
 				    ssocket);
@@ -196,8 +208,10 @@ smb_sendv(struct TCP_Server_Info *server, struct kvec *iov, int n_vec)
 			break;
 		}
 		if (rc == 0) {
-			/* should never happen, letting socket clear before
-			   retrying is our only obvious option here */
+			/*
+			 * Should never happen, letting socket clear before
+			 * retrying is our only obvious option here.
+			 */
 			cERROR(1, "tcp sent no data");
 			msleep(500);
 			continue;
@@ -223,10 +237,12 @@ smb_sendv(struct TCP_Server_Info *server, struct kvec *iov, int n_vec)
 	if ((total_len > 0) && (total_len != smb_buf_length + 4)) {
 		cFYI(1, "partial send (%d remaining), terminating session",
 			total_len);
-		/* If we have only sent part of an SMB then the next SMB
-		   could be taken as the remainder of this one.  We need
-		   to kill the socket so the server throws away the partial
-		   SMB */
+		/*
+		 * If we have only sent part of an SMB then the next SMB
+		 * could be taken as the remainder of this one.  We need
+		 * to kill the socket so the server throws away the partial
+		 * SMB.
+		 */
 		server->tcpStatus = CifsNeedReconnect;
 	}
 
@@ -235,9 +251,8 @@ smb_sendv(struct TCP_Server_Info *server, struct kvec *iov, int n_vec)
 	else
 		rc = 0;
 
-	/* Don't want to modify the buffer as a
-	   side effect of this call. */
-	smb_buffer->smb_buf_length = cpu_to_be32(smb_buf_length);
+	/* Don't want to modify the buffer as a side effect of this call. */
+	*buf_length = cpu_to_be32(smb_buf_length);
 
 	return rc;
 }
-- 
1.7.1

  parent reply	other threads:[~2011-10-28 19:54 UTC|newest]

Thread overview: 75+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-10-28 19:54 [PATCH v2 00/53] SMB2 protocol support for CIFS kernel module Pavel Shilovsky
2011-10-28 19:54 ` [PATCH v2 02/53] CIFS: Allow SMB2 statistics to be tracked Pavel Shilovsky
2011-10-29  4:48   ` Jeff Layton
2011-10-29  5:12     ` Steve French
     [not found]       ` <CAH2r5mtpckA75LEAynsPLVsPfr7U0wnYAyZ1uKeK2VU9F1CGeQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-10-29  5:32         ` Jeff Layton
     [not found]     ` <20111029004814.41340503-4QP7MXygkU+dMjc06nkz3ljfA9RmPOcC@public.gmane.org>
2011-10-29 19:44       ` Pavel Shilovsky
     [not found]         ` <CAKywueQwBwR-HZtv6gQv32kt4+2qycS7vq5KDLiE3xw3_9=wPA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-10-30  2:12           ` Jeff Layton
     [not found]             ` <20111029221251.5fba1444-4QP7MXygkU+dMjc06nkz3ljfA9RmPOcC@public.gmane.org>
2011-10-30  2:52               ` Steve French
2011-10-28 19:54 ` [PATCH v2 03/53] CIFS: Check for smb2 vs. cifs in find_tcp_session Pavel Shilovsky
     [not found]   ` <1319831704-3572-4-git-send-email-piastry-7qunaywFIewox3rIn2DAYQ@public.gmane.org>
2011-10-29  4:40     ` Jeff Layton
     [not found]       ` <20111029004046.2bf8e111-4QP7MXygkU+dMjc06nkz3ljfA9RmPOcC@public.gmane.org>
2011-10-29 19:55         ` Pavel Shilovsky
2011-10-28 19:54 ` [PATCH v2 05/53] CIFS: wait_for_free_request needs to wait on credits returned by server (for SMB2) Pavel Shilovsky
     [not found]   ` <1319831704-3572-6-git-send-email-piastry-7qunaywFIewox3rIn2DAYQ@public.gmane.org>
2011-10-29 15:35     ` Jeff Layton
2011-10-29 20:00       ` Pavel Shilovsky
     [not found]         ` <CAKywueSGDSw33L4_a7W6D7gM_PH9uy3xTQ6=8zgAimGhz5=UfA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-10-30  2:41           ` Jeff Layton
2011-10-28 19:54 ` [PATCH v2 07/53] CIFS: Add structure definitions for SMB2 PDUs Pavel Shilovsky
2011-10-28 19:54 ` [PATCH v2 09/53] CIFS: Allocating SMB2 mids (multiplex identifier structures) Pavel Shilovsky
     [not found] ` <1319831704-3572-1-git-send-email-piastry-7qunaywFIewox3rIn2DAYQ@public.gmane.org>
2011-10-28 19:54   ` [PATCH v2 01/53] CIFS: Update cifs global structures to handle smb2 sessions Pavel Shilovsky
     [not found]     ` <1319831704-3572-2-git-send-email-piastry-7qunaywFIewox3rIn2DAYQ@public.gmane.org>
2011-10-29  4:54       ` Jeff Layton
2011-10-28 19:54   ` [PATCH v2 04/53] CIFS: Do not try to dump cifs mids from " Pavel Shilovsky
     [not found]     ` <1319831704-3572-5-git-send-email-piastry-7qunaywFIewox3rIn2DAYQ@public.gmane.org>
2011-10-29  5:05       ` Jeff Layton
2011-10-28 19:54   ` [PATCH v2 06/53] CIFS: Add missing unicode handling routines needed by smb2 Pavel Shilovsky
     [not found]     ` <1319831704-3572-7-git-send-email-piastry-7qunaywFIewox3rIn2DAYQ@public.gmane.org>
2011-11-01 10:12       ` Jeff Layton
2011-11-01 13:52       ` Shirish Pargaonkar
2011-12-29 15:01         ` Pavel Shilovsky
2011-12-30 12:42           ` Jeff Layton
2012-01-12 10:47             ` Pavel Shilovsky
2012-01-12 17:22       ` Shirish Pargaonkar
     [not found]         ` <CADT32eJ7FMkQZiy4LjeEG3axvt99N7jFEod7-u2js1MnhVkc7Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-01-12 18:42           ` Jeff Layton
2012-01-12 19:58             ` Shirish Pargaonkar
     [not found]               ` <CADT32eKc=Xq5G1cE+pye6h1dN6sjry+b7V0ze7CTMJXC8JCtwA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-01-12 20:48                 ` Jeff Layton
2012-01-12 20:41       ` Shirish Pargaonkar
2011-10-28 19:54   ` [PATCH v2 10/53] CIFS: Add routines to free SMB2 mids Pavel Shilovsky
2011-10-28 19:54   ` [PATCH v2 11/53] CIFS: Add sync_smb2_mid_result Pavel Shilovsky
2011-10-28 19:54   ` Pavel Shilovsky [this message]
2011-10-28 19:54   ` [PATCH v2 14/53] CIFS: Expand cifs mid structure to keep SMB2 related fields Pavel Shilovsky
2011-10-28 19:54   ` [PATCH v2 17/53] CIFS: Simplify SMB2 query info Pavel Shilovsky
2011-10-28 19:54   ` [PATCH v2 20/53] CIFS: Add SMB2 support for rmdir operation Pavel Shilovsky
2011-10-28 19:54   ` [PATCH v2 21/53] CIFS: Add SMB2 support for unlink operation Pavel Shilovsky
2011-10-28 19:54   ` [PATCH v2 24/53] CIFS: Add SMB2 support for cifs_iovec_write Pavel Shilovsky
2011-10-28 19:54   ` [PATCH v2 27/53] CIFS: Add read related address space operations for SMB2 Pavel Shilovsky
2011-10-28 19:54   ` [PATCH v2 29/53] CIFS: Respect max buf size for SMB2 read and write Pavel Shilovsky
2011-10-28 19:54   ` [PATCH v2 34/53] [CIFS] Add SMB2 support for cifs_get_file_info Pavel Shilovsky
2011-10-28 19:54   ` [PATCH v2 35/53] CIFS: Add SMB2 support for create operation Pavel Shilovsky
2011-10-28 19:54   ` [PATCH v2 36/53] CIFS: Add readdir support for SMB2 Pavel Shilovsky
2011-10-28 19:54   ` [PATCH v2 37/53] CIFS: Add SMB2 support for rename operation Pavel Shilovsky
2011-10-28 19:54   ` [PATCH v2 38/53] CIFS: Add SMB2 support for hardlink operation Pavel Shilovsky
2011-10-28 19:54   ` [PATCH v2 40/53] CIFS: Add NTLMSSP sec type to defaults Pavel Shilovsky
2011-10-28 19:54   ` [PATCH v2 41/53] CIFS: Disable SMB2.1 protocol negotiating Pavel Shilovsky
2011-10-28 19:54   ` [PATCH v2 43/53] CIFS: Process STATUS_PENDING responses for SMB2 Pavel Shilovsky
2011-10-28 19:54   ` [PATCH v2 44/53] CIFS: Request SMB2.1 leases Pavel Shilovsky
2011-10-28 19:54   ` [PATCH v2 45/53] CIFS: Process oplock/lease break for SMB2/2.1 Pavel Shilovsky
2011-10-28 19:54   ` [PATCH v2 47/53] CIFS: Enable signing in SMB2 Pavel Shilovsky
2011-10-28 19:54   ` [PATCH v2 48/53] CIFS: Process signing for SMB2_logoff Pavel Shilovsky
2011-10-28 19:55   ` [PATCH v2 49/53] CIFS: Introduce SMB2 Kconfig option Pavel Shilovsky
2011-10-28 19:55   ` [PATCH v2 50/53] CIFS: Introduce smb2 mounts as vers=2 Pavel Shilovsky
2011-10-28 19:55   ` [PATCH v2 53/53] CIFS: Disable lock call for SMB2 since we don't support it Pavel Shilovsky
2011-10-28 19:54 ` [PATCH v2 15/53] CIFS: Make demultiplex_thread work with SMB2 code Pavel Shilovsky
2011-10-28 19:54 ` [PATCH v2 16/53] CIFS: Get mount/umount work with SMB2 protocol Pavel Shilovsky
2011-10-28 19:54 ` [PATCH v2 18/53] CIFS: Add SMB2 inode/dentry ops structures Pavel Shilovsky
2011-10-28 19:54 ` [PATCH v2 19/53] CIFS: Add SMB2 support for mkdir operation Pavel Shilovsky
2011-10-28 19:54 ` [PATCH v2 22/53] CIFS: Add SMB2 support for open/close file operations Pavel Shilovsky
2011-10-28 19:54 ` [PATCH v2 23/53] CIFS: Add SMB2 support for reopen file operation Pavel Shilovsky
2011-10-28 19:54 ` [PATCH v2 25/53] CIFS: Add SMB2 support for cifs_iovec_read Pavel Shilovsky
2011-10-28 19:54 ` [PATCH v2 26/53] CIFS: Add address space ops structures for SMB2 Pavel Shilovsky
2011-10-28 19:54 ` [PATCH v2 28/53] CIFS: Add write related address space operations " Pavel Shilovsky
2011-10-28 19:54 ` [PATCH v2 30/53] CIFS: Temporarily disable set inode info " Pavel Shilovsky
2011-10-28 19:54 ` [PATCH v2 31/53] CIFS: Add writepages support " Pavel Shilovsky
2011-10-28 19:54 ` [PATCH v2 32/53] CIFS: Add readpages " Pavel Shilovsky
2011-10-28 19:54 ` [PATCH v2 33/53] CIFS: Add echo request " Pavel Shilovsky
2011-10-28 19:54 ` [PATCH v2 39/53] CIFS: Add SMB2 support for flush operation Pavel Shilovsky
2011-10-28 19:54 ` [PATCH v2 42/53] CIFS: Process oplocks for SMB2 Pavel Shilovsky
2011-10-28 19:54 ` [PATCH v2 46/53] CIFS: Add strictcache i/o " Pavel Shilovsky
2011-10-28 19:55 ` [PATCH v2 51/53] CIFS: Change Makefile to support CONFIG_CIFS_SMB2 Pavel Shilovsky
2011-10-28 19:55 ` [PATCH v2 52/53] CIFS: Add statfs support for SMB2 Pavel Shilovsky

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1319831704-3572-14-git-send-email-piastry@etersoft.ru \
    --to=piastry-7qunaywfiewox3rin2dayq@public.gmane.org \
    --cc=linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-fsdevel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).