From: | Xin LI <delphij@xxxxxxxxxxxxx> |
Date: | Sat, 24 Sep 2005 04:55:40 +0800 |
Hi, Here is a patch that I have just committed to FreeBSD -CURRENT. A similiar problem exists in DragonFly as well, which should be corrected. The patch adapted for DragonFly can be found at: http://www.delphij.net/patch-ufs-dfly ----- Forwarded message from Xin LI <delphij@xxxxxxxxxxx> ----- Date: Fri, 23 Sep 2005 20:50:17 +0000 (GMT) From: Xin LI <delphij@xxxxxxxxxxx> Subject: [src] cvs commit: src/sys/ufs/ufs ufs_inode.c X-Sieve: CMU Sieve 2.2 Delivered-To: delphij@xxxxxxxxxxx In-Reply-To: <200509232049.j8NKnvIj024351@xxxxxxxxxxxxxxxxxxx> X-Virus-Scanned: amavisd-new at frontfree.net delphij 2005-09-23 20:49:57 UTC FreeBSD src repository Modified files: sys/ufs/ufs ufs_inode.c Log: Restore a historical ufs_inactive behavior that has been changed in rev. 1.40 of ufs_inode.c, which allows an inode being truncated even when the filesystem itself is marked RDONLY. A subsequent call of UFS_TRUNCATE (ffs_truncate) would panic the system as it asserts that it can only be called when the filesystem is mounted read-write (same changeset, rev. 1.74 of sys/ufs/ffs/ffs_inode.c). Because ffs_mount() already takes care of sync'ing the filesystem to disk before being downgraded to readonly, it appears to be more desirable that we should not permit this sort of writes to disk. This change would fix a panic that occours when read-only mounted a corrupted filesystem and doing some file operations. MT6/5/4 candidate Reviewed by: mckusick Revision Changes Path 1.64 +1 -1 src/sys/ufs/ufs/ufs_inode.c Index: src/sys/ufs/ufs/ufs_inode.c diff -u src/sys/ufs/ufs/ufs_inode.c:1.63 src/sys/ufs/ufs/ufs_inode.c:1.64 --- src/sys/ufs/ufs/ufs_inode.c:1.63 Thu Mar 17 11:58:43 2005 +++ src/sys/ufs/ufs/ufs_inode.c Fri Sep 23 20:49:57 2005 @@ -83,7 +83,7 @@ goto out; if (ip->i_effnlink == 0 && DOINGSOFTDEP(vp)) softdep_releasefile(ip); - if (ip->i_nlink <= 0) { + if (ip->i_nlink <= 0 && (vp->v_mount->mnt_flag & MNT_RDONLY) == 0) { (void) vn_write_suspend_wait(vp, NULL, V_WAIT); #ifdef QUOTA if (!getinoquota(ip)) ----- End forwarded message ----- Cheers, -- Xin LI <delphij frontfree net> http://www.delphij.net/ See complete headers for GPG key and other information.
Attachment:
pgp00004.pgp
Description: PGP signature