SCCS-vsn: sys/ufs/ffs/ffs_alloc.c 2.25
SCCS-vsn: sys/ufs/lfs/lfs_alloc.c 2.25
-/* ffs_alloc.c 2.24 83/03/21 */
+/* ffs_alloc.c 2.25 83/05/21 */
#include "../h/param.h"
#include "../h/systm.h"
#include "../h/param.h"
#include "../h/systm.h"
if (u.u_uid != 0 && freespace(fs, fs->fs_minfree) <= 0)
goto nospace;
#ifdef QUOTA
if (u.u_uid != 0 && freespace(fs, fs->fs_minfree) <= 0)
goto nospace;
#ifdef QUOTA
- if (chkdq(ip, (long)((unsigned)size/DEV_BSIZE), 0))
- return(NULL);
+ u.u_error = chkdq(ip, (long)btodb(size), 0);
+ if (u.u_error)
+ return (NULL);
#endif
if (bpref >= fs->fs_size)
bpref = 0;
#endif
if (bpref >= fs->fs_size)
bpref = 0;
(u_long (*)())alloccg);
if (bno <= 0)
goto nospace;
(u_long (*)())alloccg);
if (bno <= 0)
goto nospace;
+ ip->i_blocks += btodb(size);
+ ip->i_flag |= IUPD|ICHG;
bp = getblk(ip->i_dev, fsbtodb(fs, bno), size);
clrbuf(bp);
return (bp);
bp = getblk(ip->i_dev, fsbtodb(fs, bno), size);
clrbuf(bp);
return (bp);
panic("realloccg: bad bprev");
}
#ifdef QUOTA
panic("realloccg: bad bprev");
}
#ifdef QUOTA
- if (chkdq(ip, (long)((unsigned)(nsize-osize)/DEV_BSIZE), 0))
- return(NULL);
+ u.u_error = chkdq(ip, (long)btodb(nsize - osize), 0);
+ if (u.u_error)
+ return (NULL);
#endif
cg = dtog(fs, bprev);
bno = fragextend(ip, cg, (long)bprev, osize, nsize);
#endif
cg = dtog(fs, bprev);
bno = fragextend(ip, cg, (long)bprev, osize, nsize);
} while (brealloc(bp, nsize) == 0);
bp->b_flags |= B_DONE;
bzero(bp->b_un.b_addr + osize, (unsigned)nsize - osize);
} while (brealloc(bp, nsize) == 0);
bp->b_flags |= B_DONE;
bzero(bp->b_un.b_addr + osize, (unsigned)nsize - osize);
+ ip->i_blocks += btodb(nsize - osize);
+ ip->i_flag |= IUPD|ICHG;
return (bp);
}
if (bpref >= fs->fs_size)
return (bp);
}
if (bpref >= fs->fs_size)
bzero(bp->b_un.b_addr + osize, (unsigned)nsize - osize);
brelse(obp);
free(ip, bprev, (off_t)osize);
bzero(bp->b_un.b_addr + osize, (unsigned)nsize - osize);
brelse(obp);
free(ip, bprev, (off_t)osize);
+ ip->i_blocks += btodb(nsize - osize);
+ ip->i_flag |= IUPD|ICHG;
if (fs->fs_cstotal.cs_nifree == 0)
goto noinodes;
#ifdef QUOTA
if (fs->fs_cstotal.cs_nifree == 0)
goto noinodes;
#ifdef QUOTA
- if (chkiq(pip->i_dev, (struct inode *)NULL, u.u_uid, 0))
- return(NULL);
+ u.u_error = chkiq(pip->i_dev, (struct inode *)NULL, u.u_uid, 0);
+ if (u.u_error)
+ return (NULL);
#endif
if (ipref >= fs->fs_ncg * fs->fs_ipg)
ipref = 0;
#endif
if (ipref >= fs->fs_ncg * fs->fs_ipg)
ipref = 0;
ip->i_mode, ip->i_number, fs->fs_fsmnt);
panic("ialloc: dup alloc");
}
ip->i_mode, ip->i_number, fs->fs_fsmnt);
panic("ialloc: dup alloc");
}
+ if (ip->i_blocks) { /* XXX */
+ printf("free inode %s/%d had %d blocks\n",
+ fs->fs_fsmnt, ino, ip->i_blocks);
+ ip->i_blocks = 0;
+ }
return (ip);
noinodes:
fserr(fs, "out of inodes");
return (ip);
noinodes:
fserr(fs, "out of inodes");
-/* lfs_alloc.c 2.24 83/03/21 */
+/* lfs_alloc.c 2.25 83/05/21 */
#include "../h/param.h"
#include "../h/systm.h"
#include "../h/param.h"
#include "../h/systm.h"
if (u.u_uid != 0 && freespace(fs, fs->fs_minfree) <= 0)
goto nospace;
#ifdef QUOTA
if (u.u_uid != 0 && freespace(fs, fs->fs_minfree) <= 0)
goto nospace;
#ifdef QUOTA
- if (chkdq(ip, (long)((unsigned)size/DEV_BSIZE), 0))
- return(NULL);
+ u.u_error = chkdq(ip, (long)btodb(size), 0);
+ if (u.u_error)
+ return (NULL);
#endif
if (bpref >= fs->fs_size)
bpref = 0;
#endif
if (bpref >= fs->fs_size)
bpref = 0;
(u_long (*)())alloccg);
if (bno <= 0)
goto nospace;
(u_long (*)())alloccg);
if (bno <= 0)
goto nospace;
+ ip->i_blocks += btodb(size);
+ ip->i_flag |= IUPD|ICHG;
bp = getblk(ip->i_dev, fsbtodb(fs, bno), size);
clrbuf(bp);
return (bp);
bp = getblk(ip->i_dev, fsbtodb(fs, bno), size);
clrbuf(bp);
return (bp);
panic("realloccg: bad bprev");
}
#ifdef QUOTA
panic("realloccg: bad bprev");
}
#ifdef QUOTA
- if (chkdq(ip, (long)((unsigned)(nsize-osize)/DEV_BSIZE), 0))
- return(NULL);
+ u.u_error = chkdq(ip, (long)btodb(nsize - osize), 0);
+ if (u.u_error)
+ return (NULL);
#endif
cg = dtog(fs, bprev);
bno = fragextend(ip, cg, (long)bprev, osize, nsize);
#endif
cg = dtog(fs, bprev);
bno = fragextend(ip, cg, (long)bprev, osize, nsize);
} while (brealloc(bp, nsize) == 0);
bp->b_flags |= B_DONE;
bzero(bp->b_un.b_addr + osize, (unsigned)nsize - osize);
} while (brealloc(bp, nsize) == 0);
bp->b_flags |= B_DONE;
bzero(bp->b_un.b_addr + osize, (unsigned)nsize - osize);
+ ip->i_blocks += btodb(nsize - osize);
+ ip->i_flag |= IUPD|ICHG;
return (bp);
}
if (bpref >= fs->fs_size)
return (bp);
}
if (bpref >= fs->fs_size)
bzero(bp->b_un.b_addr + osize, (unsigned)nsize - osize);
brelse(obp);
free(ip, bprev, (off_t)osize);
bzero(bp->b_un.b_addr + osize, (unsigned)nsize - osize);
brelse(obp);
free(ip, bprev, (off_t)osize);
+ ip->i_blocks += btodb(nsize - osize);
+ ip->i_flag |= IUPD|ICHG;
if (fs->fs_cstotal.cs_nifree == 0)
goto noinodes;
#ifdef QUOTA
if (fs->fs_cstotal.cs_nifree == 0)
goto noinodes;
#ifdef QUOTA
- if (chkiq(pip->i_dev, (struct inode *)NULL, u.u_uid, 0))
- return(NULL);
+ u.u_error = chkiq(pip->i_dev, (struct inode *)NULL, u.u_uid, 0);
+ if (u.u_error)
+ return (NULL);
#endif
if (ipref >= fs->fs_ncg * fs->fs_ipg)
ipref = 0;
#endif
if (ipref >= fs->fs_ncg * fs->fs_ipg)
ipref = 0;
ip->i_mode, ip->i_number, fs->fs_fsmnt);
panic("ialloc: dup alloc");
}
ip->i_mode, ip->i_number, fs->fs_fsmnt);
panic("ialloc: dup alloc");
}
+ if (ip->i_blocks) { /* XXX */
+ printf("free inode %s/%d had %d blocks\n",
+ fs->fs_fsmnt, ino, ip->i_blocks);
+ ip->i_blocks = 0;
+ }
return (ip);
noinodes:
fserr(fs, "out of inodes");
return (ip);
noinodes:
fserr(fs, "out of inodes");