[1mdiff --git a/src/backend/storage/file/copydir.c b/src/backend/storage/file/copydir.c[m
[1mindex ca1c9cd765..e44bebf947 100644[m
[1m--- a/src/backend/storage/file/copydir.c[m
[1m+++ b/src/backend/storage/file/copydir.c[m
[36m@@ -27,6 +27,9 @@[m
 #include "miscadmin.h"[m
 #include "pgstat.h"[m
 [m
[32m+[m[32m/* Hook for plugins to get control in copydir() */[m
[32m+[m[32mcopydir_hook_type copydir_hook = NULL;[m
[32m+[m
 /*[m
  * copydir: copy a directory[m
  *[m
[36m@@ -36,6 +39,22 @@[m
 void[m
 copydir(char *fromdir, char *todir, bool recurse)[m
 {[m
[32m+[m	[32mif (copydir_hook)[m
[32m+[m		[32m(*copydir_hook) (fromdir, todir, recurse);[m
[32m+[m	[32melse[m
[32m+[m		[32mstandard_copydir(fromdir, todir, recurse);[m
[32m+[m[32m}[m
[32m+[m
[32m+[m[32m/*[m
[32m+[m[32m * copydir: copy a directory[m
[32m+[m[32m *[m
[32m+[m[32m * If recurse is false, subdirectories are ignored.  Anything that's not[m
[32m+[m[32m * a directory or a regular file is ignored.[m
[32m+[m[32m */[m
[32m+[m[32mvoid[m
[32m+[m[32mstandard_copydir(char *fromdir, char *todir, bool recurse)[m
[32m+[m[32m{[m
[32m+[m
 	DIR		   *xldir;[m
 	struct dirent *xlde;[m
 	char		fromfile[MAXPGPATH * 2];[m
[1mdiff --git a/src/include/storage/copydir.h b/src/include/storage/copydir.h[m
[1mindex 525cc6203e..8b73184177 100644[m
[1m--- a/src/include/storage/copydir.h[m
[1m+++ b/src/include/storage/copydir.h[m
[36m@@ -13,7 +13,12 @@[m
 #ifndef COPYDIR_H[m
 #define COPYDIR_H[m
 [m
[32m+[m[32m/* Hook for plugins to get control in copydir() */[m
[32m+[m[32mtypedef void (*copydir_hook_type) (char *fromdir, char *todir, bool recurse);[m
[32m+[m[32mextern PGDLLIMPORT copydir_hook_type copydir_hook;[m
[32m+[m
 extern void copydir(char *fromdir, char *todir, bool recurse);[m
[32m+[m[32mextern void standard_copydir(char *fromdir, char *todir, bool recurse);[m
 extern void copy_file(char *fromfile, char *tofile);[m
 [m
 #endif							/* COPYDIR_H */[m
