Commit message (Collapse) | Author | Age | Files | Lines | |
---|---|---|---|---|---|
* | ioq: Factor out io_uring initialization | Tavian Barnes | 2024-02-14 | 1 | -37/+73 |
| | |||||
* | ioq: Make -j also limit the io_uring worker threads | Tavian Barnes | 2024-02-14 | 1 | -0/+9 |
| | |||||
* | ioq: Replay IOQ_STOP messages rather than spam them | Tavian Barnes | 2024-02-14 | 1 | -4/+5 |
| | |||||
* | ioq: Pack ioq_ent args structs | Tavian Barnes | 2024-02-14 | 1 | -3/+3 |
| | |||||
* | bftw: Document which bftw_file nodes go with which lists | Tavian Barnes | 2024-02-14 | 1 | -3/+17 |
| | |||||
* | expr: Pack struct bfs_expr a bit | Tavian Barnes | 2024-02-14 | 1 | -15/+9 |
| | |||||
* | stat: Pack struct bfs_stat a bit | Tavian Barnes | 2024-02-14 | 2 | -28/+24 |
| | |||||
* | eval: Add thousands separators to -status | Tavian Barnes | 2024-02-12 | 1 | -2/+2 |
| | |||||
* | sanity: Don't use self-init for uninit() | Tavian Barnes | 2024-02-12 | 3 | -7/+7 |
| | | | | | | | | | | | Self-initialization like bool ret = ret; is a GCC trick to suppress uninitialized variable warnings, but it's not actually well-defined, and will trip a recent enough MemorySanitizer: src/eval.c:1088:13: runtime error: load of value 128, which is not a valid value for type 'bool' | ||||
* | ioq: Get rid of IOQ_STRIDE | Tavian Barnes | 2024-02-12 | 1 | -20/+5 |
| | | | | Benchmarks show it hurts more than it helps. | ||||
* | ioq: Shrink the io_urings | Tavian Barnes | 2024-02-12 | 1 | -4/+2 |
| | |||||
* | Release 3.13.1 | Tavian Barnes | 2024-02-06 | 1 | -1/+1 |
| | |||||
* | opt: Enable BFTW_STAT when profitable | Tavian Barnes | 2024-02-06 | 2 | -0/+93 |
| | |||||
* | ctx: Fill in ctx->threads earlier | Tavian Barnes | 2024-02-06 | 3 | -23/+20 |
| | |||||
* | color: New API to check if stat() is necessary | Tavian Barnes | 2024-02-06 | 2 | -6/+11 |
| | |||||
* | bftw: stat() files asynchronously | Tavian Barnes | 2024-02-06 | 3 | -211/+506 |
| | |||||
* | mtab: Take the basename directly in bfs_might_be_mount() | Tavian Barnes | 2024-02-05 | 3 | -6/+5 |
| | | | | This avoids some hot xbaseoff() calls. | ||||
* | bftw: Always block in bftw_pop_dir() with multiple threads | Tavian Barnes | 2024-02-01 | 1 | -11/+22 |
| | |||||
* | bftw: Don't immediately pin open directories | Tavian Barnes | 2024-02-01 | 1 | -4/+5 |
| | | | | | | | It is undesirable to close a directory that we haven't read yet to free up cache capacity, but it's worse to fail to open the next directory because too many upcoming directories are pinned. This could happen when sorting, because then we can't prioritize the already-opened ones. | ||||
* | bftw: Allow forcing bfs_dir allocation from the main thread | Tavian Barnes | 2024-02-01 | 1 | -12/+35 |
| | | | | | | | | | When sorting, we can be forced to pop an unopened directory. If enough other directories are already open, that can lead to ENOMEM when we try to open it synchronously. To avoid this, force allocations from the main thread to be attempted even if they would go over the limit. Also, fix the accounting in bftw_allocdir() if allocation fails. | ||||
* | bftw: Kill trivial bftw_queue_balance() helper | Tavian Barnes | 2024-02-01 | 1 | -7/+2 |
| | |||||
* | bfstd: Don't shadow FreeBSD's fflags_t | Tavian Barnes | 2024-02-01 | 1 | -4/+4 |
| | |||||
* | bftw: Actually stop if the callback returns BFTW_STOP | Tavian Barnes | 2024-01-31 | 1 | -1/+1 |
| | | | | | | Otherwise, bftw_ids() or bftw_eds() might keep going! Fixes: 5f16169 ("bftw: Share the bftw_state between iterations of ids/eds") | ||||
* | opt: Charge eval_flags() for a stat() call | Tavian Barnes | 2024-01-31 | 1 | -0/+1 |
| | |||||
* | bftw: Optimize -s -j2 searches | Tavian Barnes | 2024-01-31 | 1 | -2/+1 |
| | | | | | Maintaining balance and strict ordering at the same time forces too much work onto the main thread. | ||||
* | bftw: Use a bftw_queue for files too | Tavian Barnes | 2024-01-31 | 1 | -26/+31 |
| | |||||
* | bftw: New bftw_queue abstraction | Tavian Barnes | 2024-01-31 | 1 | -74/+292 |
| | |||||
* | list: Return the next cursor from SLIST_INSERT() | Tavian Barnes | 2024-01-30 | 1 | -7/+10 |
| | |||||
* | eval: Squelch an uninitialized variable warning | Tavian Barnes | 2024-01-22 | 1 | -1/+3 |
| | |||||
* | ioq: Implement ioq_stat() | Tavian Barnes | 2024-01-18 | 3 | -10/+124 |
| | |||||
* | ioq: Refactor to take advantage of -Wswitch | Tavian Barnes | 2024-01-18 | 1 | -71/+91 |
| | |||||
* | stat: Expose bfs_{fstatat,statx}_flags() | Tavian Barnes | 2024-01-18 | 2 | -21/+47 |
| | |||||
* | stat: Expose bfs_stat{,x}_convert() | Tavian Barnes | 2024-01-18 | 2 | -103/+121 |
| | |||||
* | xspawn: Check for _POSIX_SPAWN in bfs_spawn_addfchdir() | Tavian Barnes | 2024-01-17 | 1 | -1/+1 |
| | |||||
* | fsade: Mark bfs_acl_tag_type() as maybe_unused | Tavian Barnes | 2024-01-17 | 1 | -0/+1 |
| | | | | | It's not used on at least macOS, which doesn't have ACL_{USER,GROUP}_OBJ or ACL_OTHER. | ||||
* | ioq: Use the negative errno convention | Tavian Barnes | 2024-01-13 | 5 | -26/+33 |
| | |||||
* | bfstd: New {error,errno}_is_like() functions | Tavian Barnes | 2024-01-13 | 5 | -21/+42 |
| | | | | | | | We used to have is_nonexistence_error() to consistently treat ENOENT and ENOTDIR the same. Recently, we started considering EFAULT the same as ENAMETOOLONG on DragonFly BSD to work around a kernel bug. Unify both of these behind a more generic interface. | ||||
* | config: Disable sys/acl.h on illumos | Tavian Barnes | 2024-01-09 | 1 | -1/+1 |
| | | | | | | Their ACL API is quite a bit different from most. Link: https://illumos.org/man/2/acl | ||||
* | eval: Check for xbasename() allocation failure | Tavian Barnes | 2024-01-07 | 1 | -1/+8 |
| | |||||
* | expr: Make expressions variadic | Tavian Barnes | 2024-01-07 | 8 | -890/+1719 |
| | | | | | | | | | Rather than only unary/binary expressions, we now support an arbitrary number of children. The optimizer has been re-written almost completely and now supports optimal reordering of longer expression chains, rather than just arm-swapping. Fixes #85. | ||||
* | list: New SLIST_HEAD() and SLIST_TAIL() macros | Tavian Barnes | 2024-01-07 | 1 | -3/+40 |
| | |||||
* | Work around DragonFly BSD kernel bug | Tavian Barnes | 2024-01-04 | 1 | -1/+13 |
| | | | | | | | | | DragonFly's x86_64 assembly implementation of copyinstr() checks the wrong pointer when deciding whether to return EFAULT or ENAMETOOLONG, causing it to always return EFAULT for overlong paths. Work around it by treating EFAULT the same as ENAMETOOLONG on DragonFly. Link: https://twitter.com/tavianator/status/1742991411203485713 | ||||
* | fsade: Fix ACL checks on DragonFly BSD | Tavian Barnes | 2024-01-03 | 1 | -9/+45 |
| | |||||
* | config: Disable xattrs on DragonFly BSD | Tavian Barnes | 2024-01-03 | 1 | -1/+1 |
| | | | | DragonFly is missing extattr_get_link() and extattr_list_{file,link}(). | ||||
* | config: Check for GCC >= 11 before using malloc attribute args | Tavian Barnes | 2024-01-03 | 1 | -3/+3 |
| | |||||
* | bit: Rename bswap{16,32,64}() | Tavian Barnes | 2024-01-03 | 1 | -16/+16 |
| | | | | | NetBSD already defines this in <sys/bswap.h>, so pick names that don't conflict. | ||||
* | xspawn: Check for NetBSD 10 before using posix_spawn_..._fchdir() | Tavian Barnes | 2024-01-02 | 1 | -1/+1 |
| | |||||
* | config: Polyfill __NetBSD_Prereq__ | Tavian Barnes | 2024-01-02 | 1 | -0/+4 |
| | |||||
* | config: Don't use target_clones on NetBSD | Tavian Barnes | 2024-01-02 | 1 | -1/+1 |
| | |||||
* | pwcache: Fix uninitialized pointers on OpenBSD | Tavian Barnes | 2024-01-02 | 1 | -4/+4 |
| | | | | | | | | | | | | | POSIX specifies that the get{pw,gr}*_r() functions store a NULL pointer to *result on error. However, OpenBSD does not always do this[1][2]: > if (bufsize < GETGR_R_SIZE_MAX) > return ERANGE; Work around it by explicitly initializing ret to NULL. [1]: https://github.com/openbsd/src/blob/e4829a9cc666f01ca5062d7fc15c20ab2d69229e/lib/libc/gen/getgrent.c#L135-L136 [2]: https://github.com/openbsd/src/blob/e4829a9cc666f01ca5062d7fc15c20ab2d69229e/lib/libc/gen/getgrent.c#L183-L184 |