The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ......
Transcript of The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ......
![Page 1: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/1.jpg)
The guy
![Page 2: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/2.jpg)
Like magic...
![Page 3: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/3.jpg)
lots of hard work
![Page 4: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/4.jpg)
mostly other peoples'
VFS layerKerberos & delegated
credential supportSamba generally
![Page 5: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/5.jpg)
SambaXP Party
![Page 6: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/6.jpg)
Samba4 WAFS Discourse
The problem The solution Implementation All the other bits
![Page 7: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/7.jpg)
The problem
CIFS performs poorly over the internet Measureable in terms of:
# seconds to save a file % idle bandwidth wasted Low ROI on bandwidth investment Users waste of even more time while waiting Cost of WAFS solutions
![Page 8: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/8.jpg)
The Causes
Low bandwidth High latency Chattiness
Nigella Lawson chatting instead of book signing.
I'll bet there's a long queue moving slowly.
![Page 9: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/9.jpg)
Bandwidth as a cause
LAN link speeds: 10 - 1000 Mb/s File transfer speeds 80 – 400Mb/s
WAN link speeds: 300Kb/s – 10Mb/s Up to 30 times slower
Special antique low-bandwidth pen
![Page 10: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/10.jpg)
Bandwidth as a cause
robot pen from coolest-gadgets.com Will it help speed things up?
![Page 11: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/11.jpg)
Latency as a cause
LAN latency 2ms Theoretical 500 requests per second
WAN latency 50 – 100ms Theoretical 10 – 20 requests per second A process needing 500 requests takes 50 seconds
WAN at least 25 – 50 times slower than LAN Taking message size into account
means even slower due to lower bandwidth
![Page 12: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/12.jpg)
Chattiness – the worst of both
Most applications are synchronous CIFS client waits for file to open before reading Waits for read to finish before reading more Repeated requests for the same meta-data The problem can't be solved with a bigger pipe
Chattiness / Poor CIFS pipelining latency adds up Under-utilisation of available bandwidth
![Page 13: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/13.jpg)
Chattiness – the maths
Request time
SIZErequest
/ BWupstream
+ LATENCYupstream
Response time
SIZEresponse
/ BWdownstream
+ LATENCYdownstream
Total = TIMErequest
+ TIMEresponse
+ LATENCYserver
![Page 14: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/14.jpg)
Chattiness - examples
Request / Response Size / bytes
Count: 1000 Request: 64 Response: 4100
Combined total request response time in seconds
102400 10240 2048 1024 5121 1 4 17 34 66
2 2 5 18 35 67
5 5 8 21 38 70
20 20 23 36 53 85
50 50 53 66 83 115
At 50ms latency a bandwidth increase of 2,000% decreases load time to about 50%
More bandwidth doesn't help much!
Symmetric Link Bandwidth Kbit/sRTT/mS
![Page 15: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/15.jpg)
Chattiness – the graphs
1 ms 2 ms 5 ms 20 ms 50 ms
0
20
40
60
80
100
120
100Mb/s
10Mb/s
2Mb/s
1Mb/s
512Kb/s
100Mb/s10Mb/s2Mb/s1Mb/s512Kb/s
![Page 16: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/16.jpg)
The Solution
Remove harms of chattiness Of course!
Reduce latency with read-ahead Reduce bandwidth demands with compression
Also reducing link contention
![Page 17: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/17.jpg)
An opportunity
A device at each site to extend CIFS protocol
![Page 18: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/18.jpg)
Read-ahead
Done already, Jeeves?
I trust that sir is satisfied?
![Page 19: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/19.jpg)
Read-ahead
Abolish RTT latency Response processed
before related request Read ahead by
RTT * bandwidthto get link speed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
Regular CIFS
Regular CIFS
Read-ahead
![Page 20: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/20.jpg)
Read-ahead
File-read using full available bandwidth
Latency still problem for folder browsing
In early tests, read-ahead on a 600Kb/s ~50ms link reduced the time to read a file by 25%
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
Regular CIFS
Regular CIFS
Read-ahead
![Page 21: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/21.jpg)
Read-ahead latency improvement
With read-ahead the new apparent LAN-side latency is effectively:
SIZErequest
/ BWupstream
– LATENCYlan
500Kb/s =~ 500bits per millisecond 4Kbyte response takes 65ms With LAN latency of 2ms effective LAN latency is
63ms at LAN bandwidth
![Page 22: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/22.jpg)
Read-ahead vs Latency
Request / Response Size / bytes
Count: 1000 Request: 64 Response: 4100
Combined total request response time in seconds
102400 10240 2048 1024 5121 1 4 17 34 66
2 2 5 18 35 67
5 5 8 21 38 70
20 20 23 36 53 85
50 50 53 66 83 115
Reducing latency to LAN levels makes a BIG difference even at moderate bandwidth
Symmetric Link Bandwidth Kbit/sRTT/mS
![Page 23: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/23.jpg)
Compression
Increase effective bandwidth
Zlib often gives 50% compression rates
Custom dictionarys can give better compression
![Page 24: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/24.jpg)
Read-ahead and Compression
Request / Response Size / bytes
Count: 1000 Request: 64 Response: 4100
Combined total request response time in seconds
102400 10240 2048 1024 5121 1 4 17 34 66
2 2 5 18 35 67
5 5 8 21 38 70
20 20 23 36 53 85
50 50 53 66 83 115
Compression and read-ahead make great savings of
67% off
Symmetric Link Bandwidth Kbit/sRTT/mS
![Page 25: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/25.jpg)
LAN Speeds over the WAN
1.If the file is previously cached
2.If the cache can be cheaply validated on open Then READ operations are at
LAN speeds LAN latency
Validation-on-open strategy not simple Avoid processing unwanted cache Avoid extra latency on open
![Page 26: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/26.jpg)
Caching
Solves latency and bandwidth issues entirely Non-validated cache can help compression
MD5 to validate cache Use cache contents as a dictionary Unroll rsync / rdiff Dynamic dictionary management
![Page 27: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/27.jpg)
Caching-Compression
Request / Response Size / bytes
Count: 1000 Request: 64 Response: 4100
Combined total request response time in seconds
102400 10240 2048 1024 5121 1 4 17 34 66
2 2 5 18 35 67
5 5 8 21 38 70
20 20 23 36 53 85
50 50 53 66 83 115
Caching and compression and read-ahead make great savings
95% off
Symmetric Link Bandwidth Kbit/sRTT/mS
Read from cacheCompress from cache
Zlib compress Read-ahead
![Page 28: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/28.jpg)
Cache Coherency
A nasty headache, see Coda, Intermezzo, AFS Nobody wants to resolve conflicts anyway Oplocks and notifications to the rescue Cache validated while an oplock is held stays
valid – well worth reading ahead in this case! Metadata can be cached when folder change
notifications are registered – no more repeats All other requests to the server – but optimized
![Page 29: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/29.jpg)
Other requirements
Maintain user identity ACL's Permissions Ownerships Quotas
Maintain locking Cache coherency
![Page 30: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/30.jpg)
Samba4 platform benefits
Samba4 maintains CIFS semantics Samba4 already has a CIFS proxy Samba4 integrates with AD trust system Kerberos supports delegated credentials Trust of proxies can be managed standard AD
management tools or set when provisioning Proxies can read-ahead using users credentials There's a load of brains working on it already
![Page 31: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/31.jpg)
Implementing the solution
Based on Samba4 proxy module Keep caching engine seperate All reads requests consult a cache and validate
from server where required All read responses stored in a cache Do writes hit the cache after completion?
What if a read comes in the meantime?
Meta data can be cached too oplock breaks and notifications invalidate cache
![Page 32: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/32.jpg)
Deployment and Provisioning
Directly access shares from the proxy Maybe DFS referrals could pick nearest proxy?
![Page 33: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/33.jpg)
Implementing the solution
It all works together so wellin theory
![Page 34: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/34.jpg)
Samba4 infrastructre
Proof of concept very simple It's all there, it looked so easy right away Read-ahead and zlib easy to add to cifs_proxy Code was well structured so I didn't have to get
to grips with all of it. At first
My first bug: oplock handling in cifs_proxy Took 3 months to get patched - exciting
![Page 35: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/35.jpg)
Multiple proxies
Extend share definition to match called name[\\proxy-alias\share]
Use additional SPN's for each proxied server[\\local-accounts\secret]
server=accounts.realm.net
share=top_secret$
[\\local-games]
server=games.realm.net
[*]
server=main.realm.net
![Page 36: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/36.jpg)
Implementing the solution
0xACE
![Page 37: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/37.jpg)
Proxy – Proxy Communication
New opcode? New nttrans? New ntioctl – 0xACE Ioctl gives the option of implementing natively in
windows server, so I'm told Use the dcerpc NDR code to marshall RPC
transport over ntioctl which transports over nttrans
Which transports over SMB Which transports over...
Lots of copying anyway!
![Page 38: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/38.jpg)
How reads work
Look for a pending read and attach to the callback handler as a read-fragment
Read from cache and issue optimized reads Repeat until all mincount is satisfied Callback handlers re-assemble read buffer Make sure attached read-fragment isn't free'd
by original caller before we've finished with it. Now I've got to stop excess simultanous reads!
![Page 39: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/39.jpg)
Problems
Client negotiates large write with proxyServer negotiates small writes with proxyLikewise for reads Simple request proxying won't work
Requires fragmenting reads and writes and collating results.
What happens if a middle request fails? What happens if the server thinks we queued
too many simultaneous fragments?
![Page 40: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/40.jpg)
Attaching to existing requests
talloc_referencing multiple handlers sticking onto each-others memory
Changed whole async callback mechanism Callback chains to reverse map incoming
responses – ntioctl, nttrans etc New meta-infrastructure that selects between
proxy-proxy comms or proxy-server Will change again to avoid need for references
![Page 41: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/41.jpg)
New callback mechanism
Related calls typically use same smb_* structNot any more!
Related calls now have different encapsulations smb_read as standard proxy_read uses NDR / NTIOCL / NTTRANS The encapsulator queue's a de-encapsulator So the caller gets an unpacked struct The first callback calls smb_receive()
Sync or async have same handlers!
![Page 42: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/42.jpg)
Simple cache
Simple file-based linear extents Length Validated length Pending length
No holes in cache Cache key is user + server + share + path Delete random cache content when full
Cache extent
Validated Invalid Pendingreads
![Page 43: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/43.jpg)
Better Cache management
Ideally fragments should be selected based on reimen polynomials rolling_checksum % frag_size_key == 0
This could also be the fragment key to avoid the birthday problem, we probably want to
negotiate a unique key between all caches
Per-user file cache becomes index of fragments Duplicate data is stored only once Delete low value content when full
![Page 44: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/44.jpg)
The pain of the blessed Samba
nttrans and ioctl had various bugs multi-packet requests/responses >64K requests responses Is >64K ntioctl allowed? Dunno
I wasn't wanting to have to fix these! Forced acquaintance with code base and tools
But at least I got 0xACE is my ntioctl Hope no-one else picks such a cool function id
They might, it's so cool; agghhh
![Page 45: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/45.jpg)
Pain of rejection
No-one likes DLIST_FIND
#define DLIST_FIND(list, result, test) \
do { \
for ((result) = (list); \
(result) && !(test); \
(result) = (result)->next); \
} while (0)
DLIST_FIND(thingy->list; item; item->id==id);
![Page 46: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/46.jpg)
The joy of acceptance
Poor-mans debug_ctx()Uses a DEBUG() scoped variable instead of a static variable. Compatible with samba3 debug_ctx() Wastes a lot of memory Works without DEBUG being thread-safe
![Page 47: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/47.jpg)
The joy of acceptance
Fix large request fixups in receive.c Were taking wrong affect on non AND_X requests Allows >64K nttrans to be handled
Fix OP_LOCK breaks on vfs_proxy smb_abort macro for talloc_get_type_abort
allows per-caller abort mechanism
talloc_memdup_type also clones struct name
![Page 48: The guy - sambaXP€¦ · 50 50 53 66 83 115 At 50ms latency a ... Based on Samba4 proxy module ... Make sure attached read-fragment isn't free'd](https://reader031.fdocuments.net/reader031/viewer/2022022608/5b8a63587f8b9ac1328c107a/html5/thumbnails/48.jpg)
It works! Testers like it – saves time
I'm not lying No longer feel let down or hurt by performance Or give up and play around while waiting Goodbye!