@@ -728,6 +728,30 @@ finish_progress(char *done)
728
728
pt_header = NULL ;
729
729
}
730
730
731
+ /* This function checks if the passed fd refers to /dev/null or /dev/zero */
732
+ #ifdef __linux__
733
+ static boolean_t
734
+ is_dev_nullzero (int fd )
735
+ {
736
+ struct stat st ;
737
+ fstat (fd , & st );
738
+ return (major (st .st_rdev ) == 1 && (minor (st .st_rdev ) == 3 /* null */ ||
739
+ minor (st .st_rdev ) == 5 /* zero */ ));
740
+ }
741
+ #endif
742
+
743
+ static void
744
+ note_dev_error (int err , int fd )
745
+ {
746
+ #ifdef __linux__
747
+ if (err == EINVAL && is_dev_nullzero (fd )) {
748
+ (void ) fprintf (stderr ,
749
+ gettext ("Error: Stream cannot be written to "
750
+ "/dev/{null,zero} files.\n" ));
751
+ }
752
+ #endif
753
+ }
754
+
731
755
static int
732
756
zfs_mount_and_share (libzfs_handle_t * hdl , const char * dataset , zfs_type_t type )
733
757
{
@@ -4572,11 +4596,16 @@ zfs_do_send(int argc, char **argv)
4572
4596
4573
4597
err = zfs_send_saved (zhp , & flags , STDOUT_FILENO ,
4574
4598
resume_token );
4599
+ if (err != 0 )
4600
+ note_dev_error (errno , STDOUT_FILENO );
4575
4601
zfs_close (zhp );
4576
4602
return (err != 0 );
4577
4603
} else if (resume_token != NULL ) {
4578
- return (zfs_send_resume (g_zfs , & flags , STDOUT_FILENO ,
4579
- resume_token ));
4604
+ err = zfs_send_resume (g_zfs , & flags , STDOUT_FILENO ,
4605
+ resume_token );
4606
+ if (err != 0 )
4607
+ note_dev_error (errno , STDOUT_FILENO );
4608
+ return (err );
4580
4609
}
4581
4610
4582
4611
if (flags .skipmissing && !flags .replicate ) {
@@ -4627,6 +4656,8 @@ zfs_do_send(int argc, char **argv)
4627
4656
err = zfs_send_one (zhp , fromname , STDOUT_FILENO , & flags ,
4628
4657
redactbook );
4629
4658
zfs_close (zhp );
4659
+ if (err != 0 )
4660
+ note_dev_error (errno , STDOUT_FILENO );
4630
4661
return (err != 0 );
4631
4662
}
4632
4663
@@ -4703,6 +4734,7 @@ zfs_do_send(int argc, char **argv)
4703
4734
nvlist_free (dbgnv );
4704
4735
}
4705
4736
zfs_close (zhp );
4737
+ note_dev_error (errno , STDOUT_FILENO );
4706
4738
4707
4739
return (err != 0 );
4708
4740
}
0 commit comments