Re: [PATCH] cifs: Do not send echoes before Negotiate is complete

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

 



2017-04-16 21:27 GMT-07:00 Steve French <smfrench@xxxxxxxxx>:
> I fixed the checkpatch error (missing tab in Sachin's patch) and merged into
> cifs-2.6.git
>
> thx
>
> On Sun, Apr 16, 2017 at 5:59 PM, Jonathan Liu <net147@xxxxxxxxx> wrote:
>>
>> Hi Sachin,
>>
>> On 17 April 2017 at 05:37, Sachin Prabhu <sprabhu@xxxxxxxxxx> wrote:
>> > commit 4fcd1813e640 ("Fix reconnect to not defer smb3 session reconnect
>> > long after socket reconnect") added support for Negotiate requests to
>> > be initiated by echo calls.
>> >
>> > To avoid delays in calling echo after a reconnect, I added the patch
>> > introduced by the commit b8c600120fc8 ("Call echo service immediately
>> > after socket reconnect").
>> >
>> > This has however caused a regression with cifs shares which do not have
>> > support for echo calls to trigger Negotiate requests. On connections
>> > which need to call Negotiation, the echo calls trigger an error which
>> > triggers a reconnect which in turn triggers another echo call. This
>> > results in a loop which is only broken when an operation is performed on
>> > the cifs share. For an idle share, it can DOS a server.
>> >
>> > The patch uses the smb_operation can_echo() for cifs so that it is
>> > called only if connection has been already been setup.
>> >
>> > kernel bz: 194531
>> >
>> > Signed-off-by: Sachin Prabhu <sprabhu@xxxxxxxxxx>
>> > ---
>> >  fs/cifs/smb1ops.c | 10 ++++++++++
>> >  1 file changed, 10 insertions(+)
>> >
>> > diff --git a/fs/cifs/smb1ops.c b/fs/cifs/smb1ops.c
>> > index cc93ba4..60a1979 100644
>> > --- a/fs/cifs/smb1ops.c
>> > +++ b/fs/cifs/smb1ops.c
>> > @@ -1015,6 +1015,15 @@ cifs_dir_needs_close(struct cifsFileInfo *cfile)
>> >         return !cfile->srch_inf.endOfSearch && !cfile->invalidHandle;
>> >  }
>> >
>> > +static bool
>> > +cifs_can_echo(struct TCP_Server_Info *server)
>> > +{
>> > +       if (server->tcpStatus == CifsGood)
>> > +               return true;
>> > +
>> > +       return false;
>> > +}
>> > +
>> >  struct smb_version_operations smb1_operations = {
>> >         .send_cancel = send_nt_cancel,
>> >         .compare_fids = cifs_compare_fids,
>> > @@ -1049,6 +1058,7 @@ struct smb_version_operations smb1_operations = {
>> >         .get_dfs_refer = CIFSGetDFSRefer,
>> >         .qfs_tcon = cifs_qfs_tcon,
>> >         .is_path_accessible = cifs_is_path_accessible,
>> > +       .can_echo = cifs_can_echo,
>> >         .query_path_info = cifs_query_path_info,
>> >         .query_file_info = cifs_query_file_info,
>> >         .get_srv_inum = cifs_get_srv_inum,
>> > --
>> > 2.9.3
>> >
>>
>> This fixes the issue for me.
>>
>> Tested-by: Jonathan Liu <net147@xxxxxxxxx>
>> --
>> 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


I think this patch should go to stable as well.

--
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



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

  Powered by Linux