+@@ -329,18 +339,23 @@ void recv_generator(char *fname, struct
+ }
+ statret = -1;
+ }
+- if (statret != 0 && do_mkdir(fname,file->mode) != 0 && errno != EEXIST) {
+- if (!(relative_paths && errno == ENOENT
+- && create_directory_path(fname, orig_umask) == 0
+- && do_mkdir(fname, file->mode) == 0)) {
+- rsyserr(FERROR, errno,
+- "recv_generator: mkdir %s failed",
+- full_fname(fname));
++ if (statret != 0) {
++ if (do_mkdir(fname,file->mode) != 0 && errno != EEXIST) {
++ if (!(relative_paths && errno == ENOENT
++ && create_directory_path(fname, orig_umask) == 0
++ && do_mkdir(fname, file->mode) == 0)) {
++ rsyserr(FERROR, errno,
++ "recv_generator: mkdir %s failed",
++ full_fname(fname));
++ }
+ }
++ statret = link_stat(fname, &st);
++ if (statret != 0)
++ return;
+ }
+- /* f_out is set to -1 when doing final directory
+- permission and modification time repair */
+- if (set_perms(fname,file,NULL,0) && verbose && (f_out != -1))
++ /* f_out is set to -1 when doing final directory-permission
++ * and modification-time repair. */
++ if (set_perms(fname, file, &st, 0) && verbose && (f_out != -1))
+ rprintf(FINFO,"%s/\n",fname);
+ return;
+ }