1
0
mirror of https://github.com/samba-team/samba.git synced 2025-12-09 00:23:50 +03:00
Commit Graph

21 Commits

Author SHA1 Message Date
Andrew Tridgell
8d45bf644a it is possible for some of the real time signals to be used by glibc,
which then changes SIGRTMIN. It is also possible for bash to leave
some real time signals blocked at startup. This fixes both problems.
-
Andrew Bartlett
f8d9880c5f Ensure we do not pass uninitialised data to the kernel. (Picked up by
valgrind).

Andrew Bartlett
-
Gerald Carter
29874f4b8f compile warngin fixes merged from 2.2 -
Jeremy Allison
a8c85372e2 Overly complex but neccessary fix for kernel oplock problems. The issue
is that there are some times when we should return an EINTR from a select,
some times when we should not. As we can take a signal at any time, we
have to eat EINTR's in some selects. This means we need to check for
kernel oplock breaks more often in the main loop, as well as add the
queuing mechanism needed for the changenotify code (due to the mistake
in understanding POSIX semantics w.r.t. setting a signal mask in a
signal handler). This code now passes all my tests.
However, (and IMHO and I know tridge disagrees) - the correct way to
fix this is to run with RT signals blocked and explicitly unblock
them just before the main select, block them after and then process
them all in one place. Just my 2cents :-).
Jeremy.
-
Jeremy Allison
d4dbb9cb13 Merge of receive_local_message fix from 2.2.5.
Jeremy.
-
Tim Potter
6a58c9bd06 Removed version number from file header.
Changed "SMB/Netbios" to "SMB/CIFS" in file header.
-
Jeremy Allison
86c2f96366 Fixed unsigned / long unsigned format missmatch.
Jeremy
-
Jeremy Allison
058ae6b58f Move from timestamp to gen count file id's for finding oplocked files
in a tdb.
Jeremy.
-
Tim Potter
2d0922b0ea Removed 'extern int DEBUGLEVEL' as it is now in the smb.h header. -
Andrew Tridgell
60d2973034 convert more code to using d_printf -
Andrew Tridgell
e2ecff419f fixed usage of socklen_t and also tidied up SIG_ATOMIC_T, using a typedef instead of a define -
Tim Potter
88a7b2c3f8 More compiler warning fixes. -
Jeremy Allison
b35ca2c6b1 Fix from matthew.hart@veritas.com - bad error return from linux_oplock_receive_message().
Jeremy.
-
Jeremy Allison
0be41d5158 Merge of new 2.2 code into HEAD (Gerald I hate you :-) :-). Allows new SAMR
RPC code to merge with new passdb code.
Currently rpcclient doesn't compile. I'm working on it...
Jeremy.
-
Jeremy Allison
b737c784e3 Paranoia changes to ensure that anything touched by a signal handler
and the main code is declared as VOLATILE SIG_ATOMIC_T.
Jeremy.
-
Andrew Tridgell
c6be511fcc enable the Linux change notify code and change some notify debug code -
Andrew Tridgell
44766c39e0 totally rewrote the async signal, notification and oplock notification
handling in Samba. This was needed due to several limitations and
races in the previous code - as a side effect the new code is much
cleaner :)

in summary:

- changed sys_select() to avoid a signal/select race condition. It is a
  rare race but once we have signals doing notification and oplocks it
  is important.

- changed our main processing loop to take advantage of the new
  sys_select semantics

- split the notify code into implementaion dependent and general
  parts. Added the following structure that defines an implementation:

struct cnotify_fns {
	void * (*register_notify)(connection_struct *conn, char *path, uint32 flags);
	BOOL (*check_notify)(connection_struct *conn, uint16 vuid, char *path, uint32 flags, void *data, time_t t);
	void (*remove_notify)(void *data);
};


then I wrote two implementations, one using hash/poll (like our old
code) and the other using the new Linux kernel change notify. It
should be easy to add other change notify implementations by creating
a sructure of the above type.

- fixed a bug in change notify where we were returning the wrong error
  code.

- rewrote the core change notify code to be much simpler

- moved to real-time signals for leases and change notify

Amazingly, it all seems to work. I was very surprised!
-
Andrew Tridgell
cc0e919fdc a better test for oplocks being enabled in this kernel -
Andrew Tridgell
afa98d511f fixed Linux capabilities handling
I used a trick where CAP_LEASE isn't claimed until it is needed. This
means we avoid a system call per setreuid(), and never call capset()
unless a user tries to get a oplock on a file that they don't own
-
Andrew Tridgell
b28cc4163b Linux kernel oplocks now seem to work, but need a _lot_ of testing
I had to modify sys_select() to not loop on EINTR. I added a wrapper
called sys_select_intr() which gives the old behaviour.
-
Andrew Tridgell
3253085d98 a first pass at Linux kernel oplocks support -