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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox