Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
50 most recent check-ins
|
2026-11-12
| ||
| 23:29 | UMSFUSE version 1.1.1 leaf check-in: 6c8abf6aca user: chungy tags: release, trunk, version-1.1.1 | |
| 18:21 | UMSFUSE version 1.1.0 check-in: 541a1ec04e user: chungy tags: release, trunk, version-1.1.0 | |
| 18:00 |
Implement directory caching for umsfsck and likewise improve its performance massively.
check-in: 4359e5e59a user: chungy tags: trunk
| |
| 17:40 |
fsck_cache_test.sh: the large-tree timing checks take the best of up to three tries.
In 300 runs of the test, four at a time with the box short of memory, two runs that were running side by side measured 34 s of CPU time for -n on the upper-case tree (0.3 s on the lower-case one), within 0.1 s of each other; the other 298 measured at most 0.6 s, as did 100 more runs of that check alone. CPU time does not grow with a busy CPU, but it can when the kernel has to reclaim memory or reread directorie... closed check-in: 335dc03384 user: grok tags: fsck-perf | |
| 16:57 |
Merge trunk into fsck-perf.
Brings in the hard-link index of umsdosfs, the hlink_format_test fix and tests/clockshim.c.
| |
| 16:56 |
fsck_cache_test.sh: compare the trees without depending on the second each run happened to take, and time umsfsck by its CPU time.
The comparison of each run with the cache off against the same run with the cache on, at 4K and without the stat check masked only the ctime of an EMD record from the start of the runs on. A repair such as -y -s also stamps a record's atime (and some its mtime) with the time it ran, so two runs on either side of a second boundary gave records differing in one byte, ... check-in: d8e1603bcf user: grok tags: fsck-perf | |
| 16:12 |
umsfsck -n: the scratch copy reads each host directory's listing once, so host names that are not lower case no longer make it quadratic.
For every host name that is not all lower case (a FAT listing shows them upper case), the copy asked ums_host_alias whether the lower-case spelling was an alias, and ums_host_lookup read the whole host directory to answer; at the end of each directory, every record's host name was looked up the same way, to remember lookup errors for the check. The directory ... check-in: 2e054a3fc2 user: grok tags: fsck-perf | |
| 15:32 |
Document the directory cache in umsfsck.
| |
| 15:32 |
umsfsck: UMSFSCK_CACHE_STATS, and a test of the cache.
UMSFSCK_CACHE_STATS=FILE appends the directory cache's counters to FILE at the end of the run, in the format umsdosfs uses for UMSDOSFS_CACHE_STATS. New tests/fsck_cache_test.sh, run from run_tests.sh:
| |
| 15:27 | umsfsck: link count and visibility fixes read the record through the cache instead of a copy of the whole directory (work in progress on this branch). check-in: 50a65b67ff user: grok tags: fsck-perf | |
| 15:25 | umsfsck -o: hash maps for the pointers per hidden file (collapse_singles), the renamed hidden files (fix_renamed_targets) and the host names that change (compact_dir), and their paths held by pointer; ums_alloc's first fit on a copy found on a map of the slots instead of sorting the records for each call (work in progress on this branch). check-in: d50e622b97 user: grok tags: fsck-perf | |
| 15:20 |
Remove -j$(nproc) from the README: while beneficial, it looks “weird” and encourages a copy-paste job. Plain single-threaded make doesn’t take too long anyhow.
check-in: dc97da8e1f user: chungy tags: trunk
| |
| 15:17 | changes: document hard link index improvement check-in: aab64ae1da user: chungy tags: trunk | |
| 15:15 | umsfsck -n: the cache is turned on after the scratch copy (it reads control files without O_NOATIME); the copy's lookups of names listed as they are skip the host lookup (work in progress on this branch). check-in: 78e58d555a user: grok tags: fsck-perf | |
| 15:14 | umsfsck: a directory's duplicate names, used host names, name conflicts and subdirectory names are found through hash maps and a binary search, not by comparing every pair (work in progress on this branch). check-in: 0d6b61517d user: grok tags: fsck-perf | |
| 15:11 |
umsfsck: hidden link files found by host path through a sorted index, and the hard-link lists hold their strings by pointer (work in progress on this branch).
find_hid_by_host looked up the host name of every hidden file for each pointer (pointers times hidden files directory opens). The index is made once and again only after a change to the host, counted through ums_mod_before. The pointer, hidden file and collapse candidate lists kept three 4 KiB arrays per entry (some 300 MB for 20,000 smal... check-in: ed3ed6651f user: grok tags: fsck-perf | |
| 15:09 |
umsfsck: use the library's directory cache (work in progress on this branch).
Without the cache every ums_host_lookup reads the whole host directory, so checking a directory is quadratic in its size and every hard-link resolution rereads each directory on its path. umsfsck now turns the cache on (128 MiB) for the check, -o and the scratch copy of -n (dropped after the copy, whose directories are written past it). The one direct control-file write, -o's compaction, tells the cache through the ne... check-in: 7386c7b262 user: grok tags: fsck-perf | |
| 15:06 |
umsdosfs now has a hard link index cache, also producing massive performance improvements with large trees and large numbers of link relations. Intermittent test failures related to host time changing underneath the test have also been repaired.
check-in: 8cc4092f3e user: chungy tags: trunk
| |
| 08:41 |
hlink_format_test: fix two intermittent failures, both in the test. umstar and umsdosfs are unchanged.
"archives differ by format" (about 6% of runs on an idle machine, 4% pinned to one CPU): the three trees archived by umstar (new format, old format, old format with a link root) are made one after the other by separate mounts, with the clock's times. umstar records each record's mtime (ustar header) and its atime and ctime (pax records) in whole seconds, so when the trees were made on either s... closed check-in: 8ea66b04fc user: grok tags: hlink-format-flake | |
| 08:38 | umsdosfs: a hard-link index, so the pointer upkeep no longer walks the whole tree. A second link to a linked file, removing the next-to-last name of a group, and renaming a directory or a hard-link name used to scan every directory and every pointer of the tree (normalize_links, collapse_last, fix_pointers, each through scan_ptrs) and then re-mirror the host times of every record (hsync_tree). With the directory cache on, they now work from an index of the pointers; -o umscache=0 turns it off al... closed check-in: b3e4966836 user: grok tags: hlink-index | |
| 07:47 |
umsdosfs now has a directory cache and has huge performance gains as a result.
check-in: 2666f587e2 user: chungy tags: trunk
| |
| 07:39 |
umsls displays listings in columns by default.
check-in: 3d1b7b9aca user: chungy tags: trunk
| |
| 07:21 |
umsls column tests: no result depends on the caller's terminal size or COLUMNS. script(1) gives its pseudo-terminal the size of the terminal it is run from, and the terminal's width comes before COLUMNS (as in ls), so in a wide terminal two umsls_columns_test cases used that width and failed: "terminal: columns down by default, COLUMNS honoured" and "terminal -m".
| |
| 07:17 |
umsdosfs: one malloc arena, and the tree is unlocked before the cache counters are written at unmount.
The reported umscache=0 regression on a flat directory of 20,000 files (ls -l 594 s cold, RSS 68 MiB, against trunk's 173 s and 20 MiB) does not come from the cache code: with umscache=0 every library entry point returns to trunk's code before touching the cache, and a gprof profile of ls -l over 8,000 files shows the same functions with the same call counts as trunk (128 million ums_parse/ums... closed check-in: 0a85145f93 user: grok tags: dircache | |
| 06:56 |
umsls: multi-column output like GNU ls. On a terminal entries are listed in columns sorted down, otherwise one per line; new options -x, -1, --format=WORD, -w/--width=COLS and -T/--tabsize=COLS. The layouts follow GNU ls 9.12 byte for byte.
| |
| 05:55 |
umsfsck -n behaves better, not copying file data into the tmp directory, and deleting it following a process termination.
check-in: 247294db6d user: chungy tags: trunk
| |
| 05:32 |
fsck_scratch_test: fix two failures seen on other systems, and make umsfsck's prompt wait race-free.
"-n changed the tree": only directory access times differed. umsfsck -n did not move them (it reads the tree with O_NOATIME, as trunk does; neither moves any access time even on a strictatime tmpfs). The test itself did: while -n was held, it listed the tree with find, between the two snapshots. On relatime an access time not newer than the change time is updated, and tar leaves the two equal, s... closed check-in: 7e6deded6f user: grok tags: fsck-scratch | |
| 05:08 |
umsdosfs: a directory cache. Directories once read are kept in memory (decoded EMD records and the host listing, with hash indexes), so repeated lookups, getattr, access, readlink and readdir no longer read the host directory and the whole EMD again. New option -o umscache=SIZE (bytes, K/M/G suffixes, default 128M, 0 turns the cache off and keeps the previous behaviour).
Design (src/ums_dcache.c, src/ums_dcache.h):
| |
| 04:25 |
umsfsck: -n's scratch copy holds only the file data umsfsck reads, and a signal (SIGINT, SIGTERM, SIGHUP) removes the scratch copy, or without -n stops between repairs.
Scratch copy (-n): every host name, type, mode, mtime and atime is copied as before, and now the owner too where the copy may set it (root, or a group of the caller's own), but data only for:
| |
|
2026-11-11
| ||
| 20:47 | Replace “Suggested downloads” link with a direct link to the current version. check-in: e004f4512f user: chungy tags: trunk | |
|
2026-11-10
| ||
| 17:55 | Add a small list of distributions that took advantage of UMSDOS, and a cautionary note about stability in > 2.4.21. check-in: cd37f7a983 user: chungy tags: trunk | |
| 07:27 | UMSDOS version 1.0.0 check-in: 961d20ae32 user: chungy tags: release, trunk, version-1.0.0 | |
| 07:21 | Document link-root and old-hard-links in the Common Options check-in: 4908a7614e user: chungy tags: trunk | |
| 07:16 | Replace the README with something more friendly. check-in: d0dce3c9b9 user: chungy tags: trunk | |
| 06:22 | Fill out UMSDOS specification in Texinfo document. check-in: 5796705bba user: chungy tags: trunk | |
| 06:20 |
Make sure non-lowercase variants of the --LINUX-.--- file name are accepted.
check-in: fef53d4492 user: chungy tags: trunk
| |
| 06:14 |
emd_name_case_test: run in the C locale, so the umsls -m check does not depend on the caller's collation.
umsls sorts names with strcoll, as ls does, and the expected listing was written in C (byte) order. Under en_US.UTF-8 the collation ignores the punctuation and orders lower case before upper case, so the same six entries came out as --linuX-.---, --lInux-.---, --Linux-.---, --LiNuX-.---, --LINUX-.---, --LINUX-.--x and the check failed. umsls is unchanged: sorting by locale is what ls does. ... closed check-in: f3008d4950 user: grok tags: linux-emd-name-case | |
| 04:29 |
Only the exact name --linux-.--- is refused; its case variants are ordinary names, as in Linux 2.x. Tests on a Slackware system show that Linux UMSDOS refuses --linux-.--- (EIO) but accepts --LINUX-.---, --Linux-.--- and every other spelling that is not all lower case. UMSFUSE refused the name in any case: umsdosfs gave EINVAL for creating, linking or renaming to any variant, and umstar -x skipped such members as "name is --linux-.---".
| |
| 04:28 |
Correct the entry-name rules in the UMSDOS specification chapter of the Info manual. Tests on a Slackware system show that Linux UMSDOS refuses a name containing DEL (0x7f) with EIO, and refuses the exact name --linux-.--- with EIO, while case variants such as --LINUX-.--- and --Linux-.--- are accepted as ordinary names. The manual said Linux 2.x accepted both, and that UMSFUSE refused --linux-.--- in any case.
| |
| 04:02 | Replace AsciiDoc manpages with plain groff. check-in: d439237dfd user: chungy tags: trunk | |
| 03:43 |
Correct the hard-link pointer format history in the Info manual.
The new format is the one used by the UMSDOS driver's internal version 0.85g, which first appears in Linux 2.2.15 and 2.4.10. That dating matches the Linux 2.2 and 2.4 sources, and has been checked on Slackware systems running kernels from before and after the change. References to 2.2.14 for this change now say 2.2.15. The earlier note that the sources dated the format to 2.2.11 and 2.3.2, and the "Unverified" remark on a root-le... check-in: 2a923cd1a2 user: grok tags: umsdos-spec | |
| 03:43 |
Give the manual pages a generated date and version from the Fossil manifest.
doc/mkversion already extracts those from the manifest for the Info manual. It now also writes doc/version.man, which supplies the date and the UMSFUSE version used in each page's .TH line, in the same form GNU coreutils uses in the footer. The time and check-in hash are not included.
| |
| 02:23 |
Convert the manual pages from AsciiDoc to hand-written groff.
The pages are terse references now that the Info manual holds the full documentation, so they no longer need a generator. Each doc/*.adoc is replaced by an equivalent page written with the man macros (umscat.1, umscp.1, umsdosfs.1, umsls.1, umsstat.1, umstar.1, umsfsck.8), with the same sections and wording.
| |
| 02:19 |
Write the UMSDOS specification chapter of the Info manual.
Replace the TODO in "UMSDOS specification" and fill in its sections: directory layout, the 64-byte slot and record format with an annotated dump from the sample tree, the name mangling algorithm with worked examples, the metadata fields and host permissions, timestamps, hard-link records and the two pointer formats, special files, the PowerPC layout and its detection, and the invariants umsfsck checks. Behaviour of the Linux 2.x driver... check-in: 492d77dcc2 user: grok tags: umsdos-spec | |
| 01:50 | Bring over info documentation to trunk check-in: 0c1145e19e user: chungy tags: trunk | |
| 01:11 | Host write and execute permissions follow the UMSDOS mode, if possible. Host directories are exempt and always remain writable. check-in: f44ea42d14 user: chungy tags: trunk | |
| 00:52 |
Make the test suite run without prompts on a terminal
With write bits passed through and access(2) honoring the shown UMSDOS mode, some files the tests delete are write-protected (the sample tree's exec.exe and named-pipe, control-chars, link2.txt and link3.txt, and the rw_test pointer hard3). GNU rm asks before removing those when stdin is a terminal, so `make test` waited for an answer.
| |
| 00:21 |
Execute bits: the umsdosfs view answers access(2) from the UMSDOS mode, and host execute bits follow the record where the host keeps its own (not on FAT).
The view already reported the record's mode in getattr, but u_access only resolved the path and returned 0, so every access(X_OK) succeeded: find -type f -executable listed every file, test -x passed and bash's command completion offered any file (running one was already refused by the kernel from the mode). u_access now checks the mode it sh... closed check-in: cbb84ec91e user: grok tags: host-write-bits | |
| 00:03 | Finish documenting umstar in the Info format. closed check-in: 67ce2612c1 user: chungy tags: info | |
|
2026-11-09
| ||
| 23:51 | Isolate and protected test runs in their own $TMPDIR. check-in: bee6c22e7a user: chungy tags: trunk | |