diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 22421bb5cf8b6c4ec19dc8c52f195ec17ee6e3fd..ceb82ef113ce903b67f1c3f284f62dad26076b66 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -2541,10 +2541,12 @@ filter({expr}, {string})					*filter()*
 
 
 finddir({name}[, {path}[, {count}]])				*finddir()*
-		Find directory {name} in {path}.  Returns the path of the
-		first found match.  When the found directory is below the
-		current directory a relative path is returned.  Otherwise a
-		full path is returned.
+		Find directory {name} in {path}.  Supports both downwards and
+		upwards recursive directory searches.  See |file-searching|
+		for the syntax of {path}.
+		Returns the path of the first found match.  When the found
+		directory is below the current directory a relative path is
+		returned.  Otherwise a full path is returned.
 		If {path} is omitted or empty then 'path' is used.
 		If the optional {count} is given, find {count}'s occurrence of
 		{name} in {path} instead of the first one.
diff --git a/src/eval.c b/src/eval.c
index 93d039467d8fc4528bad048ba73703260be6a3a1..ea8361524cd6f4713fcd10e9b8dc4ff7f75d4269 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -9195,7 +9195,7 @@ findfilendir(argvars, rettv, dir)
 		vim_free(fresult);
 	    fresult = find_file_in_path_option(first ? fname : NULL,
 					       first ? (int)STRLEN(fname) : 0,
-					0, first, path, dir, NULL,
+					0, first, path, dir, curbuf->b_ffname,
 					dir ? (char_u *)"" : curbuf->b_p_sua);
 	    first = FALSE;
 
diff --git a/src/version.c b/src/version.c
index e223c49e8a62a3d6de9aef7ade83881e3c9ae009..dd8741dbd091afc5802471cd188afa5a8631fbed 100644
--- a/src/version.c
+++ b/src/version.c
@@ -666,6 +666,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    221,
 /**/
     220,
 /**/