svn commit: r318902 - in head/usr.sbin/makefs: . ffs

Ed Maste emaste at FreeBSD.org
Thu May 25 21:41:08 UTC 2017


Author: emaste
Date: Thu May 25 21:41:06 2017
New Revision: 318902
URL: https://svnweb.freebsd.org/changeset/base/318902

Log:
  makefs: make buf generic
  
  it has nothing to do with ffs and will eventually be moved.
  gc sectorsize.
  
  This is a corrected version of r317744.
  
  NetBSD versions:
  ffs.c		1.58
  ffs/buf.c	1.14 1.18
  ffs/buf.h	1.8
  
  Submitted by:	Siva Mahadevan <smahadevan at freebsdfoundation.org>
  Obtained from:	NetBSD
  Sponsored by:	The FreeBSD Foundation
  Differential Revision:	https://reviews.freebsd.org/D10803

Modified:
  head/usr.sbin/makefs/ffs.c
  head/usr.sbin/makefs/ffs/buf.c
  head/usr.sbin/makefs/ffs/buf.h
  head/usr.sbin/makefs/ffs/ffs_alloc.c
  head/usr.sbin/makefs/ffs/ffs_balloc.c
  head/usr.sbin/makefs/ffs/ufs_inode.h

Modified: head/usr.sbin/makefs/ffs.c
==============================================================================
--- head/usr.sbin/makefs/ffs.c	Thu May 25 21:16:39 2017	(r318901)
+++ head/usr.sbin/makefs/ffs.c	Thu May 25 21:41:06 2017	(r318902)
@@ -143,7 +143,6 @@ static  void	*ffs_build_dinode2(struct u
 				 fsnode *, fsinfo_t *);
 
 
-int	sectorsize;		/* XXX: for buf.c::getblk() */
 	/* publicly visible functions */
 
 void
@@ -429,8 +428,6 @@ ffs_validate(const char *dir, fsnode *ro
 		printf("ffs_validate: dir %s; %lld bytes, %lld inodes\n",
 		    dir, (long long)fsopts->size, (long long)fsopts->inodes);
 	}
-	sectorsize = fsopts->sectorsize;	/* XXX - see earlier */
-
 		/* now check calculated sizes vs requested sizes */
 	if (fsopts->maxsize > 0 && fsopts->size > fsopts->maxsize) {
 		errx(1, "`%s' size of %lld is larger than the maxsize of %lld.",
@@ -480,13 +477,13 @@ ffs_create_image(const char *image, fsin
 	int	i, bufsize;
 	off_t	bufrem;
 	time_t	tstamp;
+	int	oflags = O_RDWR | O_CREAT | O_TRUNC;
 
 	assert (image != NULL);
 	assert (fsopts != NULL);
 
 		/* create image */
-	if ((fsopts->fd = open(image, O_RDWR | O_CREAT | O_TRUNC, 0666))
-	    == -1) {
+	if ((fsopts->fd = open(image, oflags, 0666)) == -1) {
 		warn("Can't open `%s' for writing", image);
 		return (-1);
 	}
@@ -878,6 +875,7 @@ ffs_write_file(union dinode *din, uint32
 	struct inode	in;
 	struct buf *	bp;
 	ffs_opt_t	*ffs_opts = fsopts->fs_specific;
+	struct vnode vp = { fsopts, NULL };
 
 	assert (din != NULL);
 	assert (buf != NULL);
@@ -890,6 +888,7 @@ ffs_write_file(union dinode *din, uint32
 	p = NULL;
 
 	in.i_fs = (struct fs *)fsopts->superblock;
+	in.i_devvp = &vp;
 
 	if (debug & DEBUG_FS_WRITE_FILE) {
 		printf(
@@ -910,7 +909,6 @@ ffs_write_file(union dinode *din, uint32
 	else
 		memcpy(&in.i_din.ffs2_din, &din->ffs2_din,
 		    sizeof(in.i_din.ffs2_din));
-	in.i_fd = fsopts->fd;
 
 	if (DIP(din, size) == 0)
 		goto write_inode_and_leave;		/* mmm, cheating */

Modified: head/usr.sbin/makefs/ffs/buf.c
==============================================================================
--- head/usr.sbin/makefs/ffs/buf.c	Thu May 25 21:16:39 2017	(r318901)
+++ head/usr.sbin/makefs/ffs/buf.c	Thu May 25 21:41:06 2017	(r318902)
@@ -52,8 +52,6 @@ __FBSDID("$FreeBSD$");
 #include "makefs.h"
 #include "buf.h"
 
-extern int sectorsize;		/* XXX: from ffs.c & mkfs.c */
-
 static TAILQ_HEAD(buftailhead,buf) buftail;
 
 int
@@ -62,6 +60,7 @@ bread(struct vnode *vp, daddr_t blkno, i
 {
 	off_t	offset;
 	ssize_t	rv;
+	fsinfo_t *fsinfo = vp->fs;
 
 	assert (bpp != NULL);
 
@@ -69,15 +68,15 @@ bread(struct vnode *vp, daddr_t blkno, i
 		printf("%s: blkno %lld size %d\n", __func__, (long long)blkno,
 		    size);
 	*bpp = getblk(vp, blkno, size, 0, 0, 0);
-	offset = (*bpp)->b_blkno * sectorsize;	/* XXX */
+	offset = (*bpp)->b_blkno * fsinfo->sectorsize;
 	if (debug & DEBUG_BUF_BREAD)
 		printf("%s: blkno %lld offset %lld bcount %ld\n", __func__,
 		    (long long)(*bpp)->b_blkno, (long long) offset,
 		    (*bpp)->b_bcount);
-	if (lseek((*bpp)->b_fd, offset, SEEK_SET) == -1)
+	if (lseek((*bpp)->b_fs->fd, offset, SEEK_SET) == -1)
 		err(1, "%s: lseek %lld (%lld)", __func__,
 		    (long long)(*bpp)->b_blkno, (long long)offset);
-	rv = read((*bpp)->b_fd, (*bpp)->b_data, (*bpp)->b_bcount);
+	rv = read((*bpp)->b_fs->fd, (*bpp)->b_data, (*bpp)->b_bcount);
 	if (debug & DEBUG_BUF_BREAD)
 		printf("%s: read %ld (%lld) returned %d\n", __func__,
 		    (*bpp)->b_bcount, (long long)offset, (int)rv);
@@ -126,16 +125,17 @@ bwrite(struct buf *bp)
 {
 	off_t	offset;
 	ssize_t	rv;
+	fsinfo_t *fs = bp->b_fs;
 
 	assert (bp != NULL);
-	offset = bp->b_blkno * sectorsize;	/* XXX */
+	offset = bp->b_blkno * fs->sectorsize;
 	if (debug & DEBUG_BUF_BWRITE)
 		printf("bwrite: blkno %lld offset %lld bcount %ld\n",
 		    (long long)bp->b_blkno, (long long) offset,
 		    bp->b_bcount);
-	if (lseek(bp->b_fd, offset, SEEK_SET) == -1)
+	if (lseek(bp->b_fs->fd, offset, SEEK_SET) == -1)
 		return (errno);
-	rv = write(bp->b_fd, bp->b_data, bp->b_bcount);
+	rv = write(bp->b_fs->fd, bp->b_data, bp->b_bcount);
 	if (debug & DEBUG_BUF_BWRITE)
 		printf("bwrite: write %ld (offset %lld) returned %lld\n",
 		    bp->b_bcount, (long long)offset, (long long)rv);
@@ -198,7 +198,6 @@ getblk(struct vnode *vp, daddr_t blkno, 
 		bp = ecalloc(1, sizeof(*bp));
 		bp->b_bufsize = 0;
 		bp->b_blkno = bp->b_lblkno = blkno;
-		bp->b_fd = vp->fd;
 		bp->b_fs = vp->fs;
 		bp->b_data = NULL;
 		TAILQ_INSERT_HEAD(&buftail, bp, b_tailq);

Modified: head/usr.sbin/makefs/ffs/buf.h
==============================================================================
--- head/usr.sbin/makefs/ffs/buf.h	Thu May 25 21:16:39 2017	(r318901)
+++ head/usr.sbin/makefs/ffs/buf.h	Thu May 25 21:41:06 2017	(r318902)
@@ -43,13 +43,12 @@
 #include <sys/param.h>
 #include <sys/queue.h>
 
+struct makefs_fsinfo;
 struct ucred;
 
 struct vnode {
-	int fd;
-	void *fs;
+	struct makefs_fsinfo *fs;
 	void *v_data;
-	int offset;
 };
 
 struct buf {
@@ -58,8 +57,7 @@ struct buf {
 	long		b_bcount;
 	daddr_t		b_blkno;
 	daddr_t		b_lblkno;
-	int		b_fd;
-	void *		b_fs;
+	struct makefs_fsinfo *b_fs;
 
 	TAILQ_ENTRY(buf)	b_tailq;
 };

Modified: head/usr.sbin/makefs/ffs/ffs_alloc.c
==============================================================================
--- head/usr.sbin/makefs/ffs/ffs_alloc.c	Thu May 25 21:16:39 2017	(r318901)
+++ head/usr.sbin/makefs/ffs/ffs_alloc.c	Thu May 25 21:41:06 2017	(r318902)
@@ -297,11 +297,10 @@ ffs_alloccg(struct inode *ip, int cg, da
 	int error, frags, allocsiz, i;
 	struct fs *fs = ip->i_fs;
 	const int needswap = UFS_FSNEEDSWAP(fs);
-	struct vnode vp = { ip->i_fd, ip->i_fs, NULL, 0 };
 
 	if (fs->fs_cs(fs, cg).cs_nbfree == 0 && size == fs->fs_bsize)
 		return (0);
-	error = bread(&vp, fsbtodb(fs, cgtod(fs, cg)), (int)fs->fs_cgsize,
+	error = bread(ip->i_devvp, fsbtodb(fs, cgtod(fs, cg)), (int)fs->fs_cgsize,
 	    NULL, &bp);
 	if (error) {
 		brelse(bp, 0);
@@ -433,7 +432,6 @@ ffs_blkfree(struct inode *ip, daddr_t bn
 	int i, error, cg, blk, frags, bbase;
 	struct fs *fs = ip->i_fs;
 	const int needswap = UFS_FSNEEDSWAP(fs);
-	struct vnode vp = { ip->i_fd, ip->i_fs, NULL, 0 };
 
 	if (size > fs->fs_bsize || fragoff(fs, size) != 0 ||
 	    fragnum(fs, bno) + numfrags(fs, size) > fs->fs_frag) {
@@ -446,7 +444,7 @@ ffs_blkfree(struct inode *ip, daddr_t bn
 		    (uintmax_t)ip->i_number);
 		return;
 	}
-	error = bread(&vp, fsbtodb(fs, cgtod(fs, cg)), (int)fs->fs_cgsize,
+	error = bread(ip->i_devvp, fsbtodb(fs, cgtod(fs, cg)), (int)fs->fs_cgsize,
 	    NULL, &bp);
 	if (error) {
 		brelse(bp, 0);

Modified: head/usr.sbin/makefs/ffs/ffs_balloc.c
==============================================================================
--- head/usr.sbin/makefs/ffs/ffs_balloc.c	Thu May 25 21:16:39 2017	(r318901)
+++ head/usr.sbin/makefs/ffs/ffs_balloc.c	Thu May 25 21:41:06 2017	(r318902)
@@ -89,7 +89,6 @@ ffs_balloc_ufs1(struct inode *ip, off_t 
 	int32_t *allocblk, allociblk[UFS_NIADDR + 1];
 	int32_t *allocib;
 	const int needswap = UFS_FSNEEDSWAP(fs);
-	struct vnode vp = { ip->i_fd, ip->i_fs, NULL, 0 };
 
 	lbn = lblkno(fs, offset);
 	size = blkoff(fs, offset) + bufsize;
@@ -134,8 +133,8 @@ ffs_balloc_ufs1(struct inode *ip, off_t 
 			 */
 
 			if (bpp != NULL) {
-				error = bread(&vp, lbn, fs->fs_bsize, NULL,
-				    bpp);
+				error = bread(ip->i_devvp, lbn, fs->fs_bsize,
+				    NULL, bpp);
 				if (error) {
 					brelse(*bpp, 0);
 					return (error);
@@ -160,8 +159,8 @@ ffs_balloc_ufs1(struct inode *ip, off_t 
 				 */
 
 				if (bpp != NULL) {
-					error = bread(&vp, lbn, osize, NULL,
-					    bpp);
+					error = bread(ip->i_devvp, lbn, osize,
+					    NULL, bpp);
 					if (error) {
 						brelse(*bpp, 0);
 						return (error);
@@ -190,7 +189,7 @@ ffs_balloc_ufs1(struct inode *ip, off_t 
 			if (error)
 				return (error);
 			if (bpp != NULL) {
-				bp = getblk(&vp, lbn, nsize, 0, 0, 0);
+				bp = getblk(ip->i_devvp, lbn, nsize, 0, 0, 0);
 				bp->b_blkno = fsbtodb(fs, newb);
 				clrbuf(bp);
 				*bpp = bp;
@@ -228,7 +227,7 @@ ffs_balloc_ufs1(struct inode *ip, off_t 
 			return error;
 		nb = newb;
 		*allocblk++ = nb;
-		bp = getblk(&vp, indirs[1].in_lbn, fs->fs_bsize, 0, 0, 0);
+		bp = getblk(ip->i_devvp, indirs[1].in_lbn, fs->fs_bsize, 0, 0, 0);
 		bp->b_blkno = fsbtodb(fs, nb);
 		clrbuf(bp);
 		/*
@@ -246,7 +245,8 @@ ffs_balloc_ufs1(struct inode *ip, off_t 
 	 */
 
 	for (i = 1;;) {
-		error = bread(&vp, indirs[i].in_lbn, fs->fs_bsize, NULL, &bp);
+		error = bread(ip->i_devvp, indirs[i].in_lbn, fs->fs_bsize,
+		    NULL, &bp);
 		if (error) {
 			brelse(bp, 0);
 			return error;
@@ -269,7 +269,7 @@ ffs_balloc_ufs1(struct inode *ip, off_t 
 		}
 		nb = newb;
 		*allocblk++ = nb;
-		nbp = getblk(&vp, indirs[i].in_lbn, fs->fs_bsize, 0, 0, 0);
+		nbp = getblk(ip->i_devvp, indirs[i].in_lbn, fs->fs_bsize, 0, 0, 0);
 		nbp->b_blkno = fsbtodb(fs, nb);
 		clrbuf(nbp);
 		/*
@@ -300,7 +300,7 @@ ffs_balloc_ufs1(struct inode *ip, off_t 
 		nb = newb;
 		*allocblk++ = nb;
 		if (bpp != NULL) {
-			nbp = getblk(&vp, lbn, fs->fs_bsize, 0, 0, 0);
+			nbp = getblk(ip->i_devvp, lbn, fs->fs_bsize, 0, 0, 0);
 			nbp->b_blkno = fsbtodb(fs, nb);
 			clrbuf(nbp);
 			*bpp = nbp;
@@ -316,7 +316,7 @@ ffs_balloc_ufs1(struct inode *ip, off_t 
 	}
 	brelse(bp, 0);
 	if (bpp != NULL) {
-		error = bread(&vp, lbn, (int)fs->fs_bsize, NULL, &nbp);
+		error = bread(ip->i_devvp, lbn, (int)fs->fs_bsize, NULL, &nbp);
 		if (error) {
 			brelse(nbp, 0);
 			return error;
@@ -340,7 +340,6 @@ ffs_balloc_ufs2(struct inode *ip, off_t 
 	int64_t *allocblk, allociblk[UFS_NIADDR + 1];
 	int64_t *allocib;
 	const int needswap = UFS_FSNEEDSWAP(fs);
-	struct vnode vp = { ip->i_fd, ip->i_fs, NULL, 0 };
 
 	lbn = lblkno(fs, offset);
 	size = blkoff(fs, offset) + bufsize;
@@ -385,8 +384,8 @@ ffs_balloc_ufs2(struct inode *ip, off_t 
 			 */
 
 			if (bpp != NULL) {
-				error = bread(&vp, lbn, fs->fs_bsize, NULL,
-				    bpp);
+				error = bread(ip->i_devvp, lbn, fs->fs_bsize,
+				    NULL, bpp);
 				if (error) {
 					brelse(*bpp, 0);
 					return (error);
@@ -411,8 +410,8 @@ ffs_balloc_ufs2(struct inode *ip, off_t 
 				 */
 
 				if (bpp != NULL) {
-					error = bread(&vp, lbn, osize, NULL,
-					    bpp);
+					error = bread(ip->i_devvp, lbn, osize,
+					    NULL, bpp);
 					if (error) {
 						brelse(*bpp, 0);
 						return (error);
@@ -441,7 +440,7 @@ ffs_balloc_ufs2(struct inode *ip, off_t 
 			if (error)
 				return (error);
 			if (bpp != NULL) {
-				bp = getblk(&vp, lbn, nsize, 0, 0, 0);
+				bp = getblk(ip->i_devvp, lbn, nsize, 0, 0, 0);
 				bp->b_blkno = fsbtodb(fs, newb);
 				clrbuf(bp);
 				*bpp = bp;
@@ -479,7 +478,7 @@ ffs_balloc_ufs2(struct inode *ip, off_t 
 			return error;
 		nb = newb;
 		*allocblk++ = nb;
-		bp = getblk(&vp, indirs[1].in_lbn, fs->fs_bsize, 0, 0, 0);
+		bp = getblk(ip->i_devvp, indirs[1].in_lbn, fs->fs_bsize, 0, 0, 0);
 		bp->b_blkno = fsbtodb(fs, nb);
 		clrbuf(bp);
 		/*
@@ -497,7 +496,8 @@ ffs_balloc_ufs2(struct inode *ip, off_t 
 	 */
 
 	for (i = 1;;) {
-		error = bread(&vp, indirs[i].in_lbn, fs->fs_bsize, NULL, &bp);
+		error = bread(ip->i_devvp, indirs[i].in_lbn, fs->fs_bsize,
+		    NULL, &bp);
 		if (error) {
 			brelse(bp, 0);
 			return error;
@@ -520,7 +520,7 @@ ffs_balloc_ufs2(struct inode *ip, off_t 
 		}
 		nb = newb;
 		*allocblk++ = nb;
-		nbp = getblk(&vp, indirs[i].in_lbn, fs->fs_bsize, 0, 0, 0);
+		nbp = getblk(ip->i_devvp, indirs[i].in_lbn, fs->fs_bsize, 0, 0, 0);
 		nbp->b_blkno = fsbtodb(fs, nb);
 		clrbuf(nbp);
 		/*
@@ -551,7 +551,7 @@ ffs_balloc_ufs2(struct inode *ip, off_t 
 		nb = newb;
 		*allocblk++ = nb;
 		if (bpp != NULL) {
-			nbp = getblk(&vp, lbn, fs->fs_bsize, 0, 0, 0);
+			nbp = getblk(ip->i_devvp, lbn, fs->fs_bsize, 0, 0, 0);
 			nbp->b_blkno = fsbtodb(fs, nb);
 			clrbuf(nbp);
 			*bpp = nbp;
@@ -567,7 +567,7 @@ ffs_balloc_ufs2(struct inode *ip, off_t 
 	}
 	brelse(bp, 0);
 	if (bpp != NULL) {
-		error = bread(&vp, lbn, (int)fs->fs_bsize, NULL, &nbp);
+		error = bread(ip->i_devvp, lbn, (int)fs->fs_bsize, NULL, &nbp);
 		if (error) {
 			brelse(nbp, 0);
 			return error;

Modified: head/usr.sbin/makefs/ffs/ufs_inode.h
==============================================================================
--- head/usr.sbin/makefs/ffs/ufs_inode.h	Thu May 25 21:16:39 2017	(r318901)
+++ head/usr.sbin/makefs/ffs/ufs_inode.h	Thu May 25 21:41:06 2017	(r318902)
@@ -45,9 +45,9 @@ union dinode {
 
 struct inode {
 	ino_t	  	i_number;	/* The identity of the inode. */
+	struct vnode	*i_devvp;	/* vnode pointer (contains fsopts) */
 	struct fs	*i_fs;		/* File system */
 	union dinode	i_din;
-	int		i_fd;		/* File descriptor */
 	uint64_t	i_size;
 };
 


More information about the svn-src-all mailing list