Commit Graph

334 Commits

Author SHA1 Message Date
ad
13df0c89b3 vflush: yield at least every 100ms. PR kern/38034. 2008-02-15 13:06:02 +00:00
ad
70c9f5392a vrevoke: if the vnode is already being cleaned out, then ignore it. We
don't need to do anything. PR kern/27622.
2008-02-05 15:13:25 +00:00
ad
22c6a20ebd Lock v_knlist with the vnode interlock. PR kern/37881. 2008-02-05 14:19:52 +00:00
skrll
f5dc52a3c1 Initialise mnt_renamelock in vfs_rootmountalloc. 2008-02-01 08:53:19 +00:00
ad
a3f53add72 Back out previous to let rump compile. Needs to be handled differently. 2008-01-30 15:00:52 +00:00
ad
4df5af489b vlockstatus: return LK_EXCLOTHER as appropriate, for LFS. XXX 2008-01-30 14:53:41 +00:00
ad
abbfb97dd2 vlockmgr: return EBUSY when trylock fails, not EDEADLK.
Pointed out by yamt@.
2008-01-30 12:33:45 +00:00
ad
25153c3ec9 PR kern/37706 (forced unmount of file systems is unsafe):
- Do reference counting for 'struct mount'. Each vnode associated with a
  mount takes a reference, and in turn the mount takes a reference to the
  vfsops.
- Now that mounts are reference counted, replace the overcomplicated mount
  locking inherited from 4.4BSD with a recursable rwlock.
2008-01-30 11:46:59 +00:00
ad
3490efcc63 Replace struct lock on vnodes with a simpler lock object built on
krwlock_t. This is a step towards removing lockmgr and simplifying
vnode locking. Discussed on tech-kern.
2008-01-30 09:50:19 +00:00
dyoung
a2a7fac20f Don't open-code CIRCLEQ, but use CIRCLEQ_*() macros, instead. 2008-01-28 18:24:05 +00:00
pooka
eb6074e41f Replace vrelel() 010101-mania with a flags parameter. However,
leave flags unimplemented for a while (no change in functionality).
2008-01-27 22:47:31 +00:00
pooka
a8d02d0b1a opt_inet.h is no longer necessary 2008-01-26 22:53:10 +00:00
ad
e0f8c5ca59 vrelel: remove a bogus KASSERT. 2008-01-25 16:59:31 +00:00
ad
6da461f692 Fix broken assertion. 2008-01-24 21:04:12 +00:00
ad
d9231f613d Fix 'panic: dangling vnode'. 2008-01-24 18:31:52 +00:00
ad
1de89e3a92 vclean: fix inverted test. 2008-01-24 17:57:14 +00:00
ad
703069c0e9 specfs changes for PR kern/37717 (raidclose() is no longer called on
shutdown). There are still problems with device access and a PR will be
filed.

- Kill checkalias(). Allow multiple vnodes to reference a single device.

- Don't play dangerous tricks with block vnodes to ensure that only one
  vnode can describe a block device. Instead, prohibit concurrent opens of
  block devices. As a bonus remove the unreliable code that prevents
  multiple file system mounts on the same device. It's no longer needed.

- Track opens by vnode and by device. Issue cdev_close() when the last open
  goes away, instead of abusing vnode::v_usecount to tell if the device is
  open.
2008-01-24 17:32:52 +00:00
ad
95e0feb94e vrevoke: fix a couple of botches. 2008-01-17 19:23:13 +00:00
ad
4eb2a42ae6 Fix v_freelisthd assertion failure during call to vdevdone(). No calling
VOPs without a vnode reference!
2008-01-17 17:28:54 +00:00
ad
231d556f22 - Ignore clean vnodes in vflush(). May fix false EBUSY when unmounting.
- Use vrelel() where v_usecount might become 0. Could fix "vnode sez".
- Add some assertions, fix a lock leak.
2008-01-17 13:06:04 +00:00
pooka
c52c351d09 Terminate mntonname at [1] instead of [0].
fixes kern/37735 by Tobias Nygren
2008-01-10 13:05:01 +00:00
ad
b1a7a7cd93 vget: don't leak a reference if LK_NOWAIT and the vnode has VI_XLOCK set. 2008-01-09 21:29:38 +00:00
ad
0b52913dee Go back to freeing on disk inodes in the inactive routine. It would be
better not to do this, but it rules out potential side effects with softdep.
2008-01-09 16:15:22 +00:00
ad
77e0b2120f Patch up sysctl locking:
- Lock processes, credentials, filehead etc correctly.
- Acquire a read hold on sysctl_treelock if only doing a query.
- Don't wire down the output buffer. It doesn't work correctly and the code
  regularly does long term sleeps with it held - it's not worth it.
- Don't hold locks other than sysctl_lock while doing copyout().
- Drop sysctl_lock while doing copyout / allocating memory in a few places.
- Don't take kernel_lock for sysctl.
- Fix a number of bugs spotted along the way
2008-01-07 16:12:52 +00:00
pooka
d53e261066 valloc -> vnalloc, vfree -> vnfree
Avoids collision with userland valloc(3).

no functional change
ad ok
2008-01-03 01:26:28 +00:00
ad
4a780c9ae2 Merge vmlocking2 to head. 2008-01-02 11:48:20 +00:00
yamt
ee39418409 getnewvnode: remove a homegrown decl. of uvm_vnodeops. 2007-12-01 10:36:47 +00:00
ad
e9e11b98df Use atomics to maintain uvmexp.{anon,exec,file}pages. 2007-11-29 18:07:11 +00:00
pooka
61e8303e9d Remove the "struct lwp *" argument from all VFS and VOP interfaces.
The general trend is to remove it from all kernel interfaces and
this is a start.  In case the calling lwp is desired, curlwp should
be used.

quick consensus on tech-kern
2007-11-26 19:01:26 +00:00
pooka
8e1de16f54 fix comment: suspendsched() removes user process*es* from the runqueue 2007-11-04 17:31:16 +00:00
ad
2d1592ce20 Clear VV_LOCKSWORK from the correct field. 2007-10-23 19:40:53 +00:00
ad
4c92a21547 Remove LOCK_ASSERT(!simple_lock_held(&foo)); 2007-10-11 19:53:37 +00:00
ad
7dad9f7391 Merge from vmlocking:
- Split vnode::v_flag into three fields, depending on field locking.
- simple_lock -> kmutex in a few places.
- Fix some simple locking problems.
2007-10-10 20:42:20 +00:00
hannken
3856acafe2 Update the file system copy-on-write handler.
- Instead of hooking the handler on the specdev of a mounted file system
  hook directly on the `struct mount'.

- Rename from `vn_cow_*' to `fscow_*' and move to `kern/vfs_trans.c'.  Use
  `mount_*specific' instead of clobbering `struct mount' or `struct specinfo'.

- Replace the hand-made reader/writer lock with a krwlock.

- Keep `vn_cow_*' functions and mark as obsolete.

- Welcome to NetBSD 4.99.32 - `struct specinfo' changed size.

Reviewed by: Jason Thorpe <thorpej@netbsd.org>
2007-10-07 13:38:53 +00:00
pooka
3340382aec more vfs_subr -> vfs_subr2 dance for rump:
vwakeup, vinvalbuf, vtruncbuf, vflushbuf, bgetvp, brelvp, reassignbuf
2007-08-14 13:51:31 +00:00
pooka
b4b6be82da do the shuffle: move mount_specificdata stuff from vfs_subr to vfs_subr2 2007-08-09 20:55:30 +00:00
pooka
3de9f5d391 Instead of having lfs muck directly about with vnode free lists,
introduce vrele2(), which allows to release vnodes the way lfs
sometimes wants it:
  + without calling inactive
  + inserting the vnode at the head of the freelist (this is a very
    questionable optimization that isn't even enabled by default,
    but I went along with the same semantics for now)
2007-08-09 08:51:21 +00:00
pooka
3fbf89c648 Initialize size of outsize-of-fs device vnodes also, since they
can migrate to file systems due to checkalias() and cause KASSERT
panics.

fixes nfsroot panic reported by martin
2007-08-06 17:09:11 +00:00
pooka
59f0f4532f Split vfs_subr.c into routines which need much of the kernel
infrastructure (vfs_subr.c) and routines which need little or none
of the kernel infra (vfs_subr2.c).
2007-07-29 14:44:08 +00:00
pooka
abf11c212d Define a new lockmgr flag LK_RESURRECT which can be used in
conjunction with LK_DRAIN.  This has the same effect as LK_DRAIN
except it atomically does NOT mark the lock as drained.  This
guarantees that when we got the lock, we were the last one currently
waiting for the lock.

Use LK_DRAIN|LK_RESURRECT in vclean() to make sure there are no
waiters for the lock.  This should fix behaviour theoretized to be
caused by vfs_subr.c 1.289 which caused vclean() to run into
completion and free the vnode before all lock-waiters had been
processed.  Should therefore fix the "simple_lock: unitialized lock"
problems seen recently.

thanks to Juergen Hannken-Illjes for some analysis of the problem
and Erik Bertelsen for testing
2007-07-29 12:40:37 +00:00
pooka
dff8581037 Print also the topmost flag hex in vprint().
fun fact: this bug was introduced over 10 years ago, so I don't
think anyone has really keenly missed it.
2007-07-29 10:00:15 +00:00
pooka
33f2f6779a minor header cleanup 2007-07-28 08:19:36 +00:00
pooka
af927546de Move vfs_attach(), vfs_detach() and vfs_reinit() from vfs_subr.c
to vfs_init.c.  This permits easier standalone compilation of these
routines.
2007-07-27 14:25:21 +00:00
christos
b50aaed545 - get rid of MFSNAMELEN
- use strlcpy instead of strncpy.
- make sure some uses of statvfs strings are NUL terminated
  XXX: more work needs to be done on that.
2007-07-17 21:14:05 +00:00
pooka
e24b0872a4 Make set_statvfs_info() take a parameter for the vfs name instead
of always retrieving it from mp->mnt_op->vfs_name

christos ok
2007-07-17 11:19:31 +00:00
pooka
1828428de1 Don't drain a vnode's lock when we are cleaning it out. It still
might be used by upper layers in the vnode stack due to exported
lock pointers.  This introduces no difference to the normal case
and works around a problem where a lower layer vnode is cleaned
out before the upper layer due to forced unmount or revoke.  And
for cosmetics, set a vnode's lock export to NULL when it is cleaned
out.

per discussion with Bill Stouder-Studenmund on tech-kern
2007-07-09 11:35:20 +00:00
yamt
da51d139a4 improve post-ubc file overwrite performance in common cases.
ie. when it's safe, actually overwrite blocks rather than doing
read-modify-write.

also fixes PR/33152 and PR/36303.
2007-06-05 12:31:30 +00:00
chs
aba740b225 define a pager flag PGO_RECLAIM, similar to FSYNC_RECLAIM, and use it
to skip unnecessary flushing when layered file system vnodes are recycled.
this also prevents a deadlock with the dodgy LFS putpages routine.
fixes the non-LFS part of PR 36150.
2007-04-16 05:14:54 +00:00
hannken
fc6776f366 Remove now obsolete vn_start_write() and vn_finished_write() and
corresponding flags.

Revert softdep_trackbufs() to its state before vn_start_write() was added.

Remove from struct mount now unneeded flags IMNT_SUSPEND* and
members mnt_writeopcountupper, mnt_writeopcountlower and mnt_leaf.

Welcome to 4.99.17
2007-04-08 11:20:42 +00:00
hannken
0adf7298aa Remove calls to now obsolete vn_start_write() and vn_finished_write(). 2007-04-03 16:11:31 +00:00