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 <[EMAIL PROTECTED]> -----
Date: Fri, 23 Sep 2005 20:50:17 +0000 (GMT)
From: Xin LI <[EMAIL PROTECTED]>
To: [EMAIL PROTECTED]
Subject: [src] cvs commit: src/sys/ufs/ufs ufs_inode.c
X-Sieve: CMU Sieve 2.2
Delivered-To: [EMAIL PROTECTED]
In-Reply-To: <[EMAIL PROTECTED]>
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.
pgp21zYSCNsH2.pgp
Description: PGP signature
