summaryrefslogtreecommitdiff
path: root/source3/locking/brlock.c
AgeCommit message (Collapse)AuthorFilesLines
2010-05-07This patch looks bigger than it is. It does 2 things. 1). Renames smbpid -> ↵Jeremy Allison1-26/+26
smblctx in our locking code. 2). Widens smblctx to 64-bits internally. Preparing to use the SMB2 handle as the locking context. Jeremy.
2010-05-06Fix SMB2 lock tests up to cancel-by-close.Jeremy Allison1-0/+4
Jeremy.
2010-05-05Move to MS-FSA algorithm when checking for invalid lock range.Jeremy Allison1-7/+6
Satisfies SMB and SMB2. Jeremy.
2010-05-06s3: only include gen_ndr headers where needed.Günther Deschner1-0/+1
This shrinks include/includes.h.gch by the size of 7 MB and reduces build time as follows: ccache build w/o patch real 4m21.529s ccache build with patch real 3m6.402s pch build w/o patch real 4m26.318s pch build with patch real 3m6.932s Guenther
2010-03-10s3: Fix a long-standing problem with recycled PIDsVolker Lendecke1-1/+1
When a samba server process dies hard, it has no chance to clean up its entries in locking.tdb, brlock.tdb, connections.tdb and sessionid.tdb. For locking.tdb and brlock.tdb Samba is robust by checking every time we read an entry from the database if the corresponding process still exists. If it does not exist anymore, the entry is deleted. This is not 100% failsafe though: On systems with a limited PID space there is a non-zero chance that between the smbd's death and the fresh access, the PID is recycled by another long-running process. This renders all files that had been locked by the killed smbd potentially unusable until the new process also dies. This patch is supposed to fix the problem the following way: Every process ID in every database is augmented by a random 64-bit number that is stored in a serverid.tdb. Whenever we need to check if a process still exists we know its PID and the 64-bit number. We look up the PID in serverid.tdb and compare the 64-bit number. If it's the same, the process still is a valid smbd holding the lock. If it is different, a new smbd has taken over. I believe this is safe against an smbd that has died hard and the PID has been taken over by a non-samba process. This process would not have registered itself with a fresh 64-bit number in serverid.tdb, so the old one still exists in serverid.tdb. We protect against this case by the parent smbd taking care of deregistering PIDs from serverid.tdb and the fact that serverid.tdb is CLEAR_IF_FIRST. CLEAR_IF_FIRST does not work in a cluster, so the automatic cleanup does not work when all smbds are restarted. For this, "net serverid wipe" has to be run before smbd starts up. As a convenience, "net serverid wipedbs" also cleans up sessionid.tdb and connections.tdb. While there, this also cleans up overloading connections.tdb with all the process entries just for messaging_send_all(). Volker
2010-02-14s3-locking: convert brlock to TYPESAFE_QSORT()Andrew Tridgell1-3/+2
2009-12-04Make Samba3 pass the RAW-LOCK test as Windows.Jeremy Allison1-0/+5
Implement the win7 NT_STATUS_INVALID_LOCK_RANGE. Make smbd behave as Windows does in canceling locks. Jeremy.
2009-11-21s3: Remove a pointless memsetVolker Lendecke1-1/+0
We are assigning the complete structure now (we used to assign individual fields), so this is obsolete.
2009-11-21s3: Cache brlock.tdb entries for the fast read&write strict locking code pathVolker Lendecke1-5/+57
For a netbench run this gains around 2% user-space CPU, fetching a 100MB file takes around 4% less.
2009-11-03s3: Remove debug_ctx()Volker Lendecke1-1/+1
smbd just crashed on me: In a debug message I called a routine preparing a string that itself used debug_ctx. The outer routine also used it after the inner routine had returned. It was still referencing the talloc context that the outer debug_ctx() had given us, which the inner DEBUG had already freed.
2009-10-05Fix bug 6776 - Running overlapping Byte Lock test will core dump Samba daemon.Jeremy Allison1-148/+219
Re-write core of POSIX locking logic. Jeremy.
2009-07-24Make the smbd VFS typesafeVolker Lendecke1-0/+30
2009-07-20s3: Change fsp->fsp_name to be an smb_filename struct!Tim Prouty1-2/+2
2009-04-03Use procid_str in debug messages for better cluster-debuggabilityVolker Lendecke1-2/+2
2009-02-20s3 BRL: Add more clarifying comments and add implied logic to make ↵Zack Kirsch1-2/+6
conditional more clear
2009-02-13Add VFS ops for Windows BRL: Lock, Unlock and Cancel:Zack Kirsch1-19/+47
This patch adds 3 new VFS OPs for Windows byte range locking: BRL_LOCK_WINDOWS, BRL_UNLOCK_WINDOWS and BRL_CANCEL_WINDOWS. Specifically: * I renamed brl_lock_windows, brl_unlock_windows and brl_lock_cancel to *_default as the default implementations of the VFS ops. * The blocking_lock_record (BLR) is now passed into the brl_lock_windows and brl_cancel_windows paths. The Onefs implementation uses it - future implementations may find it useful too. * Created brl_lock_cancel to do what brl_lock/brl_unlock do: set up a lock_struct and call either the Posix or Windows lock function. These happen to be the same for the default implementation. * Added helper functions: increment_current_lock_count() and decrement_current_lock_count(). * Minor spelling correction in brl_timeout_fn: brl -> blr. * Changed blocking_lock_cancel() to return the BLR that it has cancelled. This allows us to assert its the lock that we wanted to cancel. If this assert ever fires, this path will need to take in the BLR to cancel, rather than choosing on its own. * Adds a small helper function: find_blocking_lock_record_by_id(). Used by the OneFS implementation, but could be useful for others.
2009-02-10Fix an uninitialized variable. Tim, please check!Volker Lendecke1-1/+1
2009-02-09s3 oplocks: Make the level2 oplock contention API more granularTim Prouty1-11/+74
This replaces release_level2_oplocks_on_change with contend_level2_oplock_begin/end in order to contend level2 oplocks throughout an operation rather than just at the begining. This is necessary for some kernel oplock implementations, and also lays the groundwork for better correctness in Samba's standard level2 oplock handling. The next step for non-kernel oplocks is to add additional state to the share mode lock struct that prevents any new opens from granting oplocks while a contending operation is in progress. All operations that contend level 2 oplocks are now correctly spanned except for aio and synchronous writes. The two write paths both have non-trivial error paths that need extra care to get right. RAW-OPLOCK and the rest of 'make test' are still passing with this change.
2008-04-11Quieten valgrind message on make valgrindtest. This doesn'tJeremy Allison1-0/+5
seem to be valid (vl - feel free to confirm). Jeremy. (This used to be commit 43b0254d93540eeaddaa32d76dd9271f4dc2ebff)
2008-03-17Merge leftovers of 0e1a86bc845 in 3-0-ctdbVolker Lendecke1-1/+1
(This used to be commit 64b1625f8e3bca43504871747bef6631e1b18f44)
2008-01-20Fix some "set but never used" warningsVolker Lendecke1-5/+0
(This used to be commit 4a6dadc5178f4861e9c032321939db3b639734b5)
2008-01-16Merge CTDB-related fixes from samba-ctdb 3.0 branch ↵Alexander Bokovoy1-14/+15
(http://samba.org/~tridge/3_0-ctdb) Signed-off-by: Alexander Bokovoy <ab@samba.org>(This used to be commit 0c8e23afbbb2d081fc23908bafcad04650bfacea)
2007-12-10Tiny simplificationsVolker Lendecke1-5/+2
locking.c:open_read_only was unused don't export the silly boolean flag locking_init(bool read_only) (This used to be commit 2f3c865707010bc7c463a02782dbee3dc2479da1)
2007-10-18RIP BOOL. Convert BOOL -> bool. I found a few interestingJeremy Allison1-28/+28
bugs in various places whilst doing this (places that assumed BOOL == int). I also need to fix the Samba4 pidl generation (next checkin). Jeremy. (This used to be commit f35a266b3cbb3e5fa6a86be60f34fe340a3ca71f)
2007-10-10r25055: Add file_id_string_tosVolker Lendecke1-1/+1
This removes file_id_string_static and file_id_string_static2 (This used to be commit 638c848c9afe374feb30e34c494f89b2a6c64f7b)
2007-10-10r24266: Remove the "open files database hash size" parameterVolker Lendecke1-2/+1
This has been superseded by the "tdb_hashsize:<tdbname>" parameter (This used to be commit df40d336afd256f05a0ec3724cc2096fb7114d81)
2007-10-10r24034: Print the full cluster pid in print_lock_structVolker Lendecke1-2/+2
(This used to be commit ff1996ce4b0edfee90758c85ea0ac653877a1b9f)
2007-10-10r23885: Fix make test on opi.Volker Lendecke1-0/+1
(This used to be commit b2adb28808fe25d420bc12834ca8bc70779bb653)
2007-10-10r23882: Fix Coverity id 389 -- finally (I hope)Volker Lendecke1-7/+11
(This used to be commit 9b8f2d8bd144700306819480bcb260d2c20969ae)
2007-10-10r23784: use the GPLv3 boilerplate as recommended by the FSF and the license textAndrew Tridgell1-2/+1
(This used to be commit b0132e94fc5fef936aa766fb99a306b3628e9f07)
2007-10-10r23779: Change from v2 or later to v3 or later.Jeremy Allison1-1/+1
Jeremy. (This used to be commit 407e6e695b8366369b7c76af1ff76869b45347b3)
2007-10-10r23759: Fix make test -- sorryVolker Lendecke1-2/+2
(This used to be commit cbbc70604e815f4ffd25d040ca0a4ef58e651523)
2007-10-10r23755: Fix Coverity id 384Volker Lendecke1-1/+7
(This used to be commit ebb410ca1e08d6f062154c9f8b3970682c6eeebd)
2007-10-10r23516: Fix bug found & fixed by Doug Rudoff (doug_rudoff@isilon.com)Jeremy Allison1-0/+6
- when cleaning up invalid locks make sure we mark the lck struct as modified so it'll get saved back correctly (that was the original intent). Jeremy. (This used to be commit cbf0829abcc3689edd7ab225054dfc79d43c6309)
2007-10-10r23510: Tidy calls to smb_panic by removing trailing newlines. Print theJames Peach1-5/+5
failed expression in SMB_ASSERT. (This used to be commit 171dc060e2a576d724eed1ca65636bdafffd7713)
2007-10-10r23316: Ouch... This would not have run in production without cluster codeVolker Lendecke1-2/+2
anyway. (This used to be commit ca1d0ff03d038372d5886ff1aa409494721142f4)
2007-10-10r23204: Add MSG_SMB_BRL_VALIDATE. Tridge, this is a bit different from your bzrVolker Lendecke1-0/+106
branch, please check if it fulfils your needs. Two changes: The validation is not done inside the brlock.c traverse_fn, it's done as a separate routine. Secondly, this patch does not call the checker routines in smbcontrol directly but depends on a running smbd. (This used to be commit 7e39d77c1f90d9025cab08918385d140e20ca25b)
2007-10-10r23195: Add void *private_data to brl_forallVolker Lendecke1-10/+28
(This used to be commit c91b2bdc160d76bf0b0770fe7f92cbc7124d6c3c)
2007-10-10r23183: Check in a change made by Tridge:Volker Lendecke1-11/+9
This replaces the internal explicit dev/ino file id representation by a "struct file_id". This is necessary as cluster file systems and NFS don't necessarily assign the same device number to the shared file system. With this structure in place we can now easily add different schemes to map a file to a unique 64-bit device node. Jeremy, you might note that I did not change the external interface of smb_share_modes.c. Volker (This used to be commit 9b10dbbd5de8813fc15ebbb6be9b18010ffe8139)
2007-10-10r23169: Merge 535 of Tridge's bzr tree:Volker Lendecke1-2/+5
store the right data after cleaning lock records. This fixes RAW-BENCH-LOCK after a recovery on a cluster (This used to be commit 3da3086dbf594fbdc4cfabf78f8d3ea1df4dc8ce)
2007-10-10r23165: Convert brlock.tdb to dbwrapVolker Lendecke1-38/+51
(This used to be commit 84f9885cf8cc57dcf3c2738d6b245de314890a41)
2007-10-10r23014: For all branches, ensure that if we're blocked on a POSIXJeremy Allison1-3/+22
lock we know nothing about that we retry the lock every 10 seconds instead of waiting for the standard select timeout. This is how we used to (and are supposed to) work. Jeremy. (This used to be commit fa18fc25a50cf13c687ae88e7e5e2dda1120e017)
2007-10-10r22846: Chunk one to replace message_send_pid with messaging_send: Deep insideVolker Lendecke1-23/+28
locking/locking.c we have to send retry messages to timed lock holders. The majority of this patch passes a "struct messaging_context" down there. No functional change, survives make test. (This used to be commit bbb508414683eeddd2ee0d2d36fe620118180bbb)
2007-10-10r22736: Start to merge the low-hanging fruit from the now 7000-line cluster ↵Volker Lendecke1-6/+6
patch. This changes "struct process_id" to "struct server_id", keeping both is just too much hassle. No functional change (I hope ;-)) Volker (This used to be commit 0ad4b1226c9d91b72136310d3bbb640d2c5d67b8)
2007-10-10r22688: Change lock_data in struct byte_range_lock from void * to struct ↵Volker Lendecke1-24/+15
lock_struct * (This used to be commit 8e0e278961ebf2fa4301874d522636699ace1b9b)
2007-10-10r22588: Make all uses of TALLOC_MEMDUP consistent.Jeremy Allison1-3/+8
Jeremy. (This used to be commit 8ad13718af0ba1fcb10a6f1631b1ed3cb8d11175)
2007-10-10r22009: change TDB_DATA from char * to unsigned char *Stefan Metzmacher1-4/+4
and fix all compiler warnings in the users metze (This used to be commit 3a28443079c141a6ce8182c65b56ca210e34f37f)
2007-10-10r21723: Make use of the per-hashchain "freelists"Volker Lendecke1-0/+3
(This used to be commit f3421ae4cfa263c0e7a8e934b40342ee9885d239)
2007-10-10r19668: Convert the locking params to use struct share_param instead of snumVolker Lendecke1-8/+8
(This used to be commit 609dbec600048718b86cd1ecdc2ce49bbdeb803c)
2007-10-10r17924: Get rid of warnings now that talloc is merged.Volker Lendecke1-3/+1
Destructors now take a pointer to the "real" destroyed object as an argument. Volker (This used to be commit 70edd716ef0ccb218fe18d1233bd30abe46b62bf)