patch 8.2.3509: undo file is not synced

Problem:    Undo file is not synced. (Sami Farin)
Solution:   Sync the undo file if 'fsync' is set. (Christian Brabandt,
            closes #8879, closes #8920)
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index 6bf0a58..91df5df 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -3610,8 +3610,8 @@
 	systems without an fsync() implementation, this variable is always
 	off.
 	Also see 'swapsync' for controlling fsync() on swap files.
-	'fsync' also applies to |writefile()|, unless a flag is used to
-	overrule it.
+	'fsync' also applies to |writefile()| (unless a flag is used to
+	overrule it) and when writing undo files (see |undo-persistence|).
 	This option cannot be set from a |modeline| or in the |sandbox|, for
 	security reasons.
 
diff --git a/src/undo.c b/src/undo.c
index 8141301..033fa6e 100644
--- a/src/undo.c
+++ b/src/undo.c
@@ -1786,6 +1786,11 @@
 	write_ok = FALSE;
 #endif
 
+#if defined(UNIX) && defined(HAVE_FSYNC)
+    if (p_fs && fflush(fp) == 0 && vim_fsync(fd) != 0)
+	write_ok = FALSE;
+#endif
+
 write_error:
     fclose(fp);
     if (!write_ok)
diff --git a/src/version.c b/src/version.c
index 2125972..31f0015 100644
--- a/src/version.c
+++ b/src/version.c
@@ -758,6 +758,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    3509,
+/**/
     3508,
 /**/
     3507,