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-head
mailing list