correct DIAGNOSTIC code for duplicated inodes in a segment and su_nbytes.
This commit is contained in:
parent
60ad876a43
commit
275b3a47a2
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: lfs_segment.c,v 1.82 2002/09/27 15:38:06 provos Exp $ */
|
/* $NetBSD: lfs_segment.c,v 1.83 2002/12/12 12:28:13 yamt Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1999, 2000 The NetBSD Foundation, Inc.
|
* Copyright (c) 1999, 2000 The NetBSD Foundation, Inc.
|
||||||
|
@ -71,7 +71,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
__KERNEL_RCSID(0, "$NetBSD: lfs_segment.c,v 1.82 2002/09/27 15:38:06 provos Exp $");
|
__KERNEL_RCSID(0, "$NetBSD: lfs_segment.c,v 1.83 2002/12/12 12:28:13 yamt Exp $");
|
||||||
|
|
||||||
#define ivndebug(vp,str) printf("ino %d: %s\n",VTOI(vp)->i_number,(str))
|
#define ivndebug(vp,str) printf("ino %d: %s\n",VTOI(vp)->i_number,(str))
|
||||||
|
|
||||||
|
@ -973,13 +973,25 @@ lfs_writeinode(struct lfs *fs, struct segment *sp, struct inode *ip)
|
||||||
* is actually written.
|
* is actually written.
|
||||||
*/
|
*/
|
||||||
if (daddr != LFS_UNUSED_DADDR) {
|
if (daddr != LFS_UNUSED_DADDR) {
|
||||||
LFS_SEGENTRY(sup, fs, dtosn(fs, daddr), bp);
|
u_int32_t oldsn = dtosn(fs, daddr);
|
||||||
#ifdef DIAGNOSTIC
|
#ifdef DIAGNOSTIC
|
||||||
if (sup->su_nbytes < DINODE_SIZE * (1 + sp->ndupino)) {
|
int ndupino = (sp->seg_number == oldsn) ? sp->ndupino : 0;
|
||||||
|
#endif
|
||||||
|
LFS_SEGENTRY(sup, fs, oldsn, bp);
|
||||||
|
#ifdef DIAGNOSTIC
|
||||||
|
if (sup->su_nbytes + DINODE_SIZE * ndupino < DINODE_SIZE) {
|
||||||
printf("lfs_writeinode: negative bytes "
|
printf("lfs_writeinode: negative bytes "
|
||||||
"(segment %d short by %d)\n",
|
"(segment %d short by %d, "
|
||||||
|
"oldsn=%u, cursn=%u, daddr=%d, su_nbytes=%u, "
|
||||||
|
"ndupino=%d)\n",
|
||||||
dtosn(fs, daddr),
|
dtosn(fs, daddr),
|
||||||
(int)DINODE_SIZE - sup->su_nbytes);
|
(int)DINODE_SIZE * (1 - sp->ndupino)
|
||||||
|
- sup->su_nbytes,
|
||||||
|
(unsigned int)oldsn,
|
||||||
|
(unsigned int)sp->seg_number,
|
||||||
|
(int)daddr,
|
||||||
|
(unsigned int)sup->su_nbytes,
|
||||||
|
sp->ndupino);
|
||||||
panic("lfs_writeinode: negative bytes");
|
panic("lfs_writeinode: negative bytes");
|
||||||
sup->su_nbytes = DINODE_SIZE;
|
sup->su_nbytes = DINODE_SIZE;
|
||||||
}
|
}
|
||||||
|
@ -1274,13 +1286,18 @@ lfs_updatemeta(struct segment *sp)
|
||||||
* and location.
|
* and location.
|
||||||
*/
|
*/
|
||||||
if (daddr > 0) {
|
if (daddr > 0) {
|
||||||
|
u_int32_t oldsn = dtosn(fs, daddr);
|
||||||
|
#ifdef DIAGNOSTIC
|
||||||
|
int ndupino = (sp->seg_number == oldsn) ?
|
||||||
|
sp->ndupino : 0;
|
||||||
|
#endif
|
||||||
if (lbn >= 0 && lbn < NDADDR)
|
if (lbn >= 0 && lbn < NDADDR)
|
||||||
osize = ip->i_lfs_fragsize[lbn];
|
osize = ip->i_lfs_fragsize[lbn];
|
||||||
else
|
else
|
||||||
osize = fs->lfs_bsize;
|
osize = fs->lfs_bsize;
|
||||||
LFS_SEGENTRY(sup, fs, dtosn(fs, daddr), bp);
|
LFS_SEGENTRY(sup, fs, oldsn, bp);
|
||||||
#ifdef DIAGNOSTIC
|
#ifdef DIAGNOSTIC
|
||||||
if (sup->su_nbytes < osize + DINODE_SIZE * sp->ndupino) {
|
if (sup->su_nbytes + DINODE_SIZE * ndupino < osize) {
|
||||||
printf("lfs_updatemeta: negative bytes "
|
printf("lfs_updatemeta: negative bytes "
|
||||||
"(segment %d short by %d)\n",
|
"(segment %d short by %d)\n",
|
||||||
dtosn(fs, daddr),
|
dtosn(fs, daddr),
|
||||||
|
@ -1288,8 +1305,9 @@ lfs_updatemeta(struct segment *sp)
|
||||||
printf("lfs_updatemeta: ino %d, lbn %d, "
|
printf("lfs_updatemeta: ino %d, lbn %d, "
|
||||||
"addr = 0x%x\n", VTOI(sp->vp)->i_number,
|
"addr = 0x%x\n", VTOI(sp->vp)->i_number,
|
||||||
lbn, daddr);
|
lbn, daddr);
|
||||||
|
printf("lfs_updatemeta: ndupino=%d\n", ndupino);
|
||||||
panic("lfs_updatemeta: negative bytes");
|
panic("lfs_updatemeta: negative bytes");
|
||||||
sup->su_nbytes = osize + DINODE_SIZE * sp->ndupino;
|
sup->su_nbytes = osize;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef DEBUG_SU_NBYTES
|
#ifdef DEBUG_SU_NBYTES
|
||||||
|
|
Loading…
Reference in New Issue