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