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
next prev 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).