diff options
author | kib <kib@FreeBSD.org> | 2008-09-16 11:51:06 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2008-09-16 11:51:06 +0000 |
commit | f6863a9ef79ec34cd371070704d592a2b5c019c1 (patch) | |
tree | 916cd048737fbe3376fc7973f694d424abd09e34 /sys/ufs/ffs/ffs_vfsops.c | |
parent | 0488506405edd848b205c59066a7f0b5d53e55e7 (diff) | |
download | FreeBSD-src-f6863a9ef79ec34cd371070704d592a2b5c019c1.zip FreeBSD-src-f6863a9ef79ec34cd371070704d592a2b5c019c1.tar.gz |
When attempt is made to suspend a filesystem that is already syspended,
wait until the current suspension is lifted instead of silently returning
success immediately. The consequences of calling vfs_write() resume when
not owning the suspension are not well-defined at best.
Add the vfs_susp_clean() mount method to be called from
vfs_write_resume(). Set it to process_deferred_inactive() for ffs, and
stop calling it manually.
Add the thread flag TDP_IGNSUSP that allows to bypass the suspension
point in the vn_start_write. It is intended for use by VFS in the
situations where the suspender want to do some i/o requiring calls to
vn_start_write(), and this i/o cannot be done later.
Reviewed by: tegge
In collaboration with: pho
MFC after: 1 month
Diffstat (limited to 'sys/ufs/ffs/ffs_vfsops.c')
-rw-r--r-- | sys/ufs/ffs/ffs_vfsops.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/sys/ufs/ffs/ffs_vfsops.c b/sys/ufs/ffs/ffs_vfsops.c index 93e0b48..86b3f60 100644 --- a/sys/ufs/ffs/ffs_vfsops.c +++ b/sys/ufs/ffs/ffs_vfsops.c @@ -105,6 +105,7 @@ static struct vfsops ufs_vfsops = { .vfs_uninit = ffs_uninit, .vfs_unmount = ffs_unmount, .vfs_vget = ffs_vget, + .vfs_susp_clean = process_deferred_inactive, }; VFS_SET(ufs_vfsops, ufs, 0); |