summaryrefslogtreecommitdiffstats
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
* Implement -limit NTavian Barnes2024-03-204-1/+52
| | | | Closes: https://github.com/tavianator/bfs/issues/133
* config: Don't mix [[attr]] and __attribute__((attr))Tavian Barnes2024-03-191-6/+2
| | | | | GCC and Clang don't support combining the two attribute syntaxes in arbitrary order. For now, just use the GNU style.
* Re-run include-what-you-useTavian Barnes2024-03-1121-23/+26
|
* tests/xtime: Add tests for integer overflowTavian Barnes2024-03-101-1/+3
|
* xtime: Call tzset() from main() instead of lazilyTavian Barnes2024-03-076-66/+14
| | | | | | | | | | | | | POSIX specifies[1] that If a thread accesses tzname, daylight, or timezone directly while another thread is in a call to tzset(), or to any function that is required or allowed to set timezone information as if by calling tzset(), the behavior is undefined. So calling it lazily from arbitrary threads is risky. [1]: https://pubs.opengroup.org/onlinepubs/9699919799/functions/tzset.html
* Release 3.1.33.1.3Tavian Barnes2024-03-061-1/+1
|
* ioq: Copy ring_ops from the previous threadTavian Barnes2024-03-061-1/+4
| | | | | | Otherwise threads 2-N won't use io_uring at all! Oops. Fixes: 8bc72d6c ("ioq: Probe for supported io_uring operations")
* eval: Tweak status bar punctuationTavian Barnes2024-03-061-1/+1
|
* Release 3.1.23.1.2Tavian Barnes2024-02-291-1/+1
|
* diag: New bfs_diag() macroTavian Barnes2024-02-292-3/+27
|
* xtime: Fix some xgetdate() bugsTavian Barnes2024-02-281-9/+24
| | | | And add some more test cases.
* stat: Use errno_is_like(ENOSYS) for EPERM kludgeTavian Barnes2024-02-282-3/+5
|
* ioq: Probe for supported io_uring operationsTavian Barnes2024-02-281-18/+67
|
* ioq: Remove some branches from ioq_slot_{push,pop}()Tavian Barnes2024-02-181-12/+21
|
* ioq: Ensure ioq_ent is sufficiently alignedTavian Barnes2024-02-162-2/+9
| | | | | | | The natural alignment of struct ioq_ent is only 2 on m68k, so over-align it to at least 4 bytes on all platforms. Link: https://buildd.debian.org/status/fetch.php?pkg=bfs&arch=m68k&ver=3.1-1&stamp=1707699583
* Release 3.1.13.1.1Tavian Barnes2024-02-161-1/+1
|
* ioq: Add batched ioqq_push/pop operationsTavian Barnes2024-02-151-49/+127
|
* ioq: Don't push immediately in ioq_check_cancel()Tavian Barnes2024-02-151-10/+6
|
* ioq: Add a missing close() if bfs_opendir() failsTavian Barnes2024-02-151-0/+2
|
* ioq: Don't use the symbolic IO_WQ_[UN]BOUND indicesTavian Barnes2024-02-141-2/+2
| | | | They are only available since liburing 2.2, which is newer than CI.
* ioq: Factor out io_uring initializationTavian Barnes2024-02-141-37/+73
|
* ioq: Make -j also limit the io_uring worker threadsTavian Barnes2024-02-141-0/+9
|
* ioq: Replay IOQ_STOP messages rather than spam themTavian Barnes2024-02-141-4/+5
|
* ioq: Pack ioq_ent args structsTavian Barnes2024-02-141-3/+3
|
* bftw: Document which bftw_file nodes go with which listsTavian Barnes2024-02-141-3/+17
|
* expr: Pack struct bfs_expr a bitTavian Barnes2024-02-141-15/+9
|
* stat: Pack struct bfs_stat a bitTavian Barnes2024-02-142-28/+24
|
* eval: Add thousands separators to -statusTavian Barnes2024-02-121-2/+2
|
* sanity: Don't use self-init for uninit()Tavian Barnes2024-02-123-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_STRIDETavian Barnes2024-02-121-20/+5
| | | | Benchmarks show it hurts more than it helps.
* ioq: Shrink the io_uringsTavian Barnes2024-02-121-4/+2
|
* Release 3.13.1Tavian Barnes2024-02-061-1/+1
|
* opt: Enable BFTW_STAT when profitableTavian Barnes2024-02-062-0/+93
|
* ctx: Fill in ctx->threads earlierTavian Barnes2024-02-063-23/+20
|
* color: New API to check if stat() is necessaryTavian Barnes2024-02-062-6/+11
|
* bftw: stat() files asynchronouslyTavian Barnes2024-02-063-211/+506
|
* mtab: Take the basename directly in bfs_might_be_mount()Tavian Barnes2024-02-053-6/+5
| | | | This avoids some hot xbaseoff() calls.
* bftw: Always block in bftw_pop_dir() with multiple threadsTavian Barnes2024-02-011-11/+22
|
* bftw: Don't immediately pin open directoriesTavian Barnes2024-02-011-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 threadTavian Barnes2024-02-011-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() helperTavian Barnes2024-02-011-7/+2
|
* bfstd: Don't shadow FreeBSD's fflags_tTavian Barnes2024-02-011-4/+4
|
* bftw: Actually stop if the callback returns BFTW_STOPTavian Barnes2024-01-311-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() callTavian Barnes2024-01-311-0/+1
|
* bftw: Optimize -s -j2 searchesTavian Barnes2024-01-311-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 tooTavian Barnes2024-01-311-26/+31
|
* bftw: New bftw_queue abstractionTavian Barnes2024-01-311-74/+292
|
* list: Return the next cursor from SLIST_INSERT()Tavian Barnes2024-01-301-7/+10
|
* eval: Squelch an uninitialized variable warningTavian Barnes2024-01-221-1/+3
|
* ioq: Implement ioq_stat()Tavian Barnes2024-01-183-10/+124
|