Bug 162486 - [patch] Cannot mount filesystem formatted by newfs_msdos on ARM
Summary: [patch] Cannot mount filesystem formatted by newfs_msdos on ARM
Status: Closed FIXED
Alias: None
Product: Base System
Classification: Unclassified
Component: bin (show other bugs)
Version: 8.2-STABLE
Hardware: Any Any
: Normal Affects Only Me
Assignee: Xin LI
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-11-11 17:50 UTC by Ian Lepore
Modified: 2012-02-07 22:00 UTC (History)
0 users

See Also:


Attachments
newfs_msdos.diff (1.69 KB, patch)
2011-11-11 17:50 UTC, Ian Lepore
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Ian Lepore 2011-11-11 17:50:04 UTC
A filesystem formated with newfs_msdos on an ARM system cannot be mounted on
ARM or other architectures.  The problem turned out to be ARM ABI structure 
packing.  More information is available in this mail thread:

http://lists.freebsd.org/pipermail/freebsd-arm/2011-October/003106.html
Comment 1 Xin LI freebsd_committer freebsd_triage 2011-11-11 20:24:07 UTC
Responsible Changed
From-To: freebsd-bugs->delphij

Take.
Comment 2 Xin LI freebsd_committer freebsd_triage 2011-11-11 20:31:58 UTC
State Changed
From-To: open->patched

Committed against -HEAD, MFC reminder.
Comment 3 dfilter service freebsd_committer freebsd_triage 2011-11-11 20:31:59 UTC
Author: delphij
Date: Fri Nov 11 20:31:48 2011
New Revision: 227454
URL: http://svn.freebsd.org/changeset/base/227454

Log:
  Use __packed to prevent alignment from taking place, which otherwise may
  change the on-disk format in an incompatible way.  Without this change,
  msdosfs created on FreeBSD/arm would not be mountable.
  
  PR:		bin/162486
  Submitted by:	Ian Lepore <freebsd damnhippie dyndns org>
  Reported by:	Mattia Rossi <mrossi at swin.edu.au>
  MFC after:	3 days

Modified:
  head/sbin/newfs_msdos/newfs_msdos.c

Modified: head/sbin/newfs_msdos/newfs_msdos.c
==============================================================================
--- head/sbin/newfs_msdos/newfs_msdos.c	Fri Nov 11 20:13:24 2011	(r227453)
+++ head/sbin/newfs_msdos/newfs_msdos.c	Fri Nov 11 20:31:48 2011	(r227454)
@@ -99,7 +99,7 @@ static const char rcsid[] =
 struct bs {
     u_int8_t bsJump[3];		/* bootstrap entry point */
     u_int8_t bsOemName[8];		/* OEM name and version */
-};
+} __packed;
 
 struct bsbpb {
     u_int8_t bpbBytesPerSec[2];		/* bytes per sector */
@@ -114,7 +114,7 @@ struct bsbpb {
     u_int8_t bpbHeads[2];		/* drive heads */
     u_int8_t bpbHiddenSecs[4];		/* hidden sectors */
     u_int8_t bpbHugeSectors[4];		/* big total sectors */
-};
+} __packed;
 
 struct bsxbpb {
     u_int8_t bpbBigFATsecs[4];		/* big sectors per FAT */
@@ -124,7 +124,7 @@ struct bsxbpb {
     u_int8_t bpbFSInfo[2];		/* file system info sector */
     u_int8_t bpbBackup[2];		/* backup boot sector */
     u_int8_t bpbReserved[12];			/* reserved */
-};
+} __packed;
 
 struct bsx {
     u_int8_t exDriveNumber;		/* drive number */
@@ -133,7 +133,7 @@ struct bsx {
     u_int8_t exVolumeID[4];		/* volume ID number */
     u_int8_t exVolumeLabel[11]; 	/* volume label */
     u_int8_t exFileSysType[8];		/* file system type */
-};
+} __packed;
 
 struct de {
     u_int8_t deName[11];	/* name and extension */
@@ -143,7 +143,7 @@ struct de {
     u_int8_t deMDate[2];	/* creation date */
     u_int8_t deStartCluster[2];	/* starting cluster */
     u_int8_t deFileSize[4];	/* size */
-};
+} __packed;
 
 struct bpb {
     u_int bpbBytesPerSec;		/* bytes per sector */
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
Comment 4 dfilter service freebsd_committer freebsd_triage 2012-02-07 21:57:13 UTC
Author: delphij
Date: Tue Feb  7 21:56:58 2012
New Revision: 231162
URL: http://svn.freebsd.org/changeset/base/231162

Log:
  MFC r227454:
  
  Use __packed to prevent alignment from taking place, which otherwise may
  change the on-disk format in an incompatible way. Without this change,
  msdosfs created on FreeBSD/arm would not be mountable.
  
  PR:		bin/162486
  Submitted by:	Ian Lepore <freebsd damnhippie dyndns org>
  Reported by:	Mattia Rossi <mrossi at swin.edu.au>

Modified:
  stable/9/sbin/newfs_msdos/newfs_msdos.c
Directory Properties:
  stable/9/sbin/newfs_msdos/   (props changed)

Changes in other areas also in this revision:
Modified:
  stable/8/sbin/newfs_msdos/newfs_msdos.c
Directory Properties:
  stable/8/sbin/newfs_msdos/   (props changed)

Modified: stable/9/sbin/newfs_msdos/newfs_msdos.c
==============================================================================
--- stable/9/sbin/newfs_msdos/newfs_msdos.c	Tue Feb  7 20:54:44 2012	(r231161)
+++ stable/9/sbin/newfs_msdos/newfs_msdos.c	Tue Feb  7 21:56:58 2012	(r231162)
@@ -99,7 +99,7 @@ static const char rcsid[] =
 struct bs {
     u_int8_t bsJump[3];			/* bootstrap entry point */
     u_int8_t bsOemName[8];		/* OEM name and version */
-};
+} __packed;
 
 struct bsbpb {
     u_int8_t bpbBytesPerSec[2];		/* bytes per sector */
@@ -114,7 +114,7 @@ struct bsbpb {
     u_int8_t bpbHeads[2];		/* drive heads */
     u_int8_t bpbHiddenSecs[4];		/* hidden sectors */
     u_int8_t bpbHugeSectors[4];		/* big total sectors */
-};
+} __packed;
 
 struct bsxbpb {
     u_int8_t bpbBigFATsecs[4];		/* big sectors per FAT */
@@ -124,7 +124,7 @@ struct bsxbpb {
     u_int8_t bpbFSInfo[2];		/* file system info sector */
     u_int8_t bpbBackup[2];		/* backup boot sector */
     u_int8_t bpbReserved[12];		/* reserved */
-};
+} __packed;
 
 struct bsx {
     u_int8_t exDriveNumber;		/* drive number */
@@ -133,7 +133,7 @@ struct bsx {
     u_int8_t exVolumeID[4];		/* volume ID number */
     u_int8_t exVolumeLabel[11]; 	/* volume label */
     u_int8_t exFileSysType[8];		/* file system type */
-};
+} __packed;
 
 struct de {
     u_int8_t deName[11];		/* name and extension */
@@ -143,7 +143,7 @@ struct de {
     u_int8_t deMDate[2];		/* creation date */
     u_int8_t deStartCluster[2];		/* starting cluster */
     u_int8_t deFileSize[4];		/* size */
-};
+} __packed;
 
 struct bpb {
     u_int bpbBytesPerSec;		/* bytes per sector */
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
Comment 5 Xin LI freebsd_committer freebsd_triage 2012-02-07 21:57:14 UTC
State Changed
From-To: patched->closed

Patch applied against RELENG_8 and RELENG_9, thanks for 
your submission!
Comment 6 dfilter service freebsd_committer freebsd_triage 2012-02-07 21:57:27 UTC
Author: delphij
Date: Tue Feb  7 21:56:58 2012
New Revision: 231162
URL: http://svn.freebsd.org/changeset/base/231162

Log:
  MFC r227454:
  
  Use __packed to prevent alignment from taking place, which otherwise may
  change the on-disk format in an incompatible way. Without this change,
  msdosfs created on FreeBSD/arm would not be mountable.
  
  PR:		bin/162486
  Submitted by:	Ian Lepore <freebsd damnhippie dyndns org>
  Reported by:	Mattia Rossi <mrossi at swin.edu.au>

Modified:
  stable/8/sbin/newfs_msdos/newfs_msdos.c
Directory Properties:
  stable/8/sbin/newfs_msdos/   (props changed)

Changes in other areas also in this revision:
Modified:
  stable/9/sbin/newfs_msdos/newfs_msdos.c
Directory Properties:
  stable/9/sbin/newfs_msdos/   (props changed)

Modified: stable/8/sbin/newfs_msdos/newfs_msdos.c
==============================================================================
--- stable/8/sbin/newfs_msdos/newfs_msdos.c	Tue Feb  7 20:54:44 2012	(r231161)
+++ stable/8/sbin/newfs_msdos/newfs_msdos.c	Tue Feb  7 21:56:58 2012	(r231162)
@@ -99,7 +99,7 @@ static const char rcsid[] =
 struct bs {
     u_int8_t bsJump[3];			/* bootstrap entry point */
     u_int8_t bsOemName[8];		/* OEM name and version */
-};
+} __packed;
 
 struct bsbpb {
     u_int8_t bpbBytesPerSec[2];		/* bytes per sector */
@@ -114,7 +114,7 @@ struct bsbpb {
     u_int8_t bpbHeads[2];		/* drive heads */
     u_int8_t bpbHiddenSecs[4];		/* hidden sectors */
     u_int8_t bpbHugeSectors[4];		/* big total sectors */
-};
+} __packed;
 
 struct bsxbpb {
     u_int8_t bpbBigFATsecs[4];		/* big sectors per FAT */
@@ -124,7 +124,7 @@ struct bsxbpb {
     u_int8_t bpbFSInfo[2];		/* file system info sector */
     u_int8_t bpbBackup[2];		/* backup boot sector */
     u_int8_t bpbReserved[12];		/* reserved */
-};
+} __packed;
 
 struct bsx {
     u_int8_t exDriveNumber;		/* drive number */
@@ -133,7 +133,7 @@ struct bsx {
     u_int8_t exVolumeID[4];		/* volume ID number */
     u_int8_t exVolumeLabel[11]; 	/* volume label */
     u_int8_t exFileSysType[8];		/* file system type */
-};
+} __packed;
 
 struct de {
     u_int8_t deName[11];		/* name and extension */
@@ -143,7 +143,7 @@ struct de {
     u_int8_t deMDate[2];		/* creation date */
     u_int8_t deStartCluster[2];		/* starting cluster */
     u_int8_t deFileSize[4];		/* size */
-};
+} __packed;
 
 struct bpb {
     u_int bpbBytesPerSec;		/* bytes per sector */
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"