blob: b859d011464ef88f2d7ee9ca458076506c004570 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
2006-08-30 Joel Sherrill <joel@OARcorp.com>
* src/rpcio.c: Remove printf format warnings.
Changes since RTEMS-NFS 1.3_pre2:
RPCIOD:
- fix a problem with NFS server clusters (reply comes from an IP address
different from the destination of the request) by relaxing paranoia checks.
Changes since RTEMS-NFS 1.2:
NFS:
- replaced inet_aton -> inet_pton
- replaced unsigned32 -> uint32_t
- added _KERNEL definition for 4.7 compilation
- silenced compiler warnings (4.7)
- added -Wno-unused-variable in 'proto' -- rpcgen produces a lot of them.
- new locking scheme. The 'in-use' counters cannot be protected by a mutex
because files might be closed when a thread is deleted from a dispatch-disabled
section where mutexes must not be locked. The counters are now protected by
disabling interrupts.
The only critical race-condition I can see ATM is while the NFS is being
unmounted and the mount point is crossed by another thread. It should be the
generic FS code's responsibility to handle that (but AFAIK, it doesn't) --
it's out of our scope...
- ftruncate didn't work. The functionality is achieved by nfs_sattr()
setting the file size to 0. However, nfs_sattr() always tried to set
all attributes (re-applying the current values to fields we didn't
want to change) which failed (EPERM) if we were not the owner.
Now, we restrict modifications to the requested fields (in case of
ftruncate this is *only* the size), adhering to rfc1094 (which states
that unused fields shall be set to -1).
- lseek(SEEK_END) didn't work. The underlying RTEMS filesystem code
uses an internal file 'size' field to compute the offset whence SEEK_END.
Instead of painfully maintaining 'size' across all system calls, we
just tweak the offset for SEEK_END and leave 'size' unused.
- fix: O_APPEND wasn't honoured. Note that there is no NFS 'append' call -
the client simply uses the currently available idea of the file size
to set the write offset. This obviously is subject to race conditions
if multiple clients are writing the same file.
dirutils:
- replaced read/write calls by stdio; In case of copying to stdout, I
experienced occasional crashes when write(fileno(stdout),...) -- according
to the standard, mixing low-level i/o with stdio might produce undefined
results; there we go...
Changes since RTEMS-NFS 1.1:
NFS:
- unlink() didnt work. The underlying RTEMS filesystem code evaluates
a '..' path on a non-directory node to find out the file's parent
directory. Workaround to this semantically inelegant RTEMS feature
was implemented.
Changes since RTEMS-NFS 1.0.beta3:
NFS:
- fixed possible string overrun in nfsMount
- nfs_read_dir() must reset the 'eofreached' flag if it skipped
dirents present in the xdr but not fitting into the user buffer.
- nfsMountsShow() released the wrong lock!
RPCIO:
- cannot delete locked binary semaphore (authlock) -- must unlock
first (authlock was never deleted and hence effectively leaked)
- added ASSERT paranoia around mutex primitives
- Relaxed paranoia check / ASSERTion failure:
paranoia_free() is called more than once on an ext_buf - it must
undo calls to paranoia_refcnt() - hence the 0 == --refcnt check
is too strict.
- Added a DEBUG flag to introduce random packet losses for testing
retransmission.
xdr_mbuf:
- make sure we do a signed comparison
Changes since rtemsNFS-1.0.beta2:
- moved 'tar' command to the 'config' area; use
predefined 'make-tar' in individual Makefiles
- use INSTALL_CHANGE for headers, not INSTALL_VARIANT (probably doesn't
matter, though)
- use LD not LD_FOR_TARGET (to get absolute path)
- fixed assertion failure print format
- print requestor id if send_event fails - had just experienced this :-(
- hint about fprintf using FP registers is probably PPC specific
- provided implementation for xdrmbuf_getlong_aligned(). i386-rtems
seems to use it.
|