svn commit: r246049 - stable/9/sys/fs/ext2fs

Pedro F. Giffuni pfg at FreeBSD.org
Tue Jan 29 01:44:15 UTC 2013


Author: pfg
Date: Tue Jan 29 01:44:13 2013
New Revision: 246049
URL: http://svnweb.freebsd.org/changeset/base/246049

Log:
  MFC	r245820, r245844, r245950:
  
  ext2fs: make some inode fields match the ext2 spec.
  
  Ext2fs uses unsigned fields in its dinode struct.
  FreeBSD can have negative values in some of those
  fields and the inode is meant to interact with the
  system so we have never respected the unsigned
  nature of most of those fields.
  
  Block numbers and the generation number do
  not need to be signed so redefine them as
  unsigned to better match the on-disk information.
  
  Include some fixes proposed by bde at .
  
  While here add a lot of svn mergeinfo that was missing
  in /sys:
  
  r239963,240060,240880,241007,241141,241143,241181,243641,
  243652,244475,245121,245612,245817

Modified:
  stable/9/sys/fs/ext2fs/ext2_alloc.c
  stable/9/sys/fs/ext2fs/ext2_balloc.c
  stable/9/sys/fs/ext2fs/ext2_inode.c
  stable/9/sys/fs/ext2fs/inode.h
Directory Properties:
  stable/9/sys/   (props changed)
  stable/9/sys/fs/   (props changed)

Modified: stable/9/sys/fs/ext2fs/ext2_alloc.c
==============================================================================
--- stable/9/sys/fs/ext2fs/ext2_alloc.c	Tue Jan 29 00:11:21 2013	(r246048)
+++ stable/9/sys/fs/ext2fs/ext2_alloc.c	Tue Jan 29 01:44:13 2013	(r246049)
@@ -169,7 +169,7 @@ ext2_reallocblks(ap)
 	struct inode *ip;
 	struct vnode *vp;
 	struct buf *sbp, *ebp;
-	int32_t *bap, *sbap, *ebap = 0;
+	uint32_t *bap, *sbap, *ebap = 0;
 	struct ext2mount *ump;
 	struct cluster_save *buflist;
 	struct indir start_ap[NIADDR + 1], end_ap[NIADDR + 1], *idp;

Modified: stable/9/sys/fs/ext2fs/ext2_balloc.c
==============================================================================
--- stable/9/sys/fs/ext2fs/ext2_balloc.c	Tue Jan 29 00:11:21 2013	(r246048)
+++ stable/9/sys/fs/ext2fs/ext2_balloc.c	Tue Jan 29 01:44:13 2013	(r246049)
@@ -69,7 +69,7 @@ ext2_balloc(ip, lbn, size, cred, bpp, fl
 	struct buf *bp, *nbp;
 	struct vnode *vp = ITOV(ip);
 	struct indir indirs[NIADDR + 2];
-	int32_t newb, *bap, pref;
+	uint32_t newb, *bap, pref;
 	int osize, nsize, num, i, error;
 
 	*bpp = NULL;

Modified: stable/9/sys/fs/ext2fs/ext2_inode.c
==============================================================================
--- stable/9/sys/fs/ext2fs/ext2_inode.c	Tue Jan 29 00:11:21 2013	(r246048)
+++ stable/9/sys/fs/ext2fs/ext2_inode.c	Tue Jan 29 01:44:13 2013	(r246049)
@@ -119,7 +119,7 @@ ext2_truncate(vp, length, flags, cred, t
 	int32_t lastblock;
 	struct inode *oip;
 	int32_t bn, lbn, lastiblock[NIADDR], indir_lbn[NIADDR];
-	int32_t oldblks[NDADDR + NIADDR], newblks[NDADDR + NIADDR];
+	uint32_t oldblks[NDADDR + NIADDR], newblks[NDADDR + NIADDR];
 	struct bufobj *bo;
 	struct m_ext2fs *fs;
 	struct buf *bp;
@@ -341,8 +341,9 @@ done:
 	 * Put back the real size.
 	 */
 	oip->i_size = length;
-	oip->i_blocks -= blocksreleased;
-	if (oip->i_blocks < 0)			/* sanity */
+	if (oip->i_blocks >= blocksreleased)
+		oip->i_blocks -= blocksreleased;
+	else				/* sanity */
 		oip->i_blocks = 0;
 	oip->i_flag |= IN_CHANGE;
 	vnode_pager_setsize(ovp, length);

Modified: stable/9/sys/fs/ext2fs/inode.h
==============================================================================
--- stable/9/sys/fs/ext2fs/inode.h	Tue Jan 29 00:11:21 2013	(r246048)
+++ stable/9/sys/fs/ext2fs/inode.h	Tue Jan 29 01:44:13 2013	(r246049)
@@ -90,11 +90,11 @@ struct inode {
 	int32_t		i_atimensec;	/* Last access time. */
 	int32_t		i_ctimensec;	/* Last inode change time. */
 	int32_t		i_birthnsec;	/* Inode creation time. */
-	int32_t		i_db[NDADDR];	/* Direct disk blocks. */
-	int32_t		i_ib[NIADDR];	/* Indirect disk blocks. */
+	uint32_t	i_db[NDADDR];	/* Direct disk blocks. */
+	uint32_t	i_ib[NIADDR];	/* Indirect disk blocks. */
 	uint32_t	i_flags;	/* Status flags (chflags). */
-	int32_t		i_blocks;	/* Blocks actually held. */
-	int32_t		i_gen;		/* Generation number. */
+	uint32_t	i_blocks;	/* Blocks actually held. */
+	uint32_t	i_gen;		/* Generation number. */
 	uint32_t	i_uid;		/* File owner. */
 	uint32_t	i_gid;		/* File group. */
 };
@@ -163,7 +163,7 @@ struct ufid {
 	uint16_t ufid_len;	/* Length of structure. */
 	uint16_t ufid_pad;	/* Force 32-bit alignment. */
 	ino_t	 ufid_ino;	/* File number (ino). */
-	int32_t	 ufid_gen;	/* Generation number. */
+	uint32_t ufid_gen;	/* Generation number. */
 };
 #endif /* _KERNEL */
 


More information about the svn-src-stable-9 mailing list