From: Suresh Jayaraman <sjayaraman-l3A5Bk7waGM@public.gmane.org>
To: Jeff Layton <jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Cc: smfrench-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH 10/18] cifs: allow for different handling of received response
Date: Tue, 21 Dec 2010 21:20:43 +0530 [thread overview]
Message-ID: <4D10CCD3.1040502@suse.de> (raw)
In-Reply-To: <1292598497-29796-11-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
On 12/17/2010 08:38 PM, Jeff Layton wrote:
> In order to incorporate async requests, we need to allow for a more
> general way to do things on receive, rather than just waking up a
> process.
>
> Turn the task pointer in the mid_q_entry into a callback function and a
> generic data pointer. When a response comes in, or the socket is
> reconnected, cifsd can call the callback function in order to wake up
> the process.
>
> The default is to just wake up the current process which should mean no
> change in behavior for existing code.
>
> Also, clean up the locking in cifs_reconnect. There doesn't seem to be
> any need to hold both the srv_mutex and GlobalMid_Lock when walking the
> list of mids.
>
> Signed-off-by: Jeff Layton <jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
> ---
> fs/cifs/cifs_debug.c | 8 +++---
> fs/cifs/cifsglob.h | 15 ++++++++++++-
> fs/cifs/connect.c | 56 +++++++++++++++++++++++++-------------------------
> fs/cifs/transport.c | 19 +++++++++++++++-
> 4 files changed, 63 insertions(+), 35 deletions(-)
>
> diff --git a/fs/cifs/cifs_debug.c b/fs/cifs/cifs_debug.c
> index ac7a38f..30d01bc 100644
> --- a/fs/cifs/cifs_debug.c
> +++ b/fs/cifs/cifs_debug.c
> @@ -79,11 +79,11 @@ void cifs_dump_mids(struct TCP_Server_Info *server)
> spin_lock(&GlobalMid_Lock);
> list_for_each(tmp, &server->pending_mid_q) {
> mid_entry = list_entry(tmp, struct mid_q_entry, qhead);
> - cERROR(1, "State: %d Cmd: %d Pid: %d Tsk: %p Mid %d",
> + cERROR(1, "State: %d Cmd: %d Pid: %d Cbdata: %p Mid %d",
> mid_entry->midState,
> (int)mid_entry->command,
> mid_entry->pid,
> - mid_entry->tsk,
> + mid_entry->callback_data,
> mid_entry->mid);
> #ifdef CONFIG_CIFS_STATS2
> cERROR(1, "IsLarge: %d buf: %p time rcv: %ld now: %ld",
> @@ -218,11 +218,11 @@ static int cifs_debug_data_proc_show(struct seq_file *m, void *v)
> mid_entry = list_entry(tmp3, struct mid_q_entry,
> qhead);
> seq_printf(m, "\tState: %d com: %d pid:"
> - " %d tsk: %p mid %d\n",
> + " %d cbdata: %p mid %d\n",
> mid_entry->midState,
> (int)mid_entry->command,
> mid_entry->pid,
> - mid_entry->tsk,
> + mid_entry->callback_data,
> mid_entry->mid);
> }
> spin_unlock(&GlobalMid_Lock);
> diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
> index 8c3c165..db90fe0 100644
> --- a/fs/cifs/cifsglob.h
> +++ b/fs/cifs/cifsglob.h
> @@ -508,6 +508,18 @@ static inline void cifs_stats_bytes_read(struct cifsTconInfo *tcon,
>
> #endif
>
> +struct mid_q_entry;
> +
> +/*
> + * This is the prototype for the mid callback function. When creating one,
> + * take special care to avoid deadlocks. Things to bear in mind:
> + *
> + * - it will be called by cifsd
> + * - the GlobalMid_Lock will be held
> + * - the mid will be removed from the pending_mid_q list
> + */
> +typedef void (mid_callback_t)(struct mid_q_entry *mid);
> +
> /* one of these for every pending CIFS request to the server */
> struct mid_q_entry {
> struct list_head qhead; /* mids waiting on reply from this server */
> @@ -519,7 +531,8 @@ struct mid_q_entry {
> unsigned long when_sent; /* time when smb send finished */
> unsigned long when_received; /* when demux complete (taken off wire) */
> #endif
> - struct task_struct *tsk; /* task waiting for response */
> + mid_callback_t *callback; /* call completion callback */
> + void *callback_data; /* general purpose pointer for callback */
> struct smb_hdr *resp_buf; /* response buffer */
> int midState; /* wish this were enum but can not pass to wait_event */
> __u8 command; /* smb command code */
> diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
> index 515cafa..734fb09 100644
> --- a/fs/cifs/connect.c
> +++ b/fs/cifs/connect.c
> @@ -152,6 +152,7 @@ cifs_reconnect(struct TCP_Server_Info *server)
>
> /* before reconnecting the tcp session, mark the smb session (uid)
> and the tid bad so they are not used until reconnected */
> + cFYI(1, "%s: marking sessions and tcons for reconnect", __func__);
> spin_lock(&cifs_tcp_ses_lock);
> list_for_each(tmp, &server->smb_ses_list) {
> ses = list_entry(tmp, struct cifsSesInfo, smb_ses_list);
> @@ -163,7 +164,9 @@ cifs_reconnect(struct TCP_Server_Info *server)
> }
> }
> spin_unlock(&cifs_tcp_ses_lock);
> +
> /* do not want to be sending data on a socket we are freeing */
> + cFYI(1, "%s: tearing down socket", __func__);
> mutex_lock(&server->srv_mutex);
> if (server->ssocket) {
> cFYI(1, "State: 0x%x Flags: 0x%lx", server->ssocket->state,
> @@ -180,22 +183,22 @@ cifs_reconnect(struct TCP_Server_Info *server)
> kfree(server->session_key.response);
> server->session_key.response = NULL;
> server->session_key.len = 0;
> + mutex_unlock(&server->srv_mutex);
>
> + /*
> + * move in-progress mids to a private list so that we can walk it later
> + * without needing a lock. We'll mark them for retry after reconnect.
> + */
> + cFYI(1, "%s: issuing mid callbacks", __func__);
Is the above comment valid? This patchset doesn't use a separate list IIUC?
--
Suresh Jayaraman
next prev parent reply other threads:[~2010-12-21 15:50 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-12-17 15:07 [PATCH 00/18] cifs: overhaul request timeout behavior in CIFS (try #3) Jeff Layton
[not found] ` <1292598497-29796-1-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-12-17 15:08 ` [PATCH 01/18] cifs: don't fail writepages on -EAGAIN errors Jeff Layton
[not found] ` <1292598497-29796-2-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-12-20 10:53 ` Suresh Jayaraman
2010-12-17 15:08 ` [PATCH 02/18] cifs: no need to mark smb_ses_list as cifs_demultiplex_thread is exiting Jeff Layton
[not found] ` <1292598497-29796-3-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-12-20 10:52 ` Suresh Jayaraman
2010-12-20 16:38 ` Suresh Jayaraman
[not found] ` <4D0F868E.8020407-l3A5Bk7waGM@public.gmane.org>
2010-12-21 1:38 ` Jeff Layton
2010-12-17 15:08 ` [PATCH 03/18] cifs: make wait_for_free_request take a TCP_Server_Info pointer Jeff Layton
[not found] ` <1292598497-29796-4-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-12-20 10:52 ` Suresh Jayaraman
2010-12-17 15:08 ` [PATCH 04/18] cifs: clean up accesses to midCount Jeff Layton
[not found] ` <1292598497-29796-5-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-12-20 10:52 ` Suresh Jayaraman
2010-12-17 15:08 ` [PATCH 05/18] cifs: move locked sections out of DeleteMidQEntry and AllocMidQEntry Jeff Layton
[not found] ` <1292598497-29796-6-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-12-20 11:00 ` Suresh Jayaraman
2010-12-17 15:08 ` [PATCH 06/18] cifs: move mid result processing into common function Jeff Layton
[not found] ` <1292598497-29796-7-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-12-20 11:06 ` Suresh Jayaraman
2010-12-17 15:08 ` [PATCH 07/18] cifs: wait indefinitely for responses Jeff Layton
[not found] ` <1292598497-29796-8-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-12-21 15:50 ` Suresh Jayaraman
2010-12-17 15:08 ` [PATCH 08/18] cifs: don't reconnect server when we don't get a response Jeff Layton
[not found] ` <1292598497-29796-9-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-12-20 11:27 ` Suresh Jayaraman
2010-12-17 15:08 ` [PATCH 09/18] cifs: clean up sync_mid_result Jeff Layton
[not found] ` <1292598497-29796-10-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-12-20 11:27 ` Suresh Jayaraman
[not found] ` <4D0F3DAD.7080801-l3A5Bk7waGM@public.gmane.org>
2010-12-20 13:04 ` Jeff Layton
[not found] ` <20101220080409.35112ed8-4QP7MXygkU+dMjc06nkz3ljfA9RmPOcC@public.gmane.org>
2010-12-20 16:35 ` Suresh Jayaraman
2010-12-17 15:08 ` [PATCH 10/18] cifs: allow for different handling of received response Jeff Layton
[not found] ` <1292598497-29796-11-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-12-21 15:50 ` Suresh Jayaraman [this message]
[not found] ` <4D10CCD3.1040502-l3A5Bk7waGM@public.gmane.org>
2010-12-21 16:48 ` Jeff Layton
2010-12-21 15:51 ` Suresh Jayaraman
2010-12-17 15:08 ` [PATCH 11/18] cifs: handle cancelled requests better Jeff Layton
2010-12-17 15:08 ` [PATCH 12/18] cifs: add cifs_call_async Jeff Layton
[not found] ` <1292598497-29796-13-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-12-21 16:05 ` Suresh Jayaraman
2010-12-17 15:08 ` [PATCH 13/18] cifs: add ability to send an echo request Jeff Layton
[not found] ` <1292598497-29796-14-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-12-21 16:05 ` Suresh Jayaraman
2010-12-17 15:08 ` [PATCH 14/18] cifs: set up recurring workqueue job to do SMB echo requests Jeff Layton
[not found] ` <1292598497-29796-15-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-12-21 16:06 ` Suresh Jayaraman
2010-12-17 15:08 ` [PATCH 15/18] cifs: reconnect unresponsive servers Jeff Layton
[not found] ` <1292598497-29796-16-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-12-23 10:31 ` Suresh Jayaraman
[not found] ` <4D1324EC.8010305-l3A5Bk7waGM@public.gmane.org>
2010-12-23 13:20 ` Jeff Layton
[not found] ` <20101223082005.347b8ca8-xSBYVWDuneFaJnirhKH9O4GKTjYczspe@public.gmane.org>
2010-12-23 15:36 ` Suresh Jayaraman
2010-12-17 15:08 ` [PATCH 16/18] cifs: remove code for setting timeouts on requests Jeff Layton
[not found] ` <1292598497-29796-17-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-12-23 10:32 ` Suresh Jayaraman
2010-12-17 15:08 ` [PATCH 17/18] cifs: mangle existing header for SMB_COM_NT_CANCEL Jeff Layton
[not found] ` <1292598497-29796-18-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-12-23 11:05 ` Suresh Jayaraman
2010-12-17 15:08 ` [PATCH 18/18] cifs: send an NT_CANCEL request when a process is signalled Jeff Layton
[not found] ` <1292598497-29796-19-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-12-23 11:06 ` Suresh Jayaraman
-- strict thread matches above, loose matches on Subject: below --
2010-12-27 2:29 [PATCH 00/18] cifs: overhaul request timeout behavior in CIFS (try #4) Jeff Layton
[not found] ` <1293417006-6417-1-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-12-27 2:29 ` [PATCH 10/18] cifs: allow for different handling of received response Jeff Layton
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=4D10CCD3.1040502@suse.de \
--to=sjayaraman-l3a5bk7wagm@public.gmane.org \
--cc=jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=smfrench-Re5JQEeQqe8AvxtiuMwx3w@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.