Exit with a non-zero status upon a block allocation failure.
The old way of just returning could result in a file system extremely likely to panic the kernel. The warning printed wouldn't help much since tools invoking newfs(8), e.g., mdmfs(8), couldn't detect the error. PR: bin/55078 MFC after: 1 week
This commit is contained in:
parent
449f11fac6
commit
244fca1ffa
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=118493
@ -789,17 +789,17 @@ alloc(int size, int mode)
|
|||||||
sblock.fs_cgsize);
|
sblock.fs_cgsize);
|
||||||
if (acg.cg_magic != CG_MAGIC) {
|
if (acg.cg_magic != CG_MAGIC) {
|
||||||
printf("cg 0: bad magic number\n");
|
printf("cg 0: bad magic number\n");
|
||||||
return (0);
|
exit(38);
|
||||||
}
|
}
|
||||||
if (acg.cg_cs.cs_nbfree == 0) {
|
if (acg.cg_cs.cs_nbfree == 0) {
|
||||||
printf("first cylinder group ran out of space\n");
|
printf("first cylinder group ran out of space\n");
|
||||||
return (0);
|
exit(39);
|
||||||
}
|
}
|
||||||
for (d = 0; d < acg.cg_ndblk; d += sblock.fs_frag)
|
for (d = 0; d < acg.cg_ndblk; d += sblock.fs_frag)
|
||||||
if (isblock(&sblock, cg_blksfree(&acg), d / sblock.fs_frag))
|
if (isblock(&sblock, cg_blksfree(&acg), d / sblock.fs_frag))
|
||||||
goto goth;
|
goto goth;
|
||||||
printf("internal error: can't find block in cyl 0\n");
|
printf("internal error: can't find block in cyl 0\n");
|
||||||
return (0);
|
exit(40);
|
||||||
goth:
|
goth:
|
||||||
blkno = fragstoblks(&sblock, d);
|
blkno = fragstoblks(&sblock, d);
|
||||||
clrblock(&sblock, cg_blksfree(&acg), blkno);
|
clrblock(&sblock, cg_blksfree(&acg), blkno);
|
||||||
|
Loading…
Reference in New Issue
Block a user