{"push_id":680369351,"size":8,"distinct_size":8,"ref":"refs/heads/duplex-12","head":"665e449528eaafb7a14d34996c7c04e2606c74ca","before":"74471f6919a3ed4115a0305d8aef281b1075443a","commits":[{"sha":"8264548d7880ae49a92fb2872ecd4135d8e5cec8","author":{"email":"c692d6a10598e0a801576fdd4ecf3c37e45bfbc4@CohortFS.com","name":"William Allen Simpson"},"message":"Convert thrdpool to work_pool, export svc_work_pool\n\nBugfix:\n * TAILQ_FOREACH has TAILQ_REMOVE (should be TAILQ_FOREACH_SAFE).\n   Instead, use slightly faster TAILQ_FIRST loops.\n * svc_ioq_init() called too soon, needs maximum threads parameter!\n * require maximum and minimum threads parameters more than zero,\n   as zero is used to signal shutdown.\n * no need to use atomic flag for shutdown, using idempotent\n   maximum threads (set to zero under lock) instead.\n * use atomic for n_threads, not idempotent, could conflict.\n * DO NOT spawn on submit, not usable by system callbacks.\n   Instead, existing thread(s) will dynamically spawn more.\n\nUses simplified pool_queue.\n\nCombine idle_q and work_q, with the waiting worker thread stored on\nthe work task queue to reduce signal cost.\n\nEmbed work_pool_entry in x_vc_data to avoid two extra malloc/free\nfor every task submission. Delete now unused svc_ioq_args.\n\nRemove significant number of mutex [un]locks.\n\nRemove unused counters.\n\nAfter timeout without activity, threads reduce to minimum.\n\nRemove unused flag definitions. Replace shutdown flag with test\nagainst minimum threads parameter, and set to zero on shutdown.\n\nSimplify shutdown, waiting for existing threads to complete tasks.\n\nSigned-off-by: William Allen Simpson <bill@CohortFS.com>","distinct":true,"url":"https://api.github.com/repos/linuxbox2/ntirpc/commits/8264548d7880ae49a92fb2872ecd4135d8e5cec8"},{"sha":"92a93af0b726c002d639c8f48ef007eda92d3086","author":{"email":"c692d6a10598e0a801576fdd4ecf3c37e45bfbc4@CohortFS.com","name":"William Allen Simpson"},"message":"Bugfix and revise IOQ data structures\n\nBugfixes in svc_ioq.c:\n * After XDR_SETPOS call, frag_len could undercount.  Remove\n   its only use of frag_len, sum immediately before write_v().\n * Used base instead of offset for head of data.\n * Need to subtract offset (head) from length (tail),\n   switch to macro for clarity.\n * Missing \"%s()\" in warning messages, mismatched variables,\n   bad indentation....\n\nBugfixes in xdr_ioq.c:\n * XDR_PUTBYTES was using \"off\" instead of \"boff\", inserting at\n   wrong position in buffer. Changed symbols drastically to differ\n   by more than 1 character for clarity! (no more off, boff, loff.)\n * After XDR_SETPOS call, offset (head) and length (tail) were set\n   to the entire loff total length of data, far exceeding buffer size.\n   (Already marked in the past with \"XXX oops, redundant\".)\n * After XDR_INLINE call, offset (head) and length (tail) were both\n   increased by the data length, losing data at the head.\n * After XDR_SETPOS followed by XDR_INLINE call during DECODE, the\n   above could extend length (tail) beyond the buffer size.\n   Subsequent GETs could overrun.\n\nUses simplified pool_queue (see also work_pool).\n\nRename xdr_iovec to xdr_vio to avoid symbol conflicts with iovec.\n\nRemove duplicated v_rec and xdr_uio fields, consolidating buffer\npointers into vio and headers into uio. Sort uio fields by size.\n\nMerge fpos_t with unnamed ioq structure, making xdr_ioq_uv_head,\nrenaming \"q\" and \"ioq\" to \"uvqh\" and \"ioq_uv\" respectively.\n(Too many other q and ioq.)\n\nUse a fill pointer instead of an offset index. Considerably fewer\ncalculations. Put fill pointer in x_private to match other xdr files.\n\nUse buffer vio_head, vio_tail, and vio_wrap pointers instead of\noffset indices (off, len, size). Even fewer calculations. Maintain a\npointer to this vrec vio block in x_base, with a working copy in x_v.\n\nDelay calculations of plength (was loff) and other offsets and lengths,\ninstead of during every operation function call. Calculations are now\nonly 1 test and 3 simple assignments in the fast path.\n\nImplement IOQ_FLAG_BUFQ, in both stream directions.\n\nAdd uvq_fetch() function pointer, so they can be customized for\ndifferent buffer types to allow re-use of pre-allocated buffers.\nCount parameter reduces repeated [un]locking for multiple buffers.\n\nRename existing uio_rele() function pointer for generic release.\n\nReplace init_ioq() and internal ioq_stream_reset() with\nxdr_ioq_setup() and xdr_ioq_reset() respectively, to allow\nre-use of pre-allocated queuing containers.\n\nAdd pointers for return of uv and ioq to pools, instead of\nrepeated reallocation.\n\nPools have cond+mutex locking, with the recipient ioq stored on\nthe uv queue to reduce signal cost. Fetches always add the result\nto the tail of the recipient for efficiency in most cases.\n\nSigned-off-by: William Allen Simpson <bill@CohortFS.com>","distinct":true,"url":"https://api.github.com/repos/linuxbox2/ntirpc/commits/92a93af0b726c002d639c8f48ef007eda92d3086"},{"sha":"355177634bce7195556f24752744b899d40a6598","author":{"email":"c692d6a10598e0a801576fdd4ecf3c37e45bfbc4@CohortFS.com","name":"William Allen Simpson"},"message":"XDR vio inline definitions\n\nUpdate xdr_[get|put] for speed. Additional primitive data types:\n  uint32, [u]int16, [u]int8, enum, bool.\n\nUse old long function calls only as next buffer is needed.\n\nSigned-off-by: William Allen Simpson <bill@CohortFS.com>","distinct":true,"url":"https://api.github.com/repos/linuxbox2/ntirpc/commits/355177634bce7195556f24752744b899d40a6598"},{"sha":"0ce14e61b41ccb45f6b151b80790473338c44258","author":{"email":"c692d6a10598e0a801576fdd4ecf3c37e45bfbc4@CohortFS.com","name":"William Allen Simpson"},"message":"Bugfix and revise xdr_nfree\n\nRestore bool result, for the rare cases it is returned.\n\nRemove 4 stack-based XDR and code that duplicates xdr_free.\nUse static global XDR instead to reduce assignments.\n\nDon't create large (~0) size fake xdr_mem structures.\n\nMinor changes to boolean test order and returns.\n\nSigned-off-by: William Allen Simpson <bill@CohortFS.com>","distinct":true,"url":"https://api.github.com/repos/linuxbox2/ntirpc/commits/0ce14e61b41ccb45f6b151b80790473338c44258"},{"sha":"1d056679fae5f1341f7b314b0ae4bcd6c2656ad5","author":{"email":"c692d6a10598e0a801576fdd4ecf3c37e45bfbc4@cohortfs.com","name":"William Allen Simpson"},"message":"XDR vio inline xdr_mem\n\nReplace simple x_private, x_handy, and x_base with x_v (vio),\nmatching IOQ techniques. Considerably fewer calculations.\n\nSigned-off-by: William Allen Simpson <bill@cohortfs.com>","distinct":true,"url":"https://api.github.com/repos/linuxbox2/ntirpc/commits/1d056679fae5f1341f7b314b0ae4bcd6c2656ad5"},{"sha":"5ceaf6ee5ed20927c447bc48ea2a734c56e421ac","author":{"email":"c692d6a10598e0a801576fdd4ecf3c37e45bfbc4@cohortfs.com","name":"William Allen Simpson"},"message":"XDR vio inline rpc duplex message debugging\n\nReplace slower inline_* with faster xdr_[get|put] primitives\nintroduced for IOQ and mem data structures (previous patches).\n\nDivide inline_xdr_opaque and inline_xdr_opaque_auth to reduce\nswitch and other branching. New functions can be used directly.\n\nMerge earlier CALL speedup from rpc_dplx_msg.c into rpc_callmsg.c,\nreducing duplicate code paths and improving error logging.\n\nNew xdr_call_decode and xdr_call_encode.\n\nNew xdr_reply_decode and xdr_reply_encode.\n\nNew xdr_dplx_decode selects xdr_call_decode and xdr_reply_decode,\npassing XDR_INLINE buffer pointer for fastest decoding.\n\nSigned-off-by: William Allen Simpson <bill@cohortfs.com>","distinct":true,"url":"https://api.github.com/repos/linuxbox2/ntirpc/commits/5ceaf6ee5ed20927c447bc48ea2a734c56e421ac"},{"sha":"271f119abc45e650d72a6bc77992c99995ddac1a","author":{"email":"c692d6a10598e0a801576fdd4ecf3c37e45bfbc4@CohortFS.com","name":"William Allen Simpson"},"message":"Embed opaque authenticator bodies in rpc_msg\n\nPoint to them from their respective structs.\n\nAvoids separate alloc/free -- this is much more efficient.\n\nSigned-off-by: William Allen Simpson <bill@CohortFS.com>","distinct":true,"url":"https://api.github.com/repos/linuxbox2/ntirpc/commits/271f119abc45e650d72a6bc77992c99995ddac1a"},{"sha":"665e449528eaafb7a14d34996c7c04e2606c74ca","author":{"email":"c692d6a10598e0a801576fdd4ecf3c37e45bfbc4@CohortFS.com","name":"William Allen Simpson"},"message":"Integrate Mooshika into RPC_RDMA\n\nMass reformatting.\nRedo initialization.\n\nMerge standard SVCXPRT header into RDMAXPRT.\n\nRedo Protection Domain array as global list, as it cannot always be\ndetermined during initialization. Also refcount every usage.\n\nMove Connection Requests into global queue, as there is no good\nreason for storing a pointer to it from every RDMAXPRT.  Also,\nbetter as a circular queue than repeatedly scanning an array.\nReplace _lock and _cond_wait with faster Posix semaphores.\n\nEliminate trivial thread for child. Instead, complete creation\nwithin the dispatch loop.\n\nEliminate trivial alloc of buffer and memory information. Move\ninto RDMAXPRT, instead of repeat copying pointer into each XDR.\n\nConvert buffer and context arrays to TAILQ. Better as queues\nthan repeatedly scanning arrays.\n\nCombined shorter header with longer outbufs for better\nutilization.  Likewise, combined rdmabufs with inbufs.\n\nEliminate slow eventfd_read and _write for worker pool by\nreplacing with existing faster svc_work_pool.\n\nSigned-off-by: William Allen Simpson <bill@CohortFS.com>","distinct":true,"url":"https://api.github.com/repos/linuxbox2/ntirpc/commits/665e449528eaafb7a14d34996c7c04e2606c74ca"}]}