Author: trasz
Date: Sat Feb 25 20:32:37 2017
New Revision: 314282
URL: https://svnweb.freebsd.org/changeset/base/314282

Log:
  Fix linux_fstatfs() to return proper value for f_frsize. Without it,
  linux df(1) binary from Xenial shows garbage.
  
  Reviewed by:  dchagin
  MFC after:    2 weeks
  Sponsored by: DARPA, AFRL
  Differential Revision:        https://reviews.freebsd.org/D9692

Modified:
  head/sys/amd64/linux32/linux.h
  head/sys/compat/linux/linux_stats.c
  head/sys/i386/linux/linux.h

Modified: head/sys/amd64/linux32/linux.h
==============================================================================
--- head/sys/amd64/linux32/linux.h      Sat Feb 25 20:21:39 2017        
(r314281)
+++ head/sys/amd64/linux32/linux.h      Sat Feb 25 20:32:37 2017        
(r314282)
@@ -250,7 +250,9 @@ struct l_statfs64 { 
         uint64_t        f_ffree; 
         l_fsid_t        f_fsid;
         l_int           f_namelen;
-        l_int           f_spare[6];
+        l_int           f_frsize;
+        l_int           f_flags;
+        l_int           f_spare[4];
 } __packed;
 
 /* sigaction flags */

Modified: head/sys/compat/linux/linux_stats.c
==============================================================================
--- head/sys/compat/linux/linux_stats.c Sat Feb 25 20:21:39 2017        
(r314281)
+++ head/sys/compat/linux/linux_stats.c Sat Feb 25 20:32:37 2017        
(r314282)
@@ -303,7 +303,9 @@ struct l_statfs {
        l_long          f_ffree;
        l_fsid_t        f_fsid;
        l_long          f_namelen;
-       l_long          f_spare[6];
+       l_long          f_frsize;
+       l_long          f_flags;
+       l_long          f_spare[4];
 };
 
 #define        LINUX_CODA_SUPER_MAGIC  0x73757245L
@@ -371,6 +373,9 @@ bsd_to_linux_statfs(struct statfs *bsd_s
        linux_statfs->f_fsid.val[0] = bsd_statfs->f_fsid.val[0];
        linux_statfs->f_fsid.val[1] = bsd_statfs->f_fsid.val[1];
        linux_statfs->f_namelen = MAXNAMLEN;
+       linux_statfs->f_frsize = bsd_statfs->f_bsize;
+       linux_statfs->f_flags = 0;
+       memset(linux_statfs->f_spare, 0, sizeof(linux_statfs->f_spare));
 
        return (0);
 }
@@ -415,6 +420,9 @@ bsd_to_linux_statfs64(struct statfs *bsd
        linux_statfs->f_fsid.val[0] = bsd_statfs->f_fsid.val[0];
        linux_statfs->f_fsid.val[1] = bsd_statfs->f_fsid.val[1];
        linux_statfs->f_namelen = MAXNAMLEN;
+       linux_statfs->f_frsize = bsd_statfs->f_bsize;
+       linux_statfs->f_flags = 0;
+       memset(linux_statfs->f_spare, 0, sizeof(linux_statfs->f_spare));
 }
 
 int

Modified: head/sys/i386/linux/linux.h
==============================================================================
--- head/sys/i386/linux/linux.h Sat Feb 25 20:21:39 2017        (r314281)
+++ head/sys/i386/linux/linux.h Sat Feb 25 20:32:37 2017        (r314282)
@@ -225,7 +225,9 @@ struct l_statfs64 { 
         uint64_t        f_ffree; 
         l_fsid_t        f_fsid;
         l_int           f_namelen;
-        l_int           f_spare[6];
+        l_int           f_frsize;
+        l_int           f_flags;
+        l_int           f_spare[4];
 };
 
 #define        LINUX_NSIG_WORDS        2
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to