On Fri, 1 Apr 2011 13:53:02 +0200 Sean Finney <seanius@xxxxxxxxxxx> wrote: > Windows 2008 CIFS servers do not always return PATH_NOT_COVERED when > attempting to access a DFS share. Therefore, when checking for remote > shares, unconditionally ask for a DFS referral for the UNC (w/out prepath) > before continuing with previous behavior of attempting to access the UNC + > prepath and checking for PATH_NOT_COVERED. > > Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=31092 > --- > fs/cifs/connect.c | 18 ++++++++++++++++++ > 1 files changed, 18 insertions(+), 0 deletions(-) > > diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c > index 7a9b2da..9425c7b 100644 > --- a/fs/cifs/connect.c > +++ b/fs/cifs/connect.c > @@ -2934,6 +2934,24 @@ try_mount_again: > (tcon->ses->server->maxBuf - MAX_CIFS_HDR_SIZE)); > > remote_path_check: > +#ifdef CONFIG_CIFS_DFS_UPCALL > + /* > + * Perform an unconditional check for whether there are DFS > + * referrals for this path without prefix, to provide support > + * for DFS referrals from w2k8 servers which don't seem to respond > + * with PATH_NOT_COVERED to requests that include the prefix. > + * Chase the referral if found, otherwise continue normally. > + */ > + if (referral_walks_count == 0) { > + int refrc = expand_dfs_referral(xid, pSesInfo, volume_info, > + cifs_sb, &mount_data, false); > + if (!refrc) { > + referral_walks_count++; > + goto try_mount_again; > + } > + } > +#endif > + > /* check if a whole path (including prepath) is not remote */ > if (!rc && tcon) { > /* build_path_to_root works only when we have a valid tcon */ Thanks for respinning the set, this looks much easier to review. One thing I notice right offhand is that the new code doesn't check to see whether referral_walks_count > MAX_NESTED_LINKS (like the original call site does). That means the client can loop here indefinitely if there is a referral loop. I think we need that check in there. -- Jeff Layton <jlayton@xxxxxxxxxx> -- 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