- last_mode = file->mode;
- if (file->rdev == last_rdev)
- flags |= SAME_RDEV;
- else
- last_rdev = file->rdev;
- if (file->uid == last_uid)
+ mode = file->mode;
+ if (preserve_devices) {
+ if (protocol_version < 28) {
+ if (IS_DEVICE(mode)) {
+ if (file->u.rdev == rdev) {
+ /* Set both flags so that the test when
+ * writing the data is simpler. */
+ flags |= SAME_RDEV_pre28|SAME_HIGH_RDEV;
+ } else
+ rdev = file->u.rdev;
+ } else
+ rdev = 0;
+ } else if (IS_DEVICE(mode)) {
+ if ((file->u.rdev & ~0xFF) == rdev)
+ flags |= SAME_HIGH_RDEV;
+ else
+ rdev = file->u.rdev & ~0xFF;
+ }
+ }
+ if (file->uid == uid)