|
1 | | -/* $NetBSD: lfs_rfw.c,v 1.38 2025/10/06 20:58:48 perseant Exp $ */ |
| 1 | +/* $NetBSD: lfs_rfw.c,v 1.39 2025/10/14 00:13:31 perseant Exp $ */ |
2 | 2 |
|
3 | 3 | /*- |
4 | 4 | * Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc. |
|
30 | 30 | */ |
31 | 31 |
|
32 | 32 | #include <sys/cdefs.h> |
33 | | -__KERNEL_RCSID(0, "$NetBSD: lfs_rfw.c,v 1.38 2025/10/06 20:58:48 perseant Exp $"); |
| 33 | +__KERNEL_RCSID(0, "$NetBSD: lfs_rfw.c,v 1.39 2025/10/14 00:13:31 perseant Exp $"); |
34 | 34 |
|
35 | 35 | #if defined(_KERNEL_OPT) |
36 | 36 | #include "opt_quota.h" |
@@ -399,7 +399,7 @@ update_inoblk(struct lfs *fs, daddr_t offset, kauth_cred_t cred, |
399 | 399 | IFILE *ifp; |
400 | 400 | SEGUSE *sup; |
401 | 401 | unsigned i, num; |
402 | | - uint32_t gen; |
| 402 | + uint32_t gen, osn, nsn; |
403 | 403 | char *buf; |
404 | 404 |
|
405 | 405 | devvp = VTOI(fs->lfs_ivnode)->i_devvp; |
@@ -473,27 +473,20 @@ update_inoblk(struct lfs *fs, daddr_t offset, kauth_cred_t cred, |
473 | 473 | /* Record change in location */ |
474 | 474 | LFS_IENTRY(ifp, fs, lfs_dino_getinumber(fs, dip), ibp); |
475 | 475 | daddr = lfs_if_getdaddr(fs, ifp); |
476 | | - lfs_if_setdaddr(fs, ifp, LFS_DBTOFSB(fs, dbp->b_blkno)); |
| 476 | + lfs_if_setdaddr(fs, ifp, offset); |
477 | 477 | error = LFS_BWRITE_LOG(ibp); /* Ifile */ |
478 | 478 | /* And do segment accounting */ |
479 | | - if (lfs_dtosn(fs, daddr) |
480 | | - != lfs_dtosn(fs, LFS_DBTOFSB(fs, dbp->b_blkno))) { |
| 479 | + osn = lfs_dtosn(fs, daddr); |
| 480 | + nsn = lfs_dtosn(fs, offset); |
| 481 | + if (DADDR_IS_BAD(daddr) || osn != nsn) { |
481 | 482 | if (!DADDR_IS_BAD(daddr)) { |
482 | | - LFS_SEGENTRY(sup, fs, |
483 | | - lfs_dtosn(fs, daddr), ibp); |
| 483 | + LFS_SEGENTRY(sup, fs, osn, ibp); |
484 | 484 | sup->su_nbytes -= DINOSIZE(fs); |
485 | | - LFS_WRITESEGENTRY(sup, fs, |
486 | | - lfs_dtosn(fs, daddr), |
487 | | - ibp); |
| 485 | + LFS_WRITESEGENTRY(sup, fs, osn, ibp); |
488 | 486 | } |
489 | | - LFS_SEGENTRY(sup, fs, lfs_dtosn(fs, |
490 | | - LFS_DBTOFSB(fs, dbp->b_blkno)), |
491 | | - ibp); |
| 487 | + LFS_SEGENTRY(sup, fs, nsn, ibp); |
492 | 488 | sup->su_nbytes += DINOSIZE(fs); |
493 | | - LFS_WRITESEGENTRY(sup, fs, |
494 | | - lfs_dtosn(fs, LFS_DBTOFSB(fs, |
495 | | - dbp->b_blkno)), |
496 | | - ibp); |
| 489 | + LFS_WRITESEGENTRY(sup, fs, nsn, ibp); |
497 | 490 | } |
498 | 491 | vput(vp); |
499 | 492 | } |
|
0 commit comments