Subject: Re: NetBSD, apple fibre-channel card & 2.8TB Xserve-RAID
To: der Mouse <mouse@Rodents.Montreal.QC.CA>
From: Charles M. Hannum <abuse@spamalicious.com>
List: tech-kern
Date: 12/06/2004 04:16:16
--Boundary-00=_Q09sBpX56kuJgMb
Content-Type: text/plain;
  charset="us-ascii"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

You didn't say whether you're using a FFS v1 or v2 file system, and I don't 
recall whether you specified the block and fragment sizes, but I did a very 
quick audit of the FFS code and found what looks like a serious truncation 
problem.  Attached is a diff that I think will fix it.

(The problem is the usage of fsbtodb(nb) in getblk() calls.  It needs to be 
expanded to 64 bits somewhere, and fsbtodb() doesn't do it.)

--Boundary-00=_Q09sBpX56kuJgMb
Content-Type: text/x-diff;
  charset="us-ascii";
  name="ffs.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
	filename="ffs.diff"

Index: ffs_balloc.c
===================================================================
RCS file: /cvsroot/src/sys/ufs/ffs/ffs_balloc.c,v
retrieving revision 1.36
diff -u -r1.36 ffs_balloc.c
--- ffs_balloc.c	14 Aug 2004 01:30:56 -0000	1.36
+++ ffs_balloc.c	6 Dec 2004 04:11:09 -0000
@@ -103,13 +103,12 @@
 	int size;
 	struct ucred *cred;
 	int flags;
-	int32_t nb;
 	struct buf *bp, *nbp;
 	struct vnode *vp = ap->a_vp;
 	struct inode *ip = VTOI(vp);
 	struct fs *fs = ip->i_fs;
 	struct indir indirs[NIADDR + 2];
-	daddr_t newb, pref;
+	daddr_t newb, pref, nb;
 	int32_t *bap;	/* XXX ondisk32 */
 	int deallocated, osize, nsize, num, i, error;
 	int32_t *blkp, *allocblk, allociblk[NIADDR + 1];

--Boundary-00=_Q09sBpX56kuJgMb--