Re: [PATCH 05/11] CIFS: Make wait_for_free_request interruptible

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Jeff's point makes sense.  With the suggested fix, seems like reasonable idea.

On Thu, Feb 23, 2012 at 12:18 AM, Pavel Shilovsky <piastry@xxxxxxxxxxx> wrote:
> 2012/2/22 Jeff Layton <jlayton@xxxxxxxxx>:
>> On Wed, 22 Feb 2012 10:32:58 +0300
>> Pavel Shilovsky <piastry@xxxxxxxxxxx> wrote:
>>
>>> to let us interrupt the proccess if the session went down and echo
>>> is disabled.
>>>
>>> Signed-off-by: Pavel Shilovsky <piastry@xxxxxxxxxxx>
>>> ---
>>>  fs/cifs/transport.c |    7 ++++++-
>>>  1 files changed, 6 insertions(+), 1 deletions(-)
>>>
>>> diff --git a/fs/cifs/transport.c b/fs/cifs/transport.c
>>> index fa93720..938d20b 100644
>>> --- a/fs/cifs/transport.c
>>> +++ b/fs/cifs/transport.c
>>> @@ -257,6 +257,8 @@ smb_send(struct TCP_Server_Info *server, struct smb_hdr *smb_buffer,
>>>  static int
>>>  wait_for_free_request(struct TCP_Server_Info *server, const int long_op)
>>>  {
>>> +     int rc;
>>> +
>>>       spin_lock(&server->req_lock);
>>>
>>>       if (long_op == CIFS_ASYNC_OP) {
>>> @@ -271,8 +273,11 @@ wait_for_free_request(struct TCP_Server_Info *server, const int long_op)
>>>               if (server->credits <= 0) {
>>>                       spin_unlock(&server->req_lock);
>>>                       cifs_num_waiters_inc(server);
>>> -                     wait_event(server->request_q, get_credits(server) > 0);
>>> +                     rc = wait_event_interruptible(server->request_q,
>>> +                                                   get_credits(server) > 0);
>>>                       cifs_num_waiters_dec(server);
>>> +                     if (rc)
>>> +                             return rc;
>>>                       spin_lock(&server->req_lock);
>>>               } else {
>>>                       if (server->tcpStatus == CifsExiting) {
>>
>> In general, I think making this interruptible is a good idea. The
>> problem here though is that you're going to end up interrupting this on
>> any signal. That includes stuff like SIGCHLD -- you don't necessarily
>> want to interrupt this because the process forked off a child earlier
>> and then that child exited...
>>
>> It's probably simpler to just make this a TASK_KILLABLE sleep for that
>> reason, rather than trying to handle different signals differently.
>>
>
> Ok, good points - will change it.
>
> --
> Best regards,
> Pavel Shilovsky.
> --
> To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html



-- 
Thanks,

Steve
--
To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux