Commit Graph

233 Commits

Author SHA1 Message Date
mycroft bbb6842922 In nfs_link(), check for a cross-device mount *before* looking in the
v_data field.
1997-03-05 02:08:06 +00:00
fvdl a94614a50f Use ALIGNED_POINTER to see whether mbuf data needs to be realigned. 1997-02-24 23:26:20 +00:00
fvdl d4b4c37b39 Cast pointer to u_long, not int, when doing the alignment check.
Fixes warnings on the Alpha. Needs a better solution.
1997-02-22 23:33:05 +00:00
fvdl 9abd6715f6 Fixes from BSDI (thanks go to Keith Bostic). Original RCS message:
date: 1997/02/10 18:41:15;  author: cp;  state: Exp;  lines: +8 -2
Make nfs_realign go away on sparc and add functionality to nfsm_disct.

===
[XXX this introduces an ifdef __i386__, see the comment. Should be changed]
1997-02-22 03:11:12 +00:00
fvdl 37986aa09a Fixes from BSDI (thanks go to Keith Bostic). Original RCS messages:
date: 1996/07/23 17:14:46;  author: donn;  state: Exp;  lines: +6 -4
Be sure to push out the last page of the file before truncating it.

date: 1996/10/14 22:41:20;  author: donn;  state: Exp;  lines: +2 -2
From Chris: Nfs_link() called vput() on the wrong vnode when aborting
from a cross-device link, which could (and did) lead to crashes.

date: 1996/10/24 16:43:43;  author: pjd;  state: Exp;  lines: +6 -2
Return EOPNOTSUPP when trying to do a setattr with flags.

===

Also (from BSDI too, but the RCS message did not quite describe the change
to this particular file well): move the EROFS a bit further down to
let VOP_ACCESS do it's work and return an 'expected' error value to
a possible layered filesystem.
1997-02-22 03:08:47 +00:00
fvdl 03fd36b882 Fixes from BSDI (thanks go to Keith Bostic). Original RCS messages:
date: 1997/02/10 18:41:14;  author: cp;  state: Exp;  lines: +110 -46
Make nfs_realign go away on sparc and add functionality to nfsm_disct.
1997-02-22 03:03:03 +00:00
fvdl dce1770311 Fixes from BSDI (thanks go to Keith Bostic). Original RCS messages:
date: 1995/11/30 20:37:03;  author: cp;  state: Exp;  lines: +25 -14
Change splsoftclock() to splnet();
Make nfsrv_getstream create two copies of data when
splitting up an mbuf rather than two references to the
same external buffer. The symptom this fixes is client
hangs.

date: 1997/02/10 18:41:13;  author: cp;  state: Exp;  lines: +4 -1
Make nfs_realign go away on sparc and add functionality to nfsm_disct.
1997-02-22 02:59:08 +00:00
fvdl 2958b47104 Fixes from BSDI (thanks go to Keith Bostic). Original RCS message:
date: 1996/11/20 20:02:54;  author: pjd;  state: Exp;  lines: +7 -4
In nfsrv_access(), if VOP_ACCESS() returns an error and the
error == EPERM or its not the owner doing the access, return the error.
1997-02-22 02:56:01 +00:00
fvdl 78d0ef4390 Fixes from BSDI (thanks go to Keith Bostic). Original RCS messages:
date: 1995/11/30 20:37:53;  author: cp;  state: Exp;  lines: +3 -3
Change splsoftclock() to splnet();
Make nfsrv_getstream create two copies of data when
splitting up an mbuf rather than two references to the
same external buffer. The symptom this fixes is client
hangs.

date: 1996/10/16 00:06:05;  author: ewv;  state: Exp;  lines: +5 -3
Clear pending signal when an unmount fails, this allows us another chance
at the umount after a short sleep. The fixes a problem where /usr is
mounted via nqnfs and the system hangs on shutdown since the umount()
always fails with EBUSY (inetd is still busy on usr) and since we don't
clear the signal we end up stuck looping and never give inetd a chance to
catch its SIGKILL.

date: 1996/10/23 18:22:14;  author: donn;  state: Exp;  lines: +12 -7
Kirk's changes to prevent races when unmounting.  (1) Unmount()
and vfs_unmountall() now call vfs_busy() so that they participates
in the mount structure locking scheme.  Dounmount() calls vfs_unbusy()
to unlock things, and makes sure to wake up waiters if there's an
error.  (2) The MFS and NQNFS daemons also now use vfs_busy() when
unmounting filesystems.  Kirk restructured the code so that a
successful unmount by another process won't leave the possibility
that a daemon might reference a mount structure that has been freed.
1997-02-22 02:51:47 +00:00
fvdl c7a919199a Silently clear NFSMNT_NOCONN if it's a TCP mount. 1997-02-22 02:48:26 +00:00
fvdl 7a970115da Fixes from BSDI (thanks go to Keith Bostic). Original RCS messages:
date: 1996/09/06 03:00:31;  author: donn;  state: Exp;  lines: +1 -2
Because NFS doesn't implement vnode locking, nfs_inactive() doesn't really
have the vnode locked and hence it can't reliably access the vnode after
it performs a blocking operation.  We remove one blocking call and push
the no-op VOP_UNLOCK higher so that we don't access the vnode after we
delete the sillyrename file.  This should prevent crashes we've seen in
which the vnode turned into a UFS vnode and caused a panic in ufs_unlock()
when we tried to 'unlock' it.

date: 1996/09/25 19:15:21;  author: cp;  state: Exp;  lines: +4 -0
Kirk's change to not corrupt files after a delete.

date: 1996/11/08 19:53:45;  author: donn;  state: Exp;  lines: +16 -4
Krik's change to solve the paradox that vclean() calls nfs_inactive()
with VXLOCK set on the vnode, and nfs_inactive() was calling vget()
to get a reference on the vnode, which in turn hung on VXLOCK.
Nfs_inactive() now checks v_usecount to make sure that the vnode
is not coming from vclean() before it does a vget().
1997-02-22 02:45:48 +00:00
fvdl 744438b408 Don't set sillyrename field to 0 for directories, as it's in a union with
the head of the cookie list. Fixes PR 3215, fix supplied by
Hiroshi Tezuka <tezuka@trc.rwcp.or.jp>. Should also fix M_NFSDIROFF
memory leak.
1997-02-12 17:26:56 +00:00
fvdl c76913c26f Move vnode_pager_uncache to a better spot in nfsrv_remove. Also use it
in nfsrv_rename, if the 2nd argument is an existing file and will thus
be removed.
1997-02-10 12:20:49 +00:00
fvdl be787cc073 * Fix some bugs in NQNFS (malformed RPC requests, no directory lease eviction)
* Avoid possible NULL ptr ref in nfs_reply
* Don't ever try to sillyrename directories (from FreeBSD)
1997-02-09 21:19:04 +00:00
fvdl 64fcae7bcb * Make sure a new socket is created when switching to/from NOCONN with
a mount
* Add extra printf statements to hopefully get some more info on lockups,
  specifically when a send error is ignored.
1997-02-04 21:33:19 +00:00
thorpej 604572daf0 This file is now obsolete. 1997-01-31 19:11:31 +00:00
fvdl ffffefac59 nfsrv_readdirplus also suffered from the off-by-one loop problem; fix it too. 1997-01-31 16:12:26 +00:00
fvdl 5710775a55 Fix order error in loop condition which could cause a crash in nfsrv_readdir().
Fixes PR #3170
1997-01-31 09:09:43 +00:00
thorpej 647fa23dc4 - Add nfs_mountroot to nfs_vfsops.
- Only attempt to mount NFS root on a DV_IFNET class device.
- If nfs_boot_init() failes, return the error code to the caller.
1997-01-31 03:00:31 +00:00
thorpej dc33841893 NFSCLIENT -> NFS. 1997-01-31 02:58:48 +00:00
thorpej 2ec3e70ff4 - Don't look for a "suitable interface"; we're now given the name of the
network interface to use.
- If any part of the NFS root mount process fails, don't panic.
  Simply return the appropriate error and let the caller recover.
1997-01-31 02:57:31 +00:00
cgd 90688fce27 Change the second and third args to struct vfsops' (*vfs_mount)() to
'const char *', and 'void *', respectively.  The second arg is taken directly
from user arguments, and is const there, so must be const in the prototypes
and functions.  The third arg is also taken directly from user arguments.
It doesn't have to be changed, but since it's cleaner to keep the type
the same as the user arg's type, and I'm already making the 'const char *'
change...
1996-12-22 10:10:12 +00:00
fvdl 6913afc057 Give permission to the owner of the file to preserve semantics only
in the relevant cases (read, write). Fixes PR 3017.
1996-12-11 00:01:56 +00:00
mycroft c1de76e30b Allocate real malloc types for NFS, rather than using M_TEMP. 1996-12-10 10:07:22 +00:00
fvdl 2914743038 Comment change in previous made for some bad english.. 1996-12-09 11:31:11 +00:00
fvdl 46795a244d Move '#ifdef NFSSERVER' back to the right spot; NQNFS datastructures need
to be initialized on both the client and the server side. Remove misleading
comment about this being just server stuff.
1996-12-09 10:46:20 +00:00
thorpej f02e8b3cf0 Make NFSSERVER work without NFSCLIENT. This is achieved by splitting
the client and server/shared data initialization into separate functions,
and calling the server/shared initialization directly from main().
Problem noted in PR #1308 (Kenneth Stailey) and PR #1780 (Chris Demetriou).
Fix suggested in PR #1780 by Chris Demetriou, and munged a bit by me,
and OK'd by Frank van der Linden <fvdl@netbsd.org>.
1996-12-03 00:22:43 +00:00
thorpej aa25de69d1 NFS performance improvement from Doug Rabson/FreeBSD:
Improve the queuing algorithms used by NFS' asynchronous i/o.  The
existing mechanism uses a global queue for some buffers and the
vp->b_dirtyblkhd queue for others.  This turns sequential writes into
randomly ordered writes to the server, affecting both read and write
performance.  The existing mechanism also copes badly with hung
servers, tending to block accesses to other servers when all the iods
are waiting for a hung server.

The new mechanism uses a queue for each mount point.  All asynchronous
i/o goes through this queue which preserves the ordering of requests.
A simple mechanism ensures that the iods are shared out fairly between
active mount points.

Reviewed/integrated/approved by Frank van der Linden <fvdl@netbsd.org>
1996-12-02 22:55:39 +00:00
cgd ce53653783 make the namei struct members ni_dirp and ni_next, and the componentname
struct member cn_nameptr 'const', since they should never be used to
modify the path name.  (Only the pathname buffer, cn_pnbuf, should be
modified.)  Propagate the const poisoning to code that uses the namei
and componentname structs.
1996-10-25 23:13:58 +00:00
fvdl 735944405b Enhancements from Matthias Drochner:
- Try V3 first for diskless booting. Fall back to V2 if V3 fails.
	- optionally (option NFS_BOOT_TCP) try a TCP mount first
	  for diskless booting. Fall back to UDP if it fails.
	- Enable switching between UDP and TCP for remounts.
1996-10-20 13:13:22 +00:00
christos bcf4552fb1 revert kprintf changes 1996-10-13 01:39:03 +00:00
christos 117a51c5a5 printf -> kprintf, sprintf -> ksprintf 1996-10-10 23:31:17 +00:00
mycroft 2bc736661a Implement poll(2). 1996-09-07 12:40:22 +00:00
mycroft c52352c819 Add a set of generic file system operations that most file systems use.
Also, fix some time stamp bogosities.
1996-09-01 23:47:48 +00:00
thorpej 5404d54edb Another %lx -> %x for ntohl() 1996-08-14 03:47:42 +00:00
cgd 2af08e028e print result of ntohl/htonl as a long. 1996-07-10 18:43:23 +00:00
fvdl 90b2034c7c Use the right time for v3 setattr operation. 1996-07-07 12:25:47 +00:00
fvdl 88eff7ea92 Start XIDs at a value based on the current time, not 0. This avoids nasty
XID confusions with servers that cache them over a long period and
with clients that reboot quickly.

Problems: because of the sanity check that is done by comparing the system
time with filesystem time, XIDs will start at 0 until root is mounted,
which means it isn't completely safe for diskless setups. But it's clearly
better than it was. It would also be cleaner if all XID handling (more
generally, all RPC handling) within the kernel went through the
same functions.
1996-07-07 12:23:49 +00:00
fvdl 0f6afee9a7 Remove bogus check on record length < NFS_MINPACKET.
(From Guy Harris via Rick Macklem).
1996-07-02 23:21:15 +00:00
fvdl 1e8262b3d6 Don't mistake a non-async block that needs to be commited for an
interrupted write.
1996-07-02 16:03:47 +00:00
fvdl 2f1b74d9f0 Always call vnode_pager_uncache when removing a file in the server
(same as in sys_unlink()).
1996-07-01 11:16:03 +00:00
fvdl b27bafebd5 We're only handling uio with iovcnt == 1, so don't ever attempt to increment
uio_iov, this will get us into nasty trouble. (Thanks to Matthias Drochner for
tracking this down).
1996-07-01 10:22:47 +00:00
pk 6e8ba625ef Ignore the mountpoint's `v_usecount' in nfs_unmount() if MNT_FORCE is on.
This takes care of two related problems:
	- `umount -f' wouldn't work if someone's working directory is
	  the filesystem root.
	- vfs_unmountall() would complain about a busy `/' on a
	  diskless setup.
1996-06-24 10:26:40 +00:00
cgd d73abf41aa avoid unnecessary checks of m_get/MGET/etc.'s return values. When
they're called with M_WAIT, they are defined to never return NULL.
1996-06-14 22:21:12 +00:00
cgd d9d0cc229c fix two bugs (the latter potentially fatal) in xdr_string_encode():
(1) if length needed was > MCLBYTES, an mbuf would be lost, and
(2) the wrong check was being used to determine if MCLGET succeeded.
1996-06-07 00:48:10 +00:00
fvdl e4145cb406 Align things right in NWDELAYHASH (for the Alpha). This fixes crashes in
the server code. From John Birell.
1996-05-27 11:22:31 +00:00
fvdl 2847784948 * Make mounts with symlinks work (needed for direct mounts with amd). PR #1917
* Never change the NQNFS flag and/or version when just doing an update mount.
  Fixes a problem that made diskless booting impossible under some
  circumstances.
1996-05-23 22:47:27 +00:00
mycroft 49d52c9b1c Pass a proc pointer down to the usrreq and pcbbind functions for PRU_ATTACH, PRU_BIND and
PRU_CONTROL.  The usrreq interface really needs to be split up, but this will have to wait.
Remove SS_PRIV completely.
1996-05-22 13:54:55 +00:00
mycroft 261382c331 Change VOP_UPDATE() semantics:
* Make 2nd and 3rd args timespecs, not timevals.
* Consistently pass a Boolean as the 4th arg (except in LFS).
Also, fix ffs_update() and lfs_update() to actually change the nsec fields.
1996-05-11 18:26:27 +00:00
thorpej 3b8a528094 Changed struct ifnet to have a pointer to the softc of the underlying
device and a printable "external name" (name + unit number), thus eliminating
if_name and if_unit.  Updated interface to (*if_watchdog)() and (*if_reset)()
to take a struct ifnet *, rather than a unit number.
1996-05-07 02:51:25 +00:00