- make_bak_dir(backup_dir_buf);
- if (do_mknod(backup_dir_buf, file->mode, file->u.rdev) != 0) {
- rprintf(FERROR, "mknod %s failed: %s\n",
- full_fname(backup_dir_buf), strerror(errno));
+ if (do_mknod(backup_dir_buf, file->mode, file->u.rdev) < 0
+ && (errno != ENOENT || make_bak_dir(backup_dir_buf) < 0
+ || do_mknod(backup_dir_buf, file->mode, file->u.rdev) < 0)) {
+ rsyserr(FERROR, errno, "mknod %s failed",
+ full_fname(backup_dir_buf));