vBulletin Search Engine Optimization
| |||||||
| Register | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| ||||
| The following diff instruments the buffer cache (as well as code directly related) to use the new daddr64_t type for logical blocks, allowing file system metadata to be stored beyond the 1T limit. Tested on macppc, i386 and amd64. Affects every file system, and in particular: udf, cd9660, msdosfs, ext2fs and ffs. Testing appreciated. -p. Index: share/man/man9/VOP_LOOKUP.9 ================================================== ================= RCS file: /cvs/src/share/man/man9/VOP_LOOKUP.9,v retrieving revision 1.17 diff -u -p -r1.17 VOP_LOOKUP.9 --- share/man/man9/VOP_LOOKUP.9 4 Oct 2006 14:04:06 -0000 1.17 +++ share/man/man9/VOP_LOOKUP.9 4 Oct 2006 19:37:07 -0000 @@ -54,7 +54,7 @@ .Ft int .Fo VOP_BMAP .Fa "struct vnode *vp" -.Fa "daddr_t bn" +.Fa "daddr64_t bn" .Fa "struct vnode **vpp" .Fa "daddr64_t *bnp" .Fa "int *runp" Index: share/man/man9/buffercache.9 ================================================== ================= RCS file: /cvs/src/share/man/man9/buffercache.9,v retrieving revision 1.3 diff -u -p -r1.3 buffercache.9 --- share/man/man9/buffercache.9 30 Nov 2004 14:48:00 -0000 1.3 +++ share/man/man9/buffercache.9 4 Oct 2006 19:37:07 -0000 @@ -124,11 +124,11 @@ .Sh SYNOPSIS .In sys/buf.h .Ft int -.Fn bread "struct vnode *vp" "daddr_t blkno" "int size" \ +.Fn bread "struct vnode *vp" "daddr64_t blkno" "int size" \ "struct ucred *cred" "struct buf **bpp" .Ft int -.Fn breadn "struct vnode *vp" "daddr_t blkno" "int size" \ -"daddr_t rablks[]" "int rasizes[]" "int nrablks" \ +.Fn breadn "struct vnode *vp" "daddr64_t blkno" "int size" \ +"daddr64_t rablks[]" "int rasizes[]" "int nrablks" \ "struct ucred *cred" "struct buf **bpp" .Ft int .Fn bwrite "struct buf *bp" @@ -137,12 +137,12 @@ .Ft void .Fn bdwrite "struct buf *bp" .Ft struct buf * -.Fn getblk "struct vnode *vp" "daddr_t blkno" "int size" \ +.Fn getblk "struct vnode *vp" "daddr64_t blkno" "int size" \ "int slpflag" "int slptimeo" .Ft struct buf * .Fn geteblk "int size" .Ft struct buf * -.Fn incore "struct vnode *vp" "daddr_t blkno" +.Fn incore "struct vnode *vp" "daddr64_t blkno" .Ft void .Fn allocbuf "struct buf *bp" "int size" .Ft void Index: sys/isofs/cd9660/cd9660_vnops.c ================================================== ================= RCS file: /cvs/src/sys/isofs/cd9660/cd9660_vnops.c,v retrieving revision 1.35 diff -u -p -r1.35 cd9660_vnops.c --- sys/isofs/cd9660/cd9660_vnops.c 3 Oct 2006 19:49:06 -0000 1.35 +++ sys/isofs/cd9660/cd9660_vnops.c 4 Oct 2006 19:37:07 -0000 @@ -351,7 +351,7 @@ cd9660_read(v) #define MAX_RA 32 if (ci->ci_lastr + 1 == lbn) { struct ra { - daddr_t blks[MAX_RA]; + daddr64_t blks[MAX_RA]; int sizes[MAX_RA]; } *ra; int i; Index: sys/isofs/udf/udf_vnops.c ================================================== ================= RCS file: /cvs/src/sys/isofs/udf/udf_vnops.c,v retrieving revision 1.20 diff -u -p -r1.20 udf_vnops.c --- sys/isofs/udf/udf_vnops.c 9 Jul 2006 04:23:09 -0000 1.20 +++ sys/isofs/udf/udf_vnops.c 4 Oct 2006 19:37:08 -0000 @@ -55,7 +55,7 @@ #include <isofs/udf/udf.h> #include <isofs/udf/udf_extern.h> -int udf_bmap_internal(struct unode *, off_t, daddr_t *, uint32_t *); +int udf_bmap_internal(struct unode *, off_t, daddr64_t *, uint32_t *); int (**udf_vnodeop_p)(void *); struct vnodeopv_entry_desc udf_vnodeop_entries[] = { @@ -970,7 +970,7 @@ udf_bmap(void *v) } */ *ap = v; struct unode *up; uint32_t max_size; - daddr_t lsector; + daddr64_t lsector; int error; up = VTOU(ap->a_vp); @@ -1224,7 +1224,7 @@ udf_readatoffset(struct unode *up, int * struct file_entry *fentry = NULL; struct buf *bp1; uint32_t max_size; - daddr_t sector; + daddr64_t sector; int error; ump = up->u_ump; @@ -1265,7 +1265,7 @@ udf_readatoffset(struct unode *up, int * * block. */ int -udf_bmap_internal(struct unode *up, off_t offset, daddr_t *sector, +udf_bmap_internal(struct unode *up, off_t offset, daddr64_t *sector, uint32_t *max_size) { struct umount *ump; Index: sys/kern/vfs_bio.c ================================================== ================= RCS file: /cvs/src/sys/kern/vfs_bio.c,v retrieving revision 1.84 diff -u -p -r1.84 vfs_bio.c --- sys/kern/vfs_bio.c 28 Aug 2006 16:15:29 -0000 1.84 +++ sys/kern/vfs_bio.c 4 Oct 2006 19:37:08 -0000 @@ -101,7 +101,7 @@ struct pool bufpool; #define binsheadfree(bp, dp) TAILQ_INSERT_HEAD(dp, bp, b_freelist) #define binstailfree(bp, dp) TAILQ_INSERT_TAIL(dp, bp, b_freelist) -static __inline struct buf *bio_doread(struct vnode *, daddr_t, int, int); +static __inline struct buf *bio_doread(struct vnode *, daddr64_t, int, int); struct buf *getnewbuf(int, int, int *); /* @@ -232,7 +232,7 @@ bufinit(void) } static __inline struct buf * -bio_doread(struct vnode *vp, daddr_t blkno, int size, int async) +bio_doread(struct vnode *vp, daddr64_t blkno, int size, int async) { struct buf *bp; @@ -261,7 +261,7 @@ bio_doread(struct vnode *vp, daddr_t blk * This algorithm described in Bach (p.54). */ int -bread(struct vnode *vp, daddr_t blkno, int size, struct ucred *cred, +bread(struct vnode *vp, daddr64_t blkno, int size, struct ucred *cred, struct buf **bpp) { struct buf *bp; @@ -278,7 +278,7 @@ bread(struct vnode *vp, daddr_t blkno, i * Trivial modification to the breada algorithm presented in Bach (p.55). */ int -breadn(struct vnode *vp, daddr_t blkno, int size, daddr_t rablks[], +breadn(struct vnode *vp, daddr64_t blkno, int size, daddr64_t rablks[], int rasizes[], int nrablks, struct ucred *cred, struct buf **bpp) { struct buf *bp; @@ -571,7 +571,7 @@ brelse(struct buf *bp) * chain. If it's there, return a pointer to it, unless it's marked invalid. */ struct buf * -incore(struct vnode *vp, daddr_t blkno) +incore(struct vnode *vp, daddr64_t blkno) { struct buf *bp; @@ -594,7 +594,7 @@ incore(struct vnode *vp, daddr_t blkno) * cached blocks be of the correct size. */ struct buf * -getblk(struct vnode *vp, daddr_t blkno, int size, int slpflag, int slptimeo) +getblk(struct vnode *vp, daddr64_t blkno, int size, int slpflag, int slptimeo) { struct bufhashhdr *bh; struct buf *bp; Index: sys/kern/vfs_cluster.c ================================================== ================= RCS file: /cvs/src/sys/kern/vfs_cluster.c,v retrieving revision 1.35 diff -u -p -r1.35 vfs_cluster.c --- sys/kern/vfs_cluster.c 3 Oct 2006 19:49:06 -0000 1.35 +++ sys/kern/vfs_cluster.c 4 Oct 2006 19:37:08 -0000 @@ -45,10 +45,11 @@ void cluster_callback(struct buf *); struct buf *cluster_newbuf(struct vnode *, struct buf *, long, daddr64_t, - daddr_t, long, int); -struct buf *cluster_rbuild(struct vnode *, u_quad_t, struct buf *, daddr_t, + daddr64_t, long, int); +struct buf *cluster_rbuild(struct vnode *, u_quad_t, struct buf *, daddr64_t, daddr64_t, long, int, long); -void cluster_wbuild(struct vnode *, struct buf *, long, daddr_t, int, daddr_t); +void cluster_wbuild(struct vnode *, struct buf *, long, daddr64_t, int, + daddr64_t); struct cluster_save *cluster_collectbufs(struct vnode *, struct cluster_info *, struct buf *); @@ -96,11 +97,10 @@ int doclusterraz = 0; */ int cluster_read(struct vnode *vp, struct cluster_info *ci, u_quad_t filesize, - daddr_t lblkno, long size, struct ucred *cred, struct buf **bpp) + daddr64_t lblkno, long size, struct ucred *cred, struct buf **bpp) { struct buf *bp, *rbp; - daddr64_t blkno; - daddr_t ioblkno; + daddr64_t blkno, ioblkno; long flags; int error, num_ra, alreadyincore; @@ -260,11 +260,11 @@ skip_readahead: */ struct buf * cluster_rbuild(struct vnode *vp, u_quad_t filesize, struct buf *bp, - daddr_t lbn, daddr64_t blkno, long size, int run, long flags) + daddr64_t lbn, daddr64_t blkno, long size, int run, long flags) { struct cluster_save *b_save; struct buf *tbp; - daddr_t bn; + daddr64_t bn; int i, inc; #ifdef DIAGNOSTIC @@ -359,7 +359,7 @@ cluster_rbuild(struct vnode *vp, u_quad_ */ struct buf * cluster_newbuf(struct vnode *vp, struct buf *bp, long flags, daddr64_t blkno, - daddr_t lblkno, long size, int run) + daddr64_t lblkno, long size, int run) { if (!bp) { bp = getblk(vp, lblkno, size, 0, 0); @@ -460,7 +460,7 @@ void cluster_write(struct buf *bp, struct cluster_info *ci, u_quad_t filesize) { struct vnode *vp; - daddr_t lbn; + daddr64_t lbn; int maxclen, cursize; vp = bp->b_vp; @@ -568,7 +568,7 @@ cluster_write(struct buf *bp, struct clu */ void cluster_wbuild(struct vnode *vp, struct buf *last_bp, long size, - daddr_t start_lbn, int len, daddr_t lbn) + daddr64_t start_lbn, int len, daddr64_t lbn) { struct cluster_save *b_save; struct buf *bp, *tbp; @@ -723,7 +723,7 @@ cluster_collectbufs(struct vnode *vp, st struct buf *last_bp) { struct cluster_save *buflist; - daddr_t lbn; + daddr64_t lbn; int i, len; len = ci->ci_lastw - ci->ci_cstart + 1; Index: sys/kern/vnode_if.c ================================================== ================= RCS file: /cvs/src/sys/kern/vnode_if.c,v retrieving revision 1.45 diff -u -p -r1.45 vnode_if.c --- sys/kern/vnode_if.c 3 Oct 2006 19:53:15 -0000 1.45 +++ sys/kern/vnode_if.c 4 Oct 2006 19:37:09 -0000 @@ -961,8 +961,8 @@ struct vnodeop_desc vop_bmap_desc = { NULL, }; -int VOP_BMAP(struct vnode *vp, daddr_t bn, struct vnode **vpp, daddr64_t *bnp, - int *runp) +int VOP_BMAP(struct vnode *vp, daddr64_t bn, struct vnode **vpp, + daddr64_t *bnp, int *runp) { struct vop_bmap_args a; a.a_desc = VDESC(vop_bmap); Index: sys/kern/vnode_if.src ================================================== ================= RCS file: /cvs/src/sys/kern/vnode_if.src,v retrieving revision 1.30 diff -u -p -r1.30 vnode_if.src --- sys/kern/vnode_if.src 3 Oct 2006 19:49:06 -0000 1.30 +++ sys/kern/vnode_if.src 4 Oct 2006 19:37:09 -0000 @@ -396,7 +396,7 @@ vop_unlock { vop_bmap { IN SHOULDBELOCKED struct vnode *vp; - IN daddr_t bn; + IN daddr64_t bn; OUT struct vnode **vpp; IN daddr64_t *bnp; OUT int *runp; Index: sys/miscfs/specfs/spec_vnops.c ================================================== ================= RCS file: /cvs/src/sys/miscfs/specfs/spec_vnops.c,v retrieving revision 1.35 diff -u -p -r1.35 spec_vnops.c --- sys/miscfs/specfs/spec_vnops.c 12 Jul 2006 19:56:18 -0000 1.35 +++ sys/miscfs/specfs/spec_vnops.c 4 Oct 2006 19:37:09 -0000 @@ -236,7 +236,7 @@ spec_read(v) register struct uio *uio = ap->a_uio; struct proc *p = uio->uio_procp; struct buf *bp; - daddr_t bn, nextbn; + daddr64_t bn, nextbn; long bsize, bscale, ssize; struct partinfo dpart; int n, on, majordev; Index: sys/msdosfs/msdosfs_vnops.c ================================================== ================= RCS file: /cvs/src/sys/msdosfs/msdosfs_vnops.c,v retrieving revision 1.57 diff -u -p -r1.57 msdosfs_vnops.c --- sys/msdosfs/msdosfs_vnops.c 3 Oct 2006 19:49:06 -0000 1.57 +++ sys/msdosfs/msdosfs_vnops.c 4 Oct 2006 19:37:10 -0000 @@ -469,9 +469,7 @@ msdosfs_read(v) int isadir; uint32_t n; long on; - daddr64_t lbn; - daddr_t rablock; - daddr_t rablkno; + daddr64_t lbn, rablock, rablkno; struct buf *bp; struct vnode *vp = ap->a_vp; struct denode *dep = VTODE(vp); Index: sys/sys/buf.h ================================================== ================= RCS file: /cvs/src/sys/sys/buf.h,v retrieving revision 1.50 diff -u -p -r1.50 buf.h --- sys/sys/buf.h 3 Oct 2006 19:49:06 -0000 1.50 +++ sys/sys/buf.h 4 Oct 2006 19:37:10 -0000 @@ -87,7 +87,7 @@ struct buf { caddr_t b_addr; /* Memory, superblocks, indirect etc. */ } b_un; void *b_saveaddr; /* Original b_addr for physio. */ - daddr_t b_lblkno; /* Logical block number. */ + daddr64_t b_lblkno; /* Logical block number. */ daddr64_t b_blkno; /* Underlying physical block number. */ /* Function to call upon completion. * Will be called at splbio(). */ @@ -226,19 +226,18 @@ void bawrite(struct buf *); void bdwrite(struct buf *); void biodone(struct buf *); int biowait(struct buf *); -int bread(struct vnode *, daddr_t, int, - struct ucred *, struct buf **); -int breadn(struct vnode *, daddr_t, int, daddr_t *, int *, int, - struct ucred *, struct buf **); +int bread(struct vnode *, daddr64_t, int, struct ucred *, struct buf **); +int breadn(struct vnode *, daddr64_t, int, daddr64_t *, int *, int, + struct ucred *, struct buf **); void brelse(struct buf *); void bremfree(struct buf *); void bufinit(void); void buf_dirty(struct buf *); void buf_undirty(struct buf *); int bwrite(struct buf *); -struct buf *getblk(struct vnode *, daddr_t, int, int, int); +struct buf *getblk(struct vnode *, daddr64_t, int, int, int); struct buf *geteblk(int); -struct buf *incore(struct vnode *, daddr_t); +struct buf *incore(struct vnode *, daddr64_t); void minphys(struct buf *bp); int physio(void (*strategy)(struct buf *), struct buf *bp, dev_t dev, @@ -292,7 +291,7 @@ buf_countdeps(struct buf *bp, int i, int } int cluster_read(struct vnode *, struct cluster_info *, - u_quad_t, daddr_t, long, struct ucred *, struct buf **); + u_quad_t, daddr64_t, long, struct ucred *, struct buf **); void cluster_write(struct buf *, struct cluster_info *, u_quad_t); __END_DECLS Index: sys/sys/vnode_if.h ================================================== ================= RCS file: /cvs/src/sys/sys/vnode_if.h,v retrieving revision 1.42 diff -u -p -r1.42 vnode_if.h --- sys/sys/vnode_if.h 3 Oct 2006 19:53:15 -0000 1.42 +++ sys/sys/vnode_if.h 4 Oct 2006 19:37:10 -0000 @@ -337,13 +337,13 @@ int VOP_UNLOCK(struct vnode *, int, stru struct vop_bmap_args { struct vnodeop_desc *a_desc; struct vnode *a_vp; - daddr_t a_bn; + daddr64_t a_bn; struct vnode **a_vpp; daddr64_t *a_bnp; int *a_runp; }; extern struct vnodeop_desc vop_bmap_desc; -int VOP_BMAP(struct vnode *, daddr_t, struct vnode **, daddr64_t *, int *); +int VOP_BMAP(struct vnode *, daddr64_t, struct vnode **, daddr64_t *, int *); struct vop_print_args { struct vnodeop_desc *a_desc; Index: sys/ufs/ext2fs/ext2fs_readwrite.c ================================================== ================= RCS file: /cvs/src/sys/ufs/ext2fs/ext2fs_readwrite.c,v retrieving revision 1.17 diff -u -p -r1.17 ext2fs_readwrite.c --- sys/ufs/ext2fs/ext2fs_readwrite.c 30 Apr 2005 13:58:55 -0000 1.17 +++ sys/ufs/ext2fs/ext2fs_readwrite.c 4 Oct 2006 19:37:10 -0000 @@ -76,7 +76,7 @@ ext2fs_read(v) struct uio *uio; struct m_ext2fs *fs; struct buf *bp; - ufs1_daddr_t lbn, nextlbn; + daddr64_t lbn, nextlbn; off_t bytesinfile; long size, xfersize, blkoffset; int error; Index: sys/ufs/ufs/ufs_readwrite.c ================================================== ================= RCS file: /cvs/src/sys/ufs/ufs/ufs_readwrite.c,v retrieving revision 1.28 diff -u -p -r1.28 ufs_readwrite.c --- sys/ufs/ufs/ufs_readwrite.c 28 Dec 2005 20:48:18 -0000 1.28 +++ sys/ufs/ufs/ufs_readwrite.c 4 Oct 2006 19:37:10 -0000 @@ -76,7 +76,7 @@ READ(void *v) struct uio *uio; FS *fs; struct buf *bp; - daddr_t lbn, nextlbn; + daddr64_t lbn, nextlbn; off_t bytesinfile; long size, xfersize, blkoffset; mode_t mode; |