+@@ -321,8 +331,9 @@ static int remember_delete(struct file_s
+
+ while (1) {
+ len = snprintf(deldelay_buf + deldelay_cnt,
+- deldelay_size - deldelay_cnt,
+- "%x %s%c", (int)file->mode, fname, '\0');
++ deldelay_size - deldelay_cnt, "%x %x %s%c",
++ (int)file->mode, (int)FF_PTR(file),
++ fname, '\0');
+ if ((deldelay_cnt += len) <= deldelay_size)
+ break;
+ if (deldelay_fd < 0 && !start_delete_delay_temp())
+@@ -335,7 +346,7 @@ static int remember_delete(struct file_s
+ return 1;
+ }
+
+-static int read_delay_line(char *buf)
++static int read_delay_line(char *buf, int *fileflags_p)
+ {
+ static int read_pos = 0;
+ int j, len, mode;
+@@ -377,7 +388,7 @@ static int read_delay_line(char *buf)
+
+ bp = deldelay_buf + read_pos;
+
+- if (sscanf(bp, "%x ", &mode) != 1) {
++ if (sscanf(bp, "%x %x ", &mode, fileflags_p) != 2) {
+ invalid_data:
+ rprintf(FERROR, "ERROR: invalid data in delete-delay file.\n");
+ return -1;
+@@ -400,15 +411,15 @@ static int read_delay_line(char *buf)
+
+ static void do_delayed_deletions(char *delbuf)
+ {
+- int mode;
++ int mode, fileflags;
+
+ if (deldelay_fd >= 0) {
+ if (deldelay_cnt && !flush_delete_delay())
+ return;
+ lseek(deldelay_fd, 0, 0);
+ }
+- while ((mode = read_delay_line(delbuf)) >= 0)
+- delete_item(delbuf, mode, NULL, DEL_RECURSE);
++ while ((mode = read_delay_line(delbuf, &fileflags)) >= 0)
++ delete_item(delbuf, mode, fileflags, NULL, DEL_RECURSE);
+ if (deldelay_fd >= 0)
+ close(deldelay_fd);
+ }
+@@ -475,7 +486,7 @@ static void delete_in_dir(char *fbuf, st
+ if (!remember_delete(fp, delbuf))
+ break;
+ } else