read only actual cylinder group data (fs_cgsize) instead of fs_bsize.
SCCS-vsn: sys/ufs/ffs/ffs_alloc.c 2.21
SCCS-vsn: sys/ufs/lfs/lfs_alloc.c 2.21
-/* ffs_alloc.c 2.20 82/12/17 */
+/* ffs_alloc.c 2.21 83/01/14 */
#include "../h/param.h"
#include "../h/systm.h"
#include "../h/param.h"
#include "../h/systm.h"
}
/*
* 3: brute force search
}
/*
* 3: brute force search
+ * Note that we start at i == 3, since 0 was checked initially,
+ * and 1 and 2 are always checked in the quadratic rehash.
- for (i = 0; i < fs->fs_ncg; i++) {
+ for (i = 3; i < fs->fs_ncg; i++) {
result = (*allocator)(ip, cg, 0, size);
if (result)
return (result);
result = (*allocator)(ip, cg, 0, size);
if (result)
return (result);
/* cannot extend across a block boundry */
return (NULL);
}
/* cannot extend across a block boundry */
return (NULL);
}
- bp = bread(ip->i_dev, fsbtodb(fs, cgtod(fs, cg)), (int)fs->fs_bsize);
+ bp = bread(ip->i_dev, fsbtodb(fs, cgtod(fs, cg)), (int)fs->fs_cgsize);
cgp = bp->b_un.b_cg;
if (bp->b_flags & B_ERROR || cgp->cg_magic != CG_MAGIC) {
brelse(bp);
cgp = bp->b_un.b_cg;
if (bp->b_flags & B_ERROR || cgp->cg_magic != CG_MAGIC) {
brelse(bp);
fs = ip->i_fs;
if (fs->fs_cs(fs, cg).cs_nbfree == 0 && size == fs->fs_bsize)
return (NULL);
fs = ip->i_fs;
if (fs->fs_cs(fs, cg).cs_nbfree == 0 && size == fs->fs_bsize)
return (NULL);
- bp = bread(ip->i_dev, fsbtodb(fs, cgtod(fs, cg)), (int)fs->fs_bsize);
+ bp = bread(ip->i_dev, fsbtodb(fs, cgtod(fs, cg)), (int)fs->fs_cgsize);
cgp = bp->b_un.b_cg;
if (bp->b_flags & B_ERROR || cgp->cg_magic != CG_MAGIC) {
brelse(bp);
return (NULL);
}
cgp = bp->b_un.b_cg;
if (bp->b_flags & B_ERROR || cgp->cg_magic != CG_MAGIC) {
brelse(bp);
return (NULL);
}
+ if (cgp->cg_cs.cs_nbfree == 0 && size == fs->fs_bsize)
+ return (NULL);
cgp->cg_time = time.tv_sec;
if (size == fs->fs_bsize) {
bno = alloccgblk(fs, cgp, bpref);
cgp->cg_time = time.tv_sec;
if (size == fs->fs_bsize) {
bno = alloccgblk(fs, cgp, bpref);
fs = ip->i_fs;
if (fs->fs_cs(fs, cg).cs_nifree == 0)
return (NULL);
fs = ip->i_fs;
if (fs->fs_cs(fs, cg).cs_nifree == 0)
return (NULL);
- bp = bread(ip->i_dev, fsbtodb(fs, cgtod(fs, cg)), (int)fs->fs_bsize);
+ bp = bread(ip->i_dev, fsbtodb(fs, cgtod(fs, cg)), (int)fs->fs_cgsize);
cgp = bp->b_un.b_cg;
if (bp->b_flags & B_ERROR || cgp->cg_magic != CG_MAGIC) {
brelse(bp);
return (NULL);
}
cgp = bp->b_un.b_cg;
if (bp->b_flags & B_ERROR || cgp->cg_magic != CG_MAGIC) {
brelse(bp);
return (NULL);
}
+ if (cgp->cg_cs.cs_nifree == 0)
+ return (NULL);
cgp->cg_time = time.tv_sec;
if (ipref) {
ipref %= fs->fs_ipg;
cgp->cg_time = time.tv_sec;
if (ipref) {
ipref %= fs->fs_ipg;
printf("bad block %d, ino %d\n", bno, ip->i_number);
return;
}
printf("bad block %d, ino %d\n", bno, ip->i_number);
return;
}
- bp = bread(ip->i_dev, fsbtodb(fs, cgtod(fs, cg)), (int)fs->fs_bsize);
+ bp = bread(ip->i_dev, fsbtodb(fs, cgtod(fs, cg)), (int)fs->fs_cgsize);
cgp = bp->b_un.b_cg;
if (bp->b_flags & B_ERROR || cgp->cg_magic != CG_MAGIC) {
brelse(bp);
cgp = bp->b_un.b_cg;
if (bp->b_flags & B_ERROR || cgp->cg_magic != CG_MAGIC) {
brelse(bp);
panic("ifree: range");
}
cg = itog(fs, ino);
panic("ifree: range");
}
cg = itog(fs, ino);
- bp = bread(ip->i_dev, fsbtodb(fs, cgtod(fs, cg)), (int)fs->fs_bsize);
+ bp = bread(ip->i_dev, fsbtodb(fs, cgtod(fs, cg)), (int)fs->fs_cgsize);
cgp = bp->b_un.b_cg;
if (bp->b_flags & B_ERROR || cgp->cg_magic != CG_MAGIC) {
brelse(bp);
cgp = bp->b_un.b_cg;
if (bp->b_flags & B_ERROR || cgp->cg_magic != CG_MAGIC) {
brelse(bp);
-/* lfs_alloc.c 2.20 82/12/17 */
+/* lfs_alloc.c 2.21 83/01/14 */
#include "../h/param.h"
#include "../h/systm.h"
#include "../h/param.h"
#include "../h/systm.h"
}
/*
* 3: brute force search
}
/*
* 3: brute force search
+ * Note that we start at i == 3, since 0 was checked initially,
+ * and 1 and 2 are always checked in the quadratic rehash.
- for (i = 0; i < fs->fs_ncg; i++) {
+ for (i = 3; i < fs->fs_ncg; i++) {
result = (*allocator)(ip, cg, 0, size);
if (result)
return (result);
result = (*allocator)(ip, cg, 0, size);
if (result)
return (result);
/* cannot extend across a block boundry */
return (NULL);
}
/* cannot extend across a block boundry */
return (NULL);
}
- bp = bread(ip->i_dev, fsbtodb(fs, cgtod(fs, cg)), (int)fs->fs_bsize);
+ bp = bread(ip->i_dev, fsbtodb(fs, cgtod(fs, cg)), (int)fs->fs_cgsize);
cgp = bp->b_un.b_cg;
if (bp->b_flags & B_ERROR || cgp->cg_magic != CG_MAGIC) {
brelse(bp);
cgp = bp->b_un.b_cg;
if (bp->b_flags & B_ERROR || cgp->cg_magic != CG_MAGIC) {
brelse(bp);
fs = ip->i_fs;
if (fs->fs_cs(fs, cg).cs_nbfree == 0 && size == fs->fs_bsize)
return (NULL);
fs = ip->i_fs;
if (fs->fs_cs(fs, cg).cs_nbfree == 0 && size == fs->fs_bsize)
return (NULL);
- bp = bread(ip->i_dev, fsbtodb(fs, cgtod(fs, cg)), (int)fs->fs_bsize);
+ bp = bread(ip->i_dev, fsbtodb(fs, cgtod(fs, cg)), (int)fs->fs_cgsize);
cgp = bp->b_un.b_cg;
if (bp->b_flags & B_ERROR || cgp->cg_magic != CG_MAGIC) {
brelse(bp);
return (NULL);
}
cgp = bp->b_un.b_cg;
if (bp->b_flags & B_ERROR || cgp->cg_magic != CG_MAGIC) {
brelse(bp);
return (NULL);
}
+ if (cgp->cg_cs.cs_nbfree == 0 && size == fs->fs_bsize)
+ return (NULL);
cgp->cg_time = time.tv_sec;
if (size == fs->fs_bsize) {
bno = alloccgblk(fs, cgp, bpref);
cgp->cg_time = time.tv_sec;
if (size == fs->fs_bsize) {
bno = alloccgblk(fs, cgp, bpref);
fs = ip->i_fs;
if (fs->fs_cs(fs, cg).cs_nifree == 0)
return (NULL);
fs = ip->i_fs;
if (fs->fs_cs(fs, cg).cs_nifree == 0)
return (NULL);
- bp = bread(ip->i_dev, fsbtodb(fs, cgtod(fs, cg)), (int)fs->fs_bsize);
+ bp = bread(ip->i_dev, fsbtodb(fs, cgtod(fs, cg)), (int)fs->fs_cgsize);
cgp = bp->b_un.b_cg;
if (bp->b_flags & B_ERROR || cgp->cg_magic != CG_MAGIC) {
brelse(bp);
return (NULL);
}
cgp = bp->b_un.b_cg;
if (bp->b_flags & B_ERROR || cgp->cg_magic != CG_MAGIC) {
brelse(bp);
return (NULL);
}
+ if (cgp->cg_cs.cs_nifree == 0)
+ return (NULL);
cgp->cg_time = time.tv_sec;
if (ipref) {
ipref %= fs->fs_ipg;
cgp->cg_time = time.tv_sec;
if (ipref) {
ipref %= fs->fs_ipg;
printf("bad block %d, ino %d\n", bno, ip->i_number);
return;
}
printf("bad block %d, ino %d\n", bno, ip->i_number);
return;
}
- bp = bread(ip->i_dev, fsbtodb(fs, cgtod(fs, cg)), (int)fs->fs_bsize);
+ bp = bread(ip->i_dev, fsbtodb(fs, cgtod(fs, cg)), (int)fs->fs_cgsize);
cgp = bp->b_un.b_cg;
if (bp->b_flags & B_ERROR || cgp->cg_magic != CG_MAGIC) {
brelse(bp);
cgp = bp->b_un.b_cg;
if (bp->b_flags & B_ERROR || cgp->cg_magic != CG_MAGIC) {
brelse(bp);
panic("ifree: range");
}
cg = itog(fs, ino);
panic("ifree: range");
}
cg = itog(fs, ino);
- bp = bread(ip->i_dev, fsbtodb(fs, cgtod(fs, cg)), (int)fs->fs_bsize);
+ bp = bread(ip->i_dev, fsbtodb(fs, cgtod(fs, cg)), (int)fs->fs_cgsize);
cgp = bp->b_un.b_cg;
if (bp->b_flags & B_ERROR || cgp->cg_magic != CG_MAGIC) {
brelse(bp);
cgp = bp->b_un.b_cg;
if (bp->b_flags & B_ERROR || cgp->cg_magic != CG_MAGIC) {
brelse(bp);