[prev in list] [next in list] [prev in thread] [next in thread]
List: freebsd-fs
Subject: System crash while trying to unmount manually ejected USB Flash
From: "Zver Z." <klim_serega () ufps ! chita ! ru>
Date: 2007-05-24 13:42:11
Message-ID: 1180014131.1422.3.camel () XATA ! RU
[Download RAW message or body]
test patch FreeBSD 6.2, (pycckie ya ploho znay engl, esli shto pishite
na mail)
_________________________________________________________________________________
It'is current problem |:-)
_________________________________________________________________________________
--- /sys/kern/vfs_subr.c Mon Dec 4 17:47:53 2006
+++ vfs_subr.c Thu May 17 20:31:58 2007
@@ -1029,8 +1029,10 @@
* enabled under INVARIANTS
*/
BO_LOCK(bo);
- if (bo->bo_numoutput > 0 || bo->bo_dirty.bv_cnt > 0)
- panic("vinvalbuf: dirty bufs");
+ if (bo->bo_numoutput > 0 || bo->bo_dirty.bv_cnt > 0) {
+ printf("bufobj_invalbuf: warning panic not run, error=%d\n", error);
+ flags = 0;
+ }
}
}
/*
_________________________________________________________________________________
panic whith msdosfs on flash(page fault)
_________________________________________________________________________________
--- /sys/fs/msdosfs/msdosfs_vnops.c Mon Mar 13 12:05:13 2006
+++ msdosfs_vnops.c Thu May 17 11:44:23 2007
@@ -1834,7 +1834,9 @@
printf("\tstartcluster %lu, dircluster %lu, diroffset %lu, ",
dep->de_StartCluster, dep->de_dirclust, dep->de_diroffset);
- printf("on dev %s\n", devtoname(dep->de_dev));
+ if (dep->de_dev != NULL) {
+ printf("on dev %s\n", devtoname(dep->de_dev));
+ }
return (0);
}
_________________________________________________________________________________
_________________________________________________________________________________
--- /sys/fs/msdosfs/msdosfs_vfsops.c Wed Dec 20 12:05:30 2006
+++ msdosfs_vfsops.c Wed May 16 21:24:03 2007
@@ -766,8 +766,10 @@
/* If the volume was mounted read/write, mark it clean now. */
if ((pmp->pm_flags & MSDOSFSMNT_RONLY) == 0) {
error = markvoldirty(pmp, 0);
- if (error && (flags & FORCECLOSE) == 0)
+ if (error && (flags & FORCECLOSE) == 0 && (error & ENXIO) == 0)
return (error);
+ if (error & ENXIO)
+ error = 0;
}
#ifdef MSDOSFS_DEBUG
{
_________________________________________________________________________________
_________________________________________________________________________________
--- /sys/ufs/ffs/ffs_vfsops.c Mon May 21 22:06:40 2007
+++ ffs_vfsops.c Mon May 21 22:07:35 2007
@@ -979,10 +979,12 @@
if (fs->fs_ronly == 0) {
fs->fs_clean = fs->fs_flags & (FS_UNCLEAN|FS_NEEDSFSCK) ? 0 : 1;
error = ffs_sbupdate(ump, MNT_WAIT, 0);
- if (error) {
+ if (error && (error & ENXIO) == 0) {
fs->fs_clean = 0;
return (error);
}
+ if (error & ENXIO)
+ error = 0;
}
DROP_GIANT();
g_topology_lock();
_________________________________________________________________________________
_________________________________________________________________________________
--- /sys/kern/vfs_mount.c Wed Oct 25 01:02:39 2006
+++ vfs_mount.c Thu May 17 11:48:49 2007
@@ -1194,6 +1194,10 @@
(flags & MNT_FORCE)) {
error = VFS_UNMOUNT(mp, flags, td);
}
+ if (error & ENXIO) {
+ printf("dounmount: error=%d\n", error);
+ error = VFS_UNMOUNT(mp, 0, td);
+ }
vn_finished_write(mp);
if (error) {
/* Undo cdir/rdir and rootvnode changes made above. */
_________________________________________________________________________________
sorry my english)))
["ffs_vfsops.patch" (ffs_vfsops.patch)]
--- /sys/ufs/ffs/ffs_vfsops.c Mon May 21 22:06:40 2007
+++ ffs_vfsops.c Mon May 21 22:07:35 2007
@@ -979,10 +979,12 @@
if (fs->fs_ronly == 0) {
fs->fs_clean = fs->fs_flags & (FS_UNCLEAN|FS_NEEDSFSCK) ? 0 : 1;
error = ffs_sbupdate(ump, MNT_WAIT, 0);
- if (error) {
+ if (error && (error & ENXIO) == 0) {
fs->fs_clean = 0;
return (error);
}
+ if (error & ENXIO)
+ error = 0;
}
DROP_GIANT();
g_topology_lock();
["msdosfs_vfsops.patch" (msdosfs_vfsops.patch)]
--- /sys/fs/msdosfs/msdosfs_vfsops.c Wed Dec 20 12:05:30 2006
+++ msdosfs_vfsops.c Wed May 16 21:24:03 2007
@@ -766,8 +766,10 @@
/* If the volume was mounted read/write, mark it clean now. */
if ((pmp->pm_flags & MSDOSFSMNT_RONLY) == 0) {
error = markvoldirty(pmp, 0);
- if (error && (flags & FORCECLOSE) == 0)
+ if (error && (flags & FORCECLOSE) == 0 && (error & ENXIO) == 0)
return (error);
+ if (error & ENXIO)
+ error = 0;
}
#ifdef MSDOSFS_DEBUG
{
["msdosfs_vnops.patch" (msdosfs_vnops.patch)]
--- /sys/fs/msdosfs/msdosfs_vnops.c Mon Mar 13 12:05:13 2006
+++ msdosfs_vnops.c Thu May 17 11:44:23 2007
@@ -1834,7 +1834,9 @@
printf("\tstartcluster %lu, dircluster %lu, diroffset %lu, ",
dep->de_StartCluster, dep->de_dirclust, dep->de_diroffset);
- printf("on dev %s\n", devtoname(dep->de_dev));
+ if (dep->de_dev != NULL) {
+ printf("on dev %s\n", devtoname(dep->de_dev));
+ }
return (0);
}
["vfs_mount.patch" (vfs_mount.patch)]
--- /sys/kern/vfs_mount.c Wed Oct 25 01:02:39 2006
+++ vfs_mount.c Thu May 17 11:48:49 2007
@@ -1194,6 +1194,10 @@
(flags & MNT_FORCE)) {
error = VFS_UNMOUNT(mp, flags, td);
}
+ if (error & ENXIO) {
+ printf("dounmount: error=%d\n", error);
+ error = VFS_UNMOUNT(mp, 0, td);
+ }
vn_finished_write(mp);
if (error) {
/* Undo cdir/rdir and rootvnode changes made above. */
["vfs_subr.patch" (vfs_subr.patch)]
--- /sys/kern/vfs_subr.c Mon Dec 4 17:47:53 2006
+++ vfs_subr.c Thu May 17 20:31:58 2007
@@ -1029,8 +1029,10 @@
* enabled under INVARIANTS
*/
BO_LOCK(bo);
- if (bo->bo_numoutput > 0 || bo->bo_dirty.bv_cnt > 0)
- panic("vinvalbuf: dirty bufs");
+ if (bo->bo_numoutput > 0 || bo->bo_dirty.bv_cnt > 0) {
+ printf("bufobj_invalbuf: warning panic not run, error=%d\n", error);
+ flags = 0;
+ }
}
}
/*
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic