History log of /src/sbin/fsck_lfs |
Revision | Date | Author | Comments |
1.24 | 20-Apr-2024 |
rillig | {usr.,}{s,}bin: replace LINT_SUPPORTED with the standard NOLINT
While here, re-enable lint in those cases where lint was skipped due to a bug in interpreting abstract types, which was fixed in cgram.y 1.469 from 2023-08-02.
|
1.23 | 14-Sep-2021 |
rillig | sbin: enable lint for almost all programs
The programs fsck_lfs and newfs_lfs both trigger a longstanding bug in lint that is difficult to fix, so ignore them for now.
For resize_ffs, lint thinks that 'struct fs' is incomplete, but GCC and Clang accept it. Needs further investigation.
|
1.22 | 07-Sep-2020 |
mrg | remove GCC_NO_ADDR_OF_PACKED_MEMBER now lfs_accessors.h works.
|
1.21 | 06-Sep-2020 |
mrg | add support for new GCC 9 warnings that may be too much to fix right now. new address-of-packed-member and format-overflow warnings have new GCC_NO_ADDR_OF_PACKED_MEMBER amd GCC_NO_FORMAT_OVERFLOW variables to remove these warnings.
apply to a bunch of the tree. mostly, these are real bugs that should be fixed, but in many cases, only by removing the 'packed' attribute from some structure that doesn't really need it. (i looked at many different ones, and while perhaps 60-80% were already properly aligned, it wasn't clear to me that the uses were always coming from sane data vs network alignment, so it doesn't seem safe to remove packed without careful research for each affect struct.) clang already warned (and was not erroring) for many of these cases, but gcc picked up dozens more.
|
1.20 | 08-Jun-2013 |
dholland | Redo these changes properly: -r1.12 libexec/lfs_cleanerd/Makefile -r1.15 sbin/fsck_lfs/Makefile -r1.6 sbin/newfs_lfs/Makefile
hi ad@
|
1.19 | 08-Jun-2013 |
dholland | Tidy up the LFS userland build hacks. Don't use -I${NETBSDSRCDIR}/sys; don't include files other than the exported LFS headers, which are lfs.h, lfs_inode.h, and (for now) lfs_extern.h.
|
1.18 | 06-Jun-2013 |
dholland | Cleanups and hacks to make lfs userland stuff build: - lfs_cksum.c doesn't actually need ulfs_inode.h any more. - neither does lfs_itimes.c. - add hacks to fsck_lfs to make it compile. - add hacks to newfs_lfs to make it compile. - fix warning in ulfs_quota.c when quotas are fully disabled (as I guess is happening with the rumpity version)
XXX: This commit adds -I${NETBSDSRCDIR}/sys to the Makefiles for XXX: fsck_lfs, newfs_lfs, and lfs_cleanerd. This needs to be cleaned XXX: up ASAP; but I consider this less problematic in the short term XXX: than spewing ulfs_*.h into /usr/include.
|
1.17 | 06-Aug-2009 |
pooka | branches: 1.17.6; 1.17.12; Define syscalls of lfs userspace tools (cleaner, mainly) through a struct called kernelops, which contains standard system calls for the normal case and rump system calls for the rump case.
Make it possible to run the lfs cleaner in a library fashion (taking the quick route with the implementation).
|
1.16 | 11-Apr-2009 |
lukem | Enable WARNS=4 by default except for: dump dump_lfs fsck_ffs fsck_lfs fsdb mount_smbfs newfs_ext2fs newfs_lfs resize_lfs setkey
|
1.15 | 28-Dec-2007 |
ad | branches: 1.15.12; Make it build with src/sys from the vmlocking2 branch.
|
1.14 | 26-Aug-2006 |
christos | branches: 1.14.8; 1.14.10; Programs that use efun.
|
1.13 | 18-Jul-2006 |
perseant | Various improvements to fsck_lfs, to wit:
* Add lfs_balloc capability to the lfs library. * Extend the Ifile if we run out of free inodes when creating lost+found. * Don't roll forward if we have allocated a lost+found, to avoid conflicts when adding new files in roll-forward. * Make some messages slightly more verbose (e.g. include inode number, and use pwarn() instead of printf() so the messages include the device name when preening). * Change superblock detection/avoidance to use the offset table in the primary superblock, rather than looking at the contents. * Be more verbose about various operations when passed the -d flag, especially roll-forward. * Be more careful about dirops during roll forward, since the cleaner can sometimes write blocks from dirop vnodes. Detect and avoid this problem. * Always check the free list, even if given -i; if we're going to write it we have to check it first. * Mark inodes dirty when blocks are found during roll forward, so the inodes are written with the new block locations. * Update size of inodes if blocks beyond EOF are found during roll forward. * Fix segment accounting for blocks and inodes found during roll forward. * Report statistics on roll forward: how many new/deleted/moved files and how many updated blocks (or "nothing new"). * Don't care if the device being checked is really a device, if we have been passed the -f flag (to facilitate automated testing). * When writing to the disk, use the current time in the segment headers rathern than time 0. * When passed the -i flag, locate the partial segment containing the Ifile inode and use that to calculate lfs_offset, lfs_curseg, lfs_nextseg. (Again for automated testing.)
|
1.12 | 17-Apr-2006 |
perseant | Remove the free list ordering/disordering code, since the kernel now keeps the list in order (ordering it on mount).
Regularize error messages: these are now all in ALL CAPS, with all hex numbers (not reported in caps) prefixed by 0x. (The non-fsck-specific messages are an exception to this all-caps rule.)
|
1.11 | 13-Sep-2005 |
christos | rename lfs.h to lfs_user.h so that it does not conflict.
|
1.10 | 08-Jun-2005 |
perseant | Use the correct method to create a new inode, when we allocate lost+found.
Correct uninitialized variable issues in pass6.c and dir.c (PR#30411 and PR#30394, respectively).
|
1.9 | 03-Jun-2005 |
lukem | Disable -Wuninitialized on dir.c (until PR 30394 is addressed) and pass6.c (until PR 30411 is addressed)
|
1.8 | 20-Jan-2005 |
xtraeme | WARNS=2 is the default defined in sbin/Makefile.inc. (thanks wiz)
|
1.7 | 19-Jan-2005 |
xtraeme | ANSIfy, WARNS=2
|
1.6 | 28-Mar-2003 |
perseant | Add working writing ability to fsck_lfs, including roll-forward, based on a partial-segment writer ported from the kernel.
|
1.5 | 19-Aug-2002 |
lukem | Use ${NETBSDSRCDIR}/some/path instead of ${.CURDIR}/../../some/path
|
1.4 | 19-Oct-2000 |
fvdl | Disable VERBOSE_BLOCKMAP by default; it allocates huge amounts of memory, causing immediate fsck_lfs failure for big filesystems.
|
1.3 | 30-May-2000 |
perseant | branches: 1.3.2; Check for cycles in the inode free list, and for free inodes not on the free list.
|
1.2 | 16-May-2000 |
perseant | branches: 1.2.2; fsck_lfs can now write to the filesystem, allowing it to correct most (though still not all) errors in a damaged lfs. Segment byte accounting is corrected in pass 5. "fsck_lfs -p" will do a partial roll-forward, verifying the checkpoint from the newer superblock. fscknames[] is updated so that fsck knows about fsck_lfs.
|
1.1 | 18-Mar-1999 |
perseant | Initial checkin of fsck_lfs. This version cannot do any repair (-p flag does nothing, and one of -p or -n is required) but can be useful as a diagnostic tool.
|
1.2.2.1 | 22-Jun-2000 |
minoura | Sync w/ netbsd-1-5-base.
|
1.3.2.1 | 19-Oct-2000 |
he | Pull up revision 1.4 (requested by fvdl): Fix a problem where fsck_lfs will dump core (runs out of memory) on a file system above average in size.
|
1.14.10.1 | 18-Feb-2008 |
mjf | Sync with HEAD.
|
1.14.8.1 | 09-Jan-2008 |
matt | sync with HEAD
|
1.15.12.1 | 13-May-2009 |
jym | Sync with HEAD.
Third (and last) commit. See http://mail-index.netbsd.org/source-changes/2009/05/13/msg221222.html
|
1.17.12.1 | 23-Jun-2013 |
tls | resync from head
|
1.17.6.1 | 22-May-2014 |
yamt | sync with head.
for a reference, the tree before this commit was tagged as yamt-pagecache-tag8.
this commit was splitted into small chunks to avoid a limitation of cvs. ("Protocol error: too many arguments")
|
1.21 | 03-Apr-2020 |
joerg | branches: 1.21.8; Avoid common symbols for fsck_lfs.
|
1.20 | 30-Mar-2018 |
christos | branches: 1.20.2; PR/51418: Jose Luis Rodriguez Garcia: Fix incore src/sbin/fsck_lfs/bufcache.c XXX: pullup-8, pullup-7
|
1.19 | 25-Aug-2016 |
christos | branches: 1.19.6; 1.19.12; PR/51440: Jose Luis Rodriguez Garcia: Use the standard queue.h macro instead of playing with the TAILQ's entrails.
|
1.18 | 18-Aug-2016 |
christos | PR/51422: Jose Luis Rodriguez Garcia: completely remove B_NEEDCOMMIT
|
1.17 | 18-Aug-2016 |
christos | PR/51422: Jose Luis Rodriguez Garcia: Remove unnecessary assignment.
|
1.16 | 31-Jul-2016 |
dholland | PR 51264 Jose Luis Rodriguez Garcia: lfs userland bufcache rehash is broken
|
1.15 | 29-Mar-2015 |
chopps | branches: 1.15.2; - Fix fallout for recent bread() change (removing cred arg).
|
1.14 | 19-Oct-2013 |
christos | branches: 1.14.4; 1.14.6; 1.14.10; fix unused variable warnings.
|
1.13 | 16-May-2008 |
hannken | branches: 1.13.18; 1.13.24; Make sure all cached buffers with valid, not yet written data have been run through copy-on-write. Call fscow_run() with valid data where possible.
The LP_UFSCOW hack is no longer needed to protect ffs_copyonwrite() against endless recursion.
- Add a flag B_MODIFY to bread(), breada() and breadn(). If set the caller intends to modify the buffer returned.
- Always run copy-on-write on buffers returned from ffs_balloc().
- Add new function ffs_getblk() that gets a buffer, assigns a new blkno, may clear the buffer and runs copy-on-write. Process possible errors from getblk() or fscow_run(). Part of PR kern/38664.
Welcome to 4.99.63
Reviewed by: YAMAMOTO Takashi <yamt@netbsd.org>
|
1.12 | 28-Apr-2008 |
martin | branches: 1.12.2; Remove clause 3 and 4 from TNF licenses
|
1.11 | 08-Oct-2007 |
ad | branches: 1.11.8; 1.11.10; Give brelse() a second argument so that it matches the kernel. fsck_lfs now compiles again.
|
1.10 | 09-Nov-2006 |
christos | branches: 1.10.8; Fix malloc/realloc/calloc issues: always check and exit, use EEXIT instead of 8.
|
1.9 | 19-Apr-2006 |
christos | "struct ucred" should not be exposed to userland. Instead make it a "void *" since it is not really used.
|
1.8 | 17-Mar-2006 |
rumble | Check for allocation failures in malloc, calloc, realloc, asprintf, and vasprintf and try to handle them.
|
1.7 | 20-May-2005 |
perseant | Fail gracefully if we are asked to expand the buffer cache hash table size when there is no memory available to do so. Use the uvnode's strategy routine to retrieve data from the device, rather than always using pread(). Add a buffer header flag that specifies external management of the buffer's data area.
All of this in support of a new cleaner, which is not included in this commit.
|
1.6 | 11-Apr-2005 |
perseant | Be more efficient with the hash tables for the buffer and vnode caches.
Note that roll-forward can add more inodes to the filesystem; don't overflow the tables but reallocate them.
|
1.5 | 06-Apr-2005 |
perseant | Note that fsck_lfs may not know beforehand whether a given block is a superblock or a segment summary, and tries both. These may be different sizes. Fix a broken assertion that they are the same size.
Fixes PR # 29151.
|
1.4 | 19-Mar-2005 |
perseant | Buffer cache fixes: make sure we initialize all the hash lists, and allow the cache to grow in size irrespective of how many buffers may be in the locked queue, since we can't write those in any case. Prevents fsck_lfs from spinning when it has too much to write.
|
1.3 | 26-Feb-2005 |
perseant | branches: 1.3.2; Various minor LFS improvements:
* Extend the lfs library from fsck_lfs(8) so that it can be used with a not-yet-existent LFS. Make newfs_lfs(8) use this library, so it can create LFSs whose Ifile is larger than one segment. * Make newfs_lfs(8) use strsuftoi64() for its arguments, a la newfs(8). * Make fsck_lfs(8) respect the "file system is clean" flag. * Don't let fsck_lfs(8) think it has dirty blocks when invoked with the -n flag.
|
1.2 | 31-Mar-2003 |
perseant | branches: 1.2.4; Check inode free list tail pointer as well as head pointer, and write both into the CLEANERINFO block of the Ifile as well as into the superblock. Make preen update both superblocks.
|
1.1 | 28-Mar-2003 |
perseant | Add working writing ability to fsck_lfs, including roll-forward, based on a partial-segment writer ported from the kernel.
|
1.2.4.1 | 10-May-2005 |
riz | Pull up the following revisions (requested by perseant in ticket #1281):
1.8 sys/ufs/lfs/TODO 1.75 sys/ufs/lfs/lfs.h (via patch) 1.74 sys/ufs/lfs/lfs_alloc.c (via patch) 1.49, 1.51 sys/ufs/lfs/lfs_balloc.c (1.51 via patch) 1.78 sys/ufs/lfs/lfs_bio.c 1.62 sys/ufs/lfs/lfs_extern.h (via patch) 1.156 sys/ufs/lfs/lfs_segment.c (via patch) 1.48 sys/ufs/lfs/lfs_subr.c 1.101 sys/ufs/lfs/lfs_syscalls.c 1.163 sys/ufs/lfs/lfs_vfsops.c (via patch) 1.134 sys/ufs/lfs/lfs_vnops.c (via patch) 1.61 sys/ufs/ufs/ufs_readwrite.c (via patch)
1.20 libexec/lfs_cleanerd/clean.h (via patch) 1.52 libexec/lfs_cleanerd/cleanerd.c (via patch) 1.41 libexec/lfs_cleanerd/library.c (via patch)
1.4 regress/sys/fs/lfs/newfs_fsck/Makefile 1.2 regress/sys/fs/lfs/newfs_fsck/mkfs_mount 1.2 regress/sys/fs/lfs/newfs_fsck/smallfiles 1.3 sbin/fsck_lfs/bufcache.c 1.3 sbin/fsck_lfs/bufcache.h 1.3 sbin/fsck_lfs/lfs.h 1.8 sbin/fsck_lfs/lfs.c (via patch) 1.8 sbin/fsck_lfs/pass3.c (via patch) 1.18 sbin/fsck_lfs/pass0.c (via patch) 1.18 sbin/fsck_lfs/utilities.c (via patch) 1.7 sbin/fsck_lfs/segwrite.c 1.19 sbin/fsck_lfs/setup.c (via patch) 1.3 sbin/newfs_lfs/Makefile 0 sbin/newfs_lfs/lfs.c (yes, remove it) 1.1 sbin/newfs_lfs/make_lfs.c 1.15 sbin/newfs_lfs/newfs.c (via patch)
Various minor LFS improvements.
Kernel:
* Note when lfs_putpages(9) thinks it is not going to be writing any pages before calling genfs_putpages(9). This prevents a situation in which blocks can be queued for writing without a segment header. * Correct computation of NRESERVE(), though it is still a gross overestimate in most cases. Note that if NRESERVE() is too high, it may be impossible to create files on the filesystem. We catch this case on filesystem mount and refuse to mount r/w. * Allow filesystems to be mounted whose block size is == MAXBSIZE. * Somewhere along the line, ufs_bmaparray(9) started mangling UNWRITTEN entries in indirect blocks again, triggering a failed assertion "daddr <= LFS_MAX_DADDR". Explicitly convert to and from int32_t to correct this. Should fix PR #29045. * Add a high-water mark for the number of dirty pages any given LFS can hold before triggering a flush. This is settable by sysctl, but off (zero) by default. * Be more careful about the MAX_BYTES and MAX_BUFS computations so we shouldn't see "please increase to at least zero" messages. * Note that VBLK and VCHR vnodes can have nonzero values in di_db[0] even though their v_size == 0. Don't panic when we see this. Fixes PR #26680. * Change lfs_bfree to a signed quantity. The manner in which it is processed before being passed to the cleaner means that sometimes it may drop below zero, and the cleaner must be aware of this. * Never report bfree < 0 (or higher than lfs_dsize) through lfs_statfs(9). This prevents df(1) from ever telling us that our full filesystems have 16TB free. * Account space allocated through lfs_balloc(9) that does not have associated buffer headers, so that the pagedaemon doesn't run us out of segments. * Return ENOSPC from lfs_balloc(9) when bfree drops to zero. * Address a deadlock in lfs_bmapv/lfs_markv when the filesystem is being unmounted. Because vfs_busy() is a shared lock, and lfs_bmapv/lfs_markv mark the filesystem vfs_busy(), the cleaner can be holding the lock that umount() is blocking on, then try to vfs_busy() again in getnewvnode().
cleaner:
* Adapt lfs_cleanerd to use the fcntl call to get the Ifile filehandle, so it need not be in the namespace. * Make lfs_cleanerd be more careful when there are very few available segments. * Make lfs_cleanerd less verbose when the filesystem is unmounted.
newfs_lfs, fsck_lfs, and regression:
* Extend the lfs library from fsck_lfs(8) so that it can be used with a not-yet-existent LFS. Make newfs_lfs(8) use this library, so it can create LFSs whose Ifile is larger than one segment. Addresses PR #11110. * Make newfs_lfs(8) use strsuftoi64() for its arguments, a la newfs(8). * Make fsck_lfs(8) respect the "file system is clean" flag. * Don't let fsck_lfs(8) think it has dirty blocks when invoked with the -n flag. * Remove the Ifile from the filesystem namespace. The cleaner now uses a fcntl call on the root inode to find the Ifile filehandle. (As a side-effect, addresses PR #29144.)
|
1.3.2.1 | 07-May-2005 |
tron | Apply patch (requested by perseant in ticket #242): * fsck_lfs buffer cache fixes, including PR #29151 * Change fsck_lfs phase 0 message to reflect reality * fsck_lfs: check phase 5 (cleanerinfo accounting) even on roll-forward * Keep better track of the free list during roll-forward, avoiding a core dump * Improve hash table use for fsck_lfs buffer and vnode cache * Document fsck_lfs flag -f, and implement -q * Add resize_lfs, including kernel support * Add LFS to mountd's list of exportable filesystem types * Make the LFS lkm work again [christos@] * Add MP locking to the LFS kernel subsystem * Fix pager_map deadlock in lfs_putpages() * Avoid incomplete file extension that looks like "partial truncation" to fsck * Use lfs_malloc for cleaner malloc, since the cleaner often runs in low-memory conditions. * Use splay trees, not hash table, to track page allocation for write. * Fix mkdir panic on full fs * Fix page accounting leak by counting differently. * Use rightly named structure for lfs_getattr [skrll@] * Cosmetic changes for readability.
|
1.10.8.1 | 06-Nov-2007 |
matt | sync with HEAD
|
1.11.10.1 | 18-May-2008 |
yamt | sync with head.
|
1.11.8.1 | 02-Jun-2008 |
mjf | Sync with HEAD.
|
1.12.2.1 | 23-Jun-2008 |
wrstuden | Sync w/ -current. 34 merge conflicts to follow.
|
1.13.24.1 | 20-Aug-2014 |
tls | Rebase to HEAD as of a few days ago.
|
1.13.18.1 | 22-May-2014 |
yamt | sync with head.
for a reference, the tree before this commit was tagged as yamt-pagecache-tag8.
this commit was splitted into small chunks to avoid a limitation of cvs. ("Protocol error: too many arguments")
|
1.14.10.1 | 14-Jun-2018 |
martin | Pull up following revision(s) (requested by maya in ticket #1612):
sbin/fsck_lfs/bufcache.h: revision 1.14 sbin/fsck_lfs/bufcache.c: revision 1.20
PR/51418: Jose Luis Rodriguez Garcia: Fix incore src/sbin/fsck_lfs/bufcache.c XXX: pullup-8, pullup-7
|
1.14.6.1 | 14-Jun-2018 |
martin | Pull up following revision(s) (requested by maya in ticket #1612):
sbin/fsck_lfs/bufcache.h: revision 1.14 sbin/fsck_lfs/bufcache.c: revision 1.20
PR/51418: Jose Luis Rodriguez Garcia: Fix incore src/sbin/fsck_lfs/bufcache.c XXX: pullup-8, pullup-7
|
1.14.4.1 | 06-Jun-2018 |
martin | Pull up following revision(s) (requested by maya in ticket #1612):
sbin/fsck_lfs/bufcache.h: revision 1.14 sbin/fsck_lfs/bufcache.c: revision 1.20
PR/51418: Jose Luis Rodriguez Garcia: Fix incore src/sbin/fsck_lfs/bufcache.c XXX: pullup-8, pullup-7
|
1.15.2.1 | 06-Aug-2016 |
pgoyette | Sync with HEAD
|
1.19.12.1 | 07-Apr-2018 |
pgoyette | Sync with HEAD. 77 conflicts resolved - all of them $NetBSD$
|
1.19.6.1 | 08-Jun-2018 |
martin | Pull up following revision(s) (requested by maya in ticket #855):
sbin/fsck_lfs/bufcache.h: revision 1.14 sbin/fsck_lfs/bufcache.c: revision 1.20
PR/51418: Jose Luis Rodriguez Garcia: Fix incore src/sbin/fsck_lfs/bufcache.c XXX: pullup-8, pullup-7
|
1.20.2.1 | 08-Apr-2020 |
martin | Merge changes from current as of 20200406
|
1.21.8.2 | 06-Sep-2025 |
perseant | Separate buffer cache code between fsck_lfs and fsck_exfatfs. This may be reunited later, probably as a library.
|
1.21.8.1 | 29-Jun-2024 |
perseant | Implementation of exFAT filesystem, with compilation conditional on MKEXFATFS make variable.
|
1.14 | 30-Mar-2018 |
christos | PR/51418: Jose Luis Rodriguez Garcia: Fix incore src/sbin/fsck_lfs/bufcache.c XXX: pullup-8, pullup-7
|
1.13 | 18-Aug-2016 |
christos | branches: 1.13.6; 1.13.12; PR/51422: Jose Luis Rodriguez Garcia: completely remove B_NEEDCOMMIT
|
1.12 | 29-Mar-2015 |
chopps | - Fix fallout for recent bread() change (removing cred arg).
|
1.11 | 16-May-2008 |
hannken | branches: 1.11.38; 1.11.40; 1.11.44; Make sure all cached buffers with valid, not yet written data have been run through copy-on-write. Call fscow_run() with valid data where possible.
The LP_UFSCOW hack is no longer needed to protect ffs_copyonwrite() against endless recursion.
- Add a flag B_MODIFY to bread(), breada() and breadn(). If set the caller intends to modify the buffer returned.
- Always run copy-on-write on buffers returned from ffs_balloc().
- Add new function ffs_getblk() that gets a buffer, assigns a new blkno, may clear the buffer and runs copy-on-write. Process possible errors from getblk() or fscow_run(). Part of PR kern/38664.
Welcome to 4.99.63
Reviewed by: YAMAMOTO Takashi <yamt@netbsd.org>
|
1.10 | 28-Apr-2008 |
martin | branches: 1.10.2; Remove clause 3 and 4 from TNF licenses
|
1.9 | 28-Dec-2007 |
ad | branches: 1.9.4; 1.9.6; Make it build with src/sys from the vmlocking2 branch.
|
1.8 | 08-Oct-2007 |
ad | branches: 1.8.2; Give brelse() a second argument so that it matches the kernel. fsck_lfs now compiles again.
|
1.7 | 03-May-2006 |
yamt | branches: 1.7.10; define dummy NOCRED by ourselves, rather than assuming that kernel headers provide it.
|
1.6 | 19-Apr-2006 |
christos | "struct ucred" should not be exposed to userland. Instead make it a "void *" since it is not really used.
|
1.5 | 20-May-2005 |
perseant | Fail gracefully if we are asked to expand the buffer cache hash table size when there is no memory available to do so. Use the uvnode's strategy routine to retrieve data from the device, rather than always using pread(). Add a buffer header flag that specifies external management of the buffer's data area.
All of this in support of a new cleaner, which is not included in this commit.
|
1.4 | 11-Apr-2005 |
perseant | Be more efficient with the hash tables for the buffer and vnode caches.
Note that roll-forward can add more inodes to the filesystem; don't overflow the tables but reallocate them.
|
1.3 | 26-Feb-2005 |
perseant | branches: 1.3.2; Various minor LFS improvements:
* Extend the lfs library from fsck_lfs(8) so that it can be used with a not-yet-existent LFS. Make newfs_lfs(8) use this library, so it can create LFSs whose Ifile is larger than one segment. * Make newfs_lfs(8) use strsuftoi64() for its arguments, a la newfs(8). * Make fsck_lfs(8) respect the "file system is clean" flag. * Don't let fsck_lfs(8) think it has dirty blocks when invoked with the -n flag.
|
1.2 | 07-Aug-2003 |
agc | branches: 1.2.4; Move UCB-licensed code from 4-clause to 3-clause licence.
Patches provided by Joel Baker in PR 22308, verified by myself.
|
1.1 | 28-Mar-2003 |
perseant | Add working writing ability to fsck_lfs, including roll-forward, based on a partial-segment writer ported from the kernel.
|
1.2.4.1 | 10-May-2005 |
riz | Pull up the following revisions (requested by perseant in ticket #1281):
1.8 sys/ufs/lfs/TODO 1.75 sys/ufs/lfs/lfs.h (via patch) 1.74 sys/ufs/lfs/lfs_alloc.c (via patch) 1.49, 1.51 sys/ufs/lfs/lfs_balloc.c (1.51 via patch) 1.78 sys/ufs/lfs/lfs_bio.c 1.62 sys/ufs/lfs/lfs_extern.h (via patch) 1.156 sys/ufs/lfs/lfs_segment.c (via patch) 1.48 sys/ufs/lfs/lfs_subr.c 1.101 sys/ufs/lfs/lfs_syscalls.c 1.163 sys/ufs/lfs/lfs_vfsops.c (via patch) 1.134 sys/ufs/lfs/lfs_vnops.c (via patch) 1.61 sys/ufs/ufs/ufs_readwrite.c (via patch)
1.20 libexec/lfs_cleanerd/clean.h (via patch) 1.52 libexec/lfs_cleanerd/cleanerd.c (via patch) 1.41 libexec/lfs_cleanerd/library.c (via patch)
1.4 regress/sys/fs/lfs/newfs_fsck/Makefile 1.2 regress/sys/fs/lfs/newfs_fsck/mkfs_mount 1.2 regress/sys/fs/lfs/newfs_fsck/smallfiles 1.3 sbin/fsck_lfs/bufcache.c 1.3 sbin/fsck_lfs/bufcache.h 1.3 sbin/fsck_lfs/lfs.h 1.8 sbin/fsck_lfs/lfs.c (via patch) 1.8 sbin/fsck_lfs/pass3.c (via patch) 1.18 sbin/fsck_lfs/pass0.c (via patch) 1.18 sbin/fsck_lfs/utilities.c (via patch) 1.7 sbin/fsck_lfs/segwrite.c 1.19 sbin/fsck_lfs/setup.c (via patch) 1.3 sbin/newfs_lfs/Makefile 0 sbin/newfs_lfs/lfs.c (yes, remove it) 1.1 sbin/newfs_lfs/make_lfs.c 1.15 sbin/newfs_lfs/newfs.c (via patch)
Various minor LFS improvements.
Kernel:
* Note when lfs_putpages(9) thinks it is not going to be writing any pages before calling genfs_putpages(9). This prevents a situation in which blocks can be queued for writing without a segment header. * Correct computation of NRESERVE(), though it is still a gross overestimate in most cases. Note that if NRESERVE() is too high, it may be impossible to create files on the filesystem. We catch this case on filesystem mount and refuse to mount r/w. * Allow filesystems to be mounted whose block size is == MAXBSIZE. * Somewhere along the line, ufs_bmaparray(9) started mangling UNWRITTEN entries in indirect blocks again, triggering a failed assertion "daddr <= LFS_MAX_DADDR". Explicitly convert to and from int32_t to correct this. Should fix PR #29045. * Add a high-water mark for the number of dirty pages any given LFS can hold before triggering a flush. This is settable by sysctl, but off (zero) by default. * Be more careful about the MAX_BYTES and MAX_BUFS computations so we shouldn't see "please increase to at least zero" messages. * Note that VBLK and VCHR vnodes can have nonzero values in di_db[0] even though their v_size == 0. Don't panic when we see this. Fixes PR #26680. * Change lfs_bfree to a signed quantity. The manner in which it is processed before being passed to the cleaner means that sometimes it may drop below zero, and the cleaner must be aware of this. * Never report bfree < 0 (or higher than lfs_dsize) through lfs_statfs(9). This prevents df(1) from ever telling us that our full filesystems have 16TB free. * Account space allocated through lfs_balloc(9) that does not have associated buffer headers, so that the pagedaemon doesn't run us out of segments. * Return ENOSPC from lfs_balloc(9) when bfree drops to zero. * Address a deadlock in lfs_bmapv/lfs_markv when the filesystem is being unmounted. Because vfs_busy() is a shared lock, and lfs_bmapv/lfs_markv mark the filesystem vfs_busy(), the cleaner can be holding the lock that umount() is blocking on, then try to vfs_busy() again in getnewvnode().
cleaner:
* Adapt lfs_cleanerd to use the fcntl call to get the Ifile filehandle, so it need not be in the namespace. * Make lfs_cleanerd be more careful when there are very few available segments. * Make lfs_cleanerd less verbose when the filesystem is unmounted.
newfs_lfs, fsck_lfs, and regression:
* Extend the lfs library from fsck_lfs(8) so that it can be used with a not-yet-existent LFS. Make newfs_lfs(8) use this library, so it can create LFSs whose Ifile is larger than one segment. Addresses PR #11110. * Make newfs_lfs(8) use strsuftoi64() for its arguments, a la newfs(8). * Make fsck_lfs(8) respect the "file system is clean" flag. * Don't let fsck_lfs(8) think it has dirty blocks when invoked with the -n flag. * Remove the Ifile from the filesystem namespace. The cleaner now uses a fcntl call on the root inode to find the Ifile filehandle. (As a side-effect, addresses PR #29144.)
|
1.3.2.1 | 07-May-2005 |
tron | Apply patch (requested by perseant in ticket #242): * fsck_lfs buffer cache fixes, including PR #29151 * Change fsck_lfs phase 0 message to reflect reality * fsck_lfs: check phase 5 (cleanerinfo accounting) even on roll-forward * Keep better track of the free list during roll-forward, avoiding a core dump * Improve hash table use for fsck_lfs buffer and vnode cache * Document fsck_lfs flag -f, and implement -q * Add resize_lfs, including kernel support * Add LFS to mountd's list of exportable filesystem types * Make the LFS lkm work again [christos@] * Add MP locking to the LFS kernel subsystem * Fix pager_map deadlock in lfs_putpages() * Avoid incomplete file extension that looks like "partial truncation" to fsck * Use lfs_malloc for cleaner malloc, since the cleaner often runs in low-memory conditions. * Use splay trees, not hash table, to track page allocation for write. * Fix mkdir panic on full fs * Fix page accounting leak by counting differently. * Use rightly named structure for lfs_getattr [skrll@] * Cosmetic changes for readability.
|
1.7.10.2 | 09-Jan-2008 |
matt | sync with HEAD
|
1.7.10.1 | 06-Nov-2007 |
matt | sync with HEAD
|
1.8.2.1 | 18-Feb-2008 |
mjf | Sync with HEAD.
|
1.9.6.1 | 18-May-2008 |
yamt | sync with head.
|
1.9.4.1 | 02-Jun-2008 |
mjf | Sync with HEAD.
|
1.10.2.1 | 23-Jun-2008 |
wrstuden | Sync w/ -current. 34 merge conflicts to follow.
|
1.11.44.1 | 14-Jun-2018 |
martin | Pull up following revision(s) (requested by maya in ticket #1612):
sbin/fsck_lfs/bufcache.h: revision 1.14 sbin/fsck_lfs/bufcache.c: revision 1.20
PR/51418: Jose Luis Rodriguez Garcia: Fix incore src/sbin/fsck_lfs/bufcache.c XXX: pullup-8, pullup-7
|
1.11.40.1 | 14-Jun-2018 |
martin | Pull up following revision(s) (requested by maya in ticket #1612):
sbin/fsck_lfs/bufcache.h: revision 1.14 sbin/fsck_lfs/bufcache.c: revision 1.20
PR/51418: Jose Luis Rodriguez Garcia: Fix incore src/sbin/fsck_lfs/bufcache.c XXX: pullup-8, pullup-7
|
1.11.38.1 | 06-Jun-2018 |
martin | Pull up following revision(s) (requested by maya in ticket #1612):
sbin/fsck_lfs/bufcache.h: revision 1.14 sbin/fsck_lfs/bufcache.c: revision 1.20
PR/51418: Jose Luis Rodriguez Garcia: Fix incore src/sbin/fsck_lfs/bufcache.c XXX: pullup-8, pullup-7
|
1.13.12.1 | 07-Apr-2018 |
pgoyette | Sync with HEAD. 77 conflicts resolved - all of them $NetBSD$
|
1.13.6.1 | 08-Jun-2018 |
martin | Pull up following revision(s) (requested by maya in ticket #855):
sbin/fsck_lfs/bufcache.h: revision 1.14 sbin/fsck_lfs/bufcache.c: revision 1.20
PR/51418: Jose Luis Rodriguez Garcia: Fix incore src/sbin/fsck_lfs/bufcache.c XXX: pullup-8, pullup-7
|
1.47 | 03-Apr-2020 |
joerg | Avoid common symbols for fsck_lfs.
|
1.46 | 21-Sep-2015 |
dholland | branches: 1.46.16; Add 64-bit directory entry structures, and adjust accessors accordingly.
The LFS64 directory entry has a 64-bit inode number. This is stored as two 32-bit values to avoid inducing 64-bit alignment requirements.
The exposed type for manipulating directory entries is now LFS_DIRHEADER, following the same convention as e.g. IFILE and SEGUSE. (But with LFS_ on it, because.)
|
1.45 | 21-Sep-2015 |
dholland | Oops; LFS_DIRECTSIZ() is going to need the fs as an argument.
Also, it turns out that dirhash needs a compile-time-constant version of LFS_DIRECTSIZ(LFS_MAXNAMLEN+1), independent of 64-vs-32, so create LFS_MAXDIRENTRYSIZE for this. Sigh.
|
1.44 | 20-Sep-2015 |
dholland | Clean up struct lfs_dirtemplate.
|
1.43 | 15-Sep-2015 |
dholland | Pass around struct lfs_dirheader instead of struct lfs_direct.
|
1.42 | 15-Sep-2015 |
dholland | Add an accessor function for directory names.
|
1.41 | 15-Sep-2015 |
dholland | Add a function lfs_copydirname() to copy directory names in place; use it in place of (variously) memcpy and strlcpy. (The latter isn't even correct; was probably changed blindly from strncpy at some point.)
The new function zeroes the padding in the directory entry instead of leaving trash behind.
|
1.40 | 15-Sep-2015 |
dholland | Tidyups/fixes preparatory to making d_name[] in struct lfs_direct size 0 instead of size LFS_MAXNAMLEN+1, and preparatory to having accessor functions for d_name. In particular, don't create prototype entries and copy them, and access the name field only for directory structures that are in buffers with space for the name to exist.
|
1.39 | 15-Sep-2015 |
dholland | Add and use accessor functions for more of the directory entry fields.
|
1.38 | 01-Sep-2015 |
dholland | Add new accessors for the d_type and d_namlen fields of struct lfs_direct. Napalm the old byteswap access logic for these.
|
1.37 | 01-Sep-2015 |
dholland | Use the lfs dinode accessors in place of the ufs-derived ones. (Mostly.)
The ufs-derived ones are fake structure member macros, which are gross and not very safe. Also, it seems that a lot of places in the lfs code were using the ffsv1 branch of them unconditionally, and this way it's guaranteed all those places have been updated.
Found while doing this: for non-devices, have getattr produce NODEV in the rdev field instead of leaking the address of the first direct block.
|
1.36 | 12-Aug-2015 |
dholland | Hack up dinode usage to be 64 vs. 32 as needed. Part 1.
(This part changes the native lfs code; the ufs-derived code already has 64 vs. 32 logic, but as aspects of it are unsafe, and don't entirely interoperate cleanly with the lfs 64/32 stuff, pass 2 will be rehashing that.)
|
1.35 | 28-Jul-2015 |
dholland | Add a new lfs header file: lfs_accessors.h.
This contains all the accessor functions and macros out of lfs.h. Add an include of lfs_accessors.h after all uses of lfs.h... except for code that wants to define its own struct lfs-alike that the accessors are supposed to play along with. For these, set STRUCT_LFS and include lfs_accessors.h after the necessary structure has been defined, so that lfs_accessors.h can emit functions in terms of it.
|
1.34 | 24-Jul-2015 |
dholland | Switch to accessor functions for elements of the LFS on-disk superblock. This will allow switching between 32/64 bit forms on the fly; it will also allow handling LFS_EI reasonably tidily. (That currently doesn't work on the superblock.)
It also gets rid of cpp abuse in the form of fake structure member macros.
Also, instead of doing sleep/wakeup on &lfs_avail and &lfs_nextseg inside the on-disk superblock, add extra elements to the in-memory struct lfs for this. (XXX: these should be changed to condvars, but not right now)
XXX: this migrates a structure needed by the lfs code in libsa (struct salfs) into lfs.h, where it doesn't belong, but for the time being this is necessary in order to allow the accessors (and the various lfs macros and other goop that relies on them) to compile.
|
1.33 | 29-Mar-2015 |
chopps | - Fix fallout for recent bread() change (removing cred arg).
|
1.32 | 18-Jun-2013 |
christos | Prefix most of the cpp macros with lfs_ and LFS_ to avoid conflicts with ffs. This was done so that boot blocks that want to compile both FFS and LFS in the same file work.
|
1.31 | 08-Jun-2013 |
dholland | Tidy up the LFS userland build hacks. Don't use -I${NETBSDSRCDIR}/sys; don't include files other than the exported LFS headers, which are lfs.h, lfs_inode.h, and (for now) lfs_extern.h.
|
1.30 | 08-Jun-2013 |
dholland | DIRBLKSIZ -> LFS_DIRBLKSIZ DIRECTSIZ -> LFS_DIRECTSIZ DIRSIZ -> LFS_DIRSIZ OLDDIRFMT -> LFS_OLDDIRFMT NEWDIRFMT -> LFS_NEWDIRFMT IFTODT -> LFS_IFTODT DTTOIF -> LFS_DTTOIF
|
1.29 | 08-Jun-2013 |
dholland | struct direct -> struct lfs_direct struct dirtemplate -> struct lfs_dirtemplate struct odirtemplate -> struct lfs_odirtemplate DT_* -> LFS_DT_*
|
1.28 | 08-Jun-2013 |
dholland | Stick LFS_ in front of IFMT, IFIFO, IFREG, etc. so as not to conflict with the UFS copies of these symbols. (Which themselves ought to have UFS_ stuck on.)
|
1.27 | 06-Jun-2013 |
dholland | ufs -> ulfs for fsck_lfs.
|
1.26 | 22-Jan-2013 |
dholland | Stuff UFS_ in front of a few of ufs's symbols to reduce namespace pollution. Specifically: ROOTINO -> UFS_ROOTINO WINO -> UFS_WINO NXADDR -> UFS_NXADDR NDADDR -> UFS_NDADDR NIADDR -> UFS_NIADDR MAXSYMLINKLEN -> UFS_MAXSYMLINKLEN MAXSYMLINKLEN_UFS[12] -> UFS[12]_MAXSYMLINKLEN (for consistency)
Sort out ext2fs's misuse of NDADDR and NIADDR; fortunately, these have the same values in ext2fs and ffs.
No functional change intended.
|
1.25 | 16-Feb-2010 |
mlelstv | branches: 1.25.6; 1.25.12; Three changes in a single commit.
- drop the notion of frags (LFS fragments) vs fsb (FFS fragments) The code uses a complicated unity function that just makes the code difficult to understand.
- support larger sector sizes. Fix disk address computations to use DEV_BSIZE in the kernel as required by device drivers and to use sector sizes in userland.
- Fix several locking bugs in lfs_bio.c and lfs_subr.c.
|
1.24 | 16-May-2008 |
hannken | Make sure all cached buffers with valid, not yet written data have been run through copy-on-write. Call fscow_run() with valid data where possible.
The LP_UFSCOW hack is no longer needed to protect ffs_copyonwrite() against endless recursion.
- Add a flag B_MODIFY to bread(), breada() and breadn(). If set the caller intends to modify the buffer returned.
- Always run copy-on-write on buffers returned from ffs_balloc().
- Add new function ffs_getblk() that gets a buffer, assigns a new blkno, may clear the buffer and runs copy-on-write. Process possible errors from getblk() or fscow_run(). Part of PR kern/38664.
Welcome to 4.99.63
Reviewed by: YAMAMOTO Takashi <yamt@netbsd.org>
|
1.23 | 16-Mar-2008 |
lukem | branches: 1.23.2; 1.23.4; errexit() now provides the trailing \n (since fsck_ffs assumed that from a conversion from err(3)), so "make it so".
|
1.22 | 08-Oct-2007 |
ad | branches: 1.22.6; 1.22.8; Give brelse() a second argument so that it matches the kernel. fsck_lfs now compiles again.
|
1.21 | 16-Oct-2006 |
christos | branches: 1.21.8; c99 initializers
|
1.20 | 01-Sep-2006 |
perseant | Several fixes to improve the reliability of the roll-forward agent. Also, note "properly orphaned" files as distinct from corrupted files.
|
1.19 | 13-Sep-2005 |
christos | rename lfs.h to lfs_user.h so that it does not conflict.
|
1.18 | 19-Aug-2005 |
christos | 64 bit inode changes
|
1.17 | 27-Jun-2005 |
christos | more const.
|
1.16 | 27-Jun-2005 |
christos | constify
|
1.15 | 08-Jun-2005 |
perseant | Use the correct method to create a new inode, when we allocate lost+found.
Correct uninitialized variable issues in pass6.c and dir.c (PR#30411 and PR#30394, respectively).
|
1.14 | 19-Jan-2005 |
xtraeme | ANSIfy, WARNS=2
|
1.13 | 05-Oct-2003 |
jdolecek | fix NULL pointer pointer dereference in fileerror() when ino is NULL
problem reported and fix provided in PR kern/23065 by Gary Duzan, only slightly adjusted to only do the VTOI() when needed
|
1.12 | 03-Oct-2003 |
yamt | write out modified directory entries to the correct place.
|
1.11 | 07-Aug-2003 |
agc | Move UCB-licensed code from 4-clause to 3-clause licence.
Patches provided by Joel Baker in PR 22308, verified by myself.
|
1.10 | 13-Jul-2003 |
itojun | use bounded string op
|
1.9 | 02-Apr-2003 |
fvdl | Add support for UFS2. UFS2 is an enhanced FFS, adding support for 64 bit block pointers, extended attribute storage, and a few other things.
This commit does not yet include the code to manipulate the extended storage (for e.g. ACLs), this will be done later.
Originally written by Kirk McKusick and Network Associates Laboratories for FreeBSD.
|
1.8 | 28-Mar-2003 |
perseant | Add working writing ability to fsck_lfs, including roll-forward, based on a partial-segment writer ported from the kernel.
|
1.7 | 23-May-2002 |
perseant | Re-checksum the superblock whenever it is marked dirty.
Tested on alpha.
|
1.6 | 09-May-2002 |
simonb | branches: 1.6.2; Don't bother testing if a uint8_t is > 256 -- that test is always false.
|
1.5 | 13-Jul-2001 |
perseant | Merge the short-lived perseant-lfsv2 branch into the trunk.
Kernels and tools understand both v1 and v2 filesystems; newfs_lfs generates v2 by default. Changes for the v2 layout include:
- Segments of non-PO2 size and arbitrary block offset, so these can be matched to convenient physical characteristics of the partition (e.g., stripe or track size and offset).
- Address by fragment instead of by disk sector, paving the way for non-512-byte-sector devices. In theory fragments can be as large as you like, though in reality they must be smaller than MAXBSIZE in size.
- Use serial number and filesystem identifier to ensure that roll-forward doesn't get old data and think it's new. Roll-forward is enabled for v2 filesystems, though not for v1 filesystems by default.
- The inode free list is now a tailq, paving the way for undelete (undelete is not yet implemented, but can be without further non-backwards-compatible changes to disk structures).
- Inode atime information is kept in the Ifile, instead of on the inode; that is, the inode is never written *just* because atime was changed. Because of this the inodes remain near the file data on the disk, rather than wandering all over as the disk is read repeatedly. This speeds up repeated reads by a small but noticeable amount.
Other changes of note include:
- The ifile written by newfs_lfs can now be of arbitrary length, it is no longer restricted to a single indirect block.
- Fixed an old bug where ctime was changed every time a vnode was created. I need to look more closely to make sure that the times are only updated during write(2) and friends, not after-the-fact during a segment write, and certainly not by the cleaner.
|
1.4 | 14-Jun-2000 |
perseant | branches: 1.4.4; Add "-i" flag to specify the location of the index file inode, to examine alternate checkpoints. Regularize usage of maxino. Remove olf debugging cruft.
|
1.3 | 23-May-2000 |
perseant | branches: 1.3.2; Convert to NetBSD source code style
|
1.2 | 03-Jul-1999 |
kleink | RCS Id police.
|
1.1 | 18-Mar-1999 |
perseant | Initial checkin of fsck_lfs. This version cannot do any repair (-p flag does nothing, and one of -p or -n is required) but can be useful as a diagnostic tool.
|
1.3.2.1 | 22-Jun-2000 |
minoura | Sync w/ netbsd-1-5-base.
|
1.4.4.1 | 02-Jul-2001 |
perseant | Change disk addressing unit to be the fragment, instead of the disk sector. All quantities in the superblock, inodes, indirect blocks, etc. refer now to this abstract unit (called "fsb" as it is in FFS) instead of disk sectors; as a consequence segment summary blocks have to be multiples of a fragment in size. In v1 filesystems, compatibility code ensures that 1 fsb == 1 sector, regardless of fragment size.
Fragments can now range in size between 512 and 32k; in the event that LFS_LABELPAD (8k) is smaller than the disk address unit size, an extra proto-superblock is kept at 8k from the beginning of the disk, to be used *only* to locate the real superblocks. (Not all of the userland knows about this yet.)
Almost all of this was done not by me, but by joff.
|
1.6.2.1 | 02-Jun-2002 |
tv | Pull up revision 1.7 (requested by perseant in ticket #131): Re-checksum the superblock whenever it is marked dirty. Tested on alpha.
|
1.21.8.2 | 23-Mar-2008 |
matt | sync with HEAD
|
1.21.8.1 | 06-Nov-2007 |
matt | sync with HEAD
|
1.22.8.2 | 02-Jun-2008 |
mjf | Sync with HEAD.
|
1.22.8.1 | 03-Apr-2008 |
mjf | Sync with HEAD.
|
1.22.6.1 | 24-Mar-2008 |
keiichi | sync with head.
|
1.23.4.1 | 23-Jun-2008 |
wrstuden | Sync w/ -current. 34 merge conflicts to follow.
|
1.23.2.1 | 18-May-2008 |
yamt | sync with head.
|
1.25.12.2 | 23-Jun-2013 |
tls | resync from head
|
1.25.12.1 | 25-Feb-2013 |
tls | resync with head
|
1.25.6.2 | 22-May-2014 |
yamt | sync with head.
for a reference, the tree before this commit was tagged as yamt-pagecache-tag8.
this commit was splitted into small chunks to avoid a limitation of cvs. ("Protocol error: too many arguments")
|
1.25.6.1 | 23-Jan-2013 |
yamt | sync with head
|
1.46.16.1 | 08-Apr-2020 |
martin | Merge changes from current as of 20200406
|
1.16 | 03-Apr-2020 |
joerg | branches: 1.16.8; Avoid common symbols for fsck_lfs.
|
1.15 | 03-Oct-2015 |
dholland | branches: 1.15.16; Remove a dead data structure.
|
1.14 | 21-Sep-2015 |
dholland | Add 64-bit directory entry structures, and adjust accessors accordingly.
The LFS64 directory entry has a 64-bit inode number. This is stored as two 32-bit values to avoid inducing 64-bit alignment requirements.
The exposed type for manipulating directory entries is now LFS_DIRHEADER, following the same convention as e.g. IFILE and SEGUSE. (But with LFS_ on it, because.)
|
1.13 | 15-Sep-2015 |
dholland | Pass around struct lfs_dirheader instead of struct lfs_direct.
|
1.12 | 12-Aug-2015 |
dholland | Hack up dinode usage to be 64 vs. 32 as needed. Part 1.
(This part changes the native lfs code; the ufs-derived code already has 64 vs. 32 logic, but as aspects of it are unsafe, and don't entirely interoperate cleanly with the lfs 64/32 stuff, pass 2 will be rehashing that.)
|
1.11 | 08-Jun-2013 |
dholland | struct direct -> struct lfs_direct struct dirtemplate -> struct lfs_dirtemplate struct odirtemplate -> struct lfs_odirtemplate DT_* -> LFS_DT_*
|
1.10 | 06-Jun-2013 |
dholland | ufs -> ulfs for fsck_lfs.
|
1.9 | 09-Jun-2011 |
christos | branches: 1.9.2; 1.9.8; share more code.
|
1.8 | 27-Jun-2005 |
christos | branches: 1.8.42; constify
|
1.7 | 18-Jul-2004 |
yamt | remove a prototype of a non-exist function.
|
1.6 | 13-Jul-2003 |
itojun | use bounded string op
|
1.5 | 02-Apr-2003 |
fvdl | Add support for UFS2. UFS2 is an enhanced FFS, adding support for 64 bit block pointers, extended attribute storage, and a few other things.
This commit does not yet include the code to manipulate the extended storage (for e.g. ACLs), this will be done later.
Originally written by Kirk McKusick and Network Associates Laboratories for FreeBSD.
|
1.4 | 28-Mar-2003 |
perseant | Add working writing ability to fsck_lfs, including roll-forward, based on a partial-segment writer ported from the kernel.
|
1.3 | 23-May-2000 |
perseant | Convert to NetBSD source code style
|
1.2 | 03-Jul-1999 |
kleink | RCS Id police.
|
1.1 | 18-Mar-1999 |
perseant | Initial checkin of fsck_lfs. This version cannot do any repair (-p flag does nothing, and one of -p or -n is required) but can be useful as a diagnostic tool.
|
1.8.42.1 | 23-Jun-2011 |
cherry | Catchup with rmind-uvmplock merge.
|
1.9.8.1 | 23-Jun-2013 |
tls | resync from head
|
1.9.2.1 | 22-May-2014 |
yamt | sync with head.
for a reference, the tree before this commit was tagged as yamt-pagecache-tag8.
this commit was splitted into small chunks to avoid a limitation of cvs. ("Protocol error: too many arguments")
|
1.15.16.1 | 08-Apr-2020 |
martin | Merge changes from current as of 20200406
|
1.16.8.2 | 06-Sep-2025 |
perseant | Separate buffer cache code between fsck_lfs and fsck_exfatfs. This may be reunited later, probably as a library.
|
1.16.8.1 | 29-Jun-2024 |
perseant | Implementation of exFAT filesystem, with compilation conditional on MKEXFATFS make variable.
|
1.27 | 03-Apr-2020 |
joerg | Avoid common symbols for fsck_lfs.
|
1.26 | 03-Oct-2015 |
dholland | branches: 1.26.16; The per-inode state 'id_entryno' is used by pass1 for a block count, so widen it to 'long long'. pass2 uses it for the number of entries in a directory (IIUC) which does not need to be wider than int, but for now let's not try to split into two fields. FUTURE...
|
1.25 | 03-Oct-2015 |
dholland | Use daddr_t instead of uint32_t for the in-memory copy of the inode block pointers.
|
1.24 | 03-Oct-2015 |
dholland | Remove a dead data structure.
|
1.23 | 21-Sep-2015 |
dholland | Add 64-bit directory entry structures, and adjust accessors accordingly.
The LFS64 directory entry has a 64-bit inode number. This is stored as two 32-bit values to avoid inducing 64-bit alignment requirements.
The exposed type for manipulating directory entries is now LFS_DIRHEADER, following the same convention as e.g. IFILE and SEGUSE. (But with LFS_ on it, because.)
|
1.22 | 15-Sep-2015 |
dholland | Pass around struct lfs_dirheader instead of struct lfs_direct.
|
1.21 | 12-Aug-2015 |
dholland | Hack up dinode usage to be 64 vs. 32 as needed. Part 1.
(This part changes the native lfs code; the ufs-derived code already has 64 vs. 32 logic, but as aspects of it are unsafe, and don't entirely interoperate cleanly with the lfs 64/32 stuff, pass 2 will be rehashing that.)
|
1.20 | 08-Jun-2013 |
dholland | struct direct -> struct lfs_direct struct dirtemplate -> struct lfs_dirtemplate struct odirtemplate -> struct lfs_odirtemplate DT_* -> LFS_DT_*
|
1.19 | 06-Jun-2013 |
dholland | ufs -> ulfs for fsck_lfs.
|
1.18 | 09-Oct-2008 |
christos | branches: 1.18.18; 1.18.24; Disable userid to username lookups by default. Add a -U flag to perform them. In single user mode lookups that involve the network might not work and they slow down fsck.
|
1.17 | 28-Apr-2008 |
martin | Remove clause 3 and 4 from TNF licenses
|
1.16 | 09-Nov-2006 |
christos | branches: 1.16.2; 1.16.18; 1.16.20; Fix malloc/realloc/calloc issues: always check and exit, use EEXIT instead of 8.
|
1.15 | 27-Jun-2005 |
christos | constify
|
1.14 | 11-Apr-2005 |
perseant | Be more efficient with the hash tables for the buffer and vnode caches.
Note that roll-forward can add more inodes to the filesystem; don't overflow the tables but reallocate them.
|
1.13 | 18-Jul-2004 |
yamt | branches: 1.13.2; zero-out dinode is not a proper way to 'clear' an lfs inode.
|
1.12 | 20-Mar-2004 |
perseant | change KES license to standard NetBSD license
|
1.11 | 07-Aug-2003 |
agc | Move UCB-licensed code from 4-clause to 3-clause licence.
Patches provided by Joel Baker in PR 22308, verified by myself.
|
1.10 | 02-Apr-2003 |
fvdl | Add support for UFS2. UFS2 is an enhanced FFS, adding support for 64 bit block pointers, extended attribute storage, and a few other things.
This commit does not yet include the code to manipulate the extended storage (for e.g. ACLs), this will be done later.
Originally written by Kirk McKusick and Network Associates Laboratories for FreeBSD.
|
1.9 | 29-Mar-2003 |
wiz | Consistently spell occurrence with two rs.
|
1.8 | 28-Mar-2003 |
perseant | Add working writing ability to fsck_lfs, including roll-forward, based on a partial-segment writer ported from the kernel.
|
1.7 | 24-Jan-2003 |
fvdl | Bump daddr_t to 64 bits. Replace it with int32_t in all places where it was used on-disk, so that on-disk formats remain the same. Remove ufs_daddr_t and ufs_lbn_t for the time being.
|
1.6 | 23-May-2002 |
perseant | Re-checksum the superblock whenever it is marked dirty.
Tested on alpha.
|
1.5 | 23-May-2000 |
perseant | branches: 1.5.8; Convert to NetBSD source code style
|
1.4 | 16-May-2000 |
perseant | fsck_lfs can now write to the filesystem, allowing it to correct most (though still not all) errors in a damaged lfs. Segment byte accounting is corrected in pass 5. "fsck_lfs -p" will do a partial roll-forward, verifying the checkpoint from the newer superblock. fscknames[] is updated so that fsck knows about fsck_lfs.
|
1.3 | 20-Jan-2000 |
perseant | Rename lfs_ifind so that it does not conflict with new kernel prototype. Addresses PR #9253.
|
1.2 | 03-Jul-1999 |
kleink | RCS Id police.
|
1.1 | 18-Mar-1999 |
perseant | branches: 1.1.2; Initial checkin of fsck_lfs. This version cannot do any repair (-p flag does nothing, and one of -p or -n is required) but can be useful as a diagnostic tool.
|
1.1.2.1 | 21-Jan-2000 |
he | Pull up revision 1.3 (requested by perseant): Fix name collision error due to recent kernel prototype updates. Fixes PR#9253.
|
1.5.8.1 | 02-Jun-2002 |
tv | Pull up revision 1.6 (requested by perseant in ticket #131): Re-checksum the superblock whenever it is marked dirty. Tested on alpha.
|
1.13.2.1 | 07-May-2005 |
tron | Apply patch (requested by perseant in ticket #242): * fsck_lfs buffer cache fixes, including PR #29151 * Change fsck_lfs phase 0 message to reflect reality * fsck_lfs: check phase 5 (cleanerinfo accounting) even on roll-forward * Keep better track of the free list during roll-forward, avoiding a core dump * Improve hash table use for fsck_lfs buffer and vnode cache * Document fsck_lfs flag -f, and implement -q * Add resize_lfs, including kernel support * Add LFS to mountd's list of exportable filesystem types * Make the LFS lkm work again [christos@] * Add MP locking to the LFS kernel subsystem * Fix pager_map deadlock in lfs_putpages() * Avoid incomplete file extension that looks like "partial truncation" to fsck * Use lfs_malloc for cleaner malloc, since the cleaner often runs in low-memory conditions. * Use splay trees, not hash table, to track page allocation for write. * Fix mkdir panic on full fs * Fix page accounting leak by counting differently. * Use rightly named structure for lfs_getattr [skrll@] * Cosmetic changes for readability.
|
1.16.20.1 | 18-May-2008 |
yamt | sync with head.
|
1.16.18.2 | 17-Jan-2009 |
mjf | Sync with HEAD.
|
1.16.18.1 | 02-Jun-2008 |
mjf | Sync with HEAD.
|
1.16.2.1 | 24-Mar-2009 |
bouyer | Pull up following revision(s) (requested by manu in ticket #1288): sbin/fsck_lfs/inode.c: revision 1.40 via patch sbin/fsck_ffs/fsck_ffs.8: revision 1.44 via patch sbin/fsck_ext2fs/fsck.h: revision 1.14 via patch sbin/fsck_ext2fs/main.c: revision 1.30 via patch sbin/fsck_ffs/inode.c: revision 1.61 via patch sbin/fsck_ffs/main.c: revision 1.71 via patch sbin/fsck_ext2fs/inode.c: revision 1.23 via patch sbin/fsck_lfs/fsck.h: revision 1.18 via patch sbin/fsck_lfs/fsck_lfs.8: revision 1.21 via patch sbin/fsck_lfs/main.c: revision 1.38 via patch sbin/fsck_ext2fs/fsck_ext2fs.8: revision 1.15 via patch sbin/fsck_ffs/fsck.h: revision 1.47 via patch Disable userid to username lookups by default. Add a -U flag to perform them. In single user mode lookups that involve the network might not work and they slow down fsck.
|
1.18.24.1 | 23-Jun-2013 |
tls | resync from head
|
1.18.18.1 | 22-May-2014 |
yamt | sync with head.
for a reference, the tree before this commit was tagged as yamt-pagecache-tag8.
this commit was splitted into small chunks to avoid a limitation of cvs. ("Protocol error: too many arguments")
|
1.26.16.1 | 08-Apr-2020 |
martin | Merge changes from current as of 20200406
|
1.27 | 14-Sep-2025 |
wiz | fsck_lfs(8): add -i to SYNOPSIS, 'file system' police, bump date
|
1.26 | 14-Sep-2025 |
perseant | Document the -a and -i flags.
|
1.25 | 12-Jul-2014 |
dholland | Revert version 1.111 of sysinst/disks.c, which caused sysinst to create lfs fstab entries with fsck disabled, and instead patch fsck_lfs to exit successfully without doing anything when given the -p (bootup preen) option. If you really want to do fsck_lfs -p, you can do fsck_lfs -f -p to make it go.
This has been sitting in my todo queue since February 2010 and was ok'd by the committer at the time. The original commit was based on this post: http://mail-index.netbsd.org/tech-kern/2010/02/09/msg007306.html
and I remain unconvinced that it's the right thing, but we can at least do it properly and not ship a sysinst with -7 that creates permanently wrong fstab files.
Note that this may cause problems for anyone who's taken -p out of the bootup fsck flags; but doing that is wrong, so don't.
|
1.24 | 18-Mar-2014 |
riastradh | branches: 1.24.2; Merge riastradh-drm2 to HEAD.
|
1.23 | 20-Jul-2013 |
wiz | Use Mt for email addresses.
|
1.22 | 15-Mar-2009 |
joerg | branches: 1.22.6; 1.22.12; 1.22.16; Fix markup.
|
1.21 | 09-Oct-2008 |
christos | branches: 1.21.4; Disable userid to username lookups by default. Add a -U flag to perform them. In single user mode lookups that involve the network might not work and they slow down fsck.
|
1.20 | 14-Apr-2005 |
wiz | branches: 1.20.4; 1.20.20; Quote a word that would otherwise be interpreted as macro; increase width argument to .Bl so that all options fit.
|
1.19 | 14-Apr-2005 |
wiz | Bump date for new -q; use Dq; capitalize NetBSD in the usual way; new sentence, new line; some nits.
|
1.18 | 14-Apr-2005 |
perseant | Document "-f" (force check) flag. Implement and document "-q" (quiet).
|
1.17 | 06-Jul-2004 |
wiz | branches: 1.17.2; Improve description of -b and -m.
|
1.16 | 06-Jul-2004 |
wiz | Document -m. It was already there, only commented out. Bump date.
Addresses PR 26067 by Kouichirou Hiratsuka.
|
1.15 | 07-Aug-2003 |
agc | Move UCB-licensed code from 4-clause to 3-clause licence.
Patches provided by Joel Baker in PR 22308, verified by myself.
|
1.14 | 16-Apr-2003 |
wiz | Bump date for last.
|
1.13 | 28-Mar-2003 |
perseant | Add working writing ability to fsck_lfs, including roll-forward, based on a partial-segment writer ported from the kernel.
|
1.12 | 25-Feb-2003 |
wiz | .Nm does not need a dummy argument ("") before punctuation or for correct formatting of the SYNOPSIS any longer.
|
1.11 | 01-Oct-2002 |
wiz | Use An, Aq for author markup.
|
1.10 | 01-Oct-2002 |
wiz | New sentence, new line. By Robert Elz with minimal fixes.
|
1.9 | 08-Feb-2002 |
ross | Generate <>& symbolically. I'm avoiding .../dist/... directories for now.
|
1.8 | 07-Feb-2002 |
ross | Edit -mdoc usage.
* There is no -indent option to .Bd or .Bl, although you would never know that from its frequent use in this tree. There is a "-offset indent" combination that makes sense, and you can certainly say "-width indent".
* Also, you can't markup the -width option argument, tho you CAN use a callable macro. So "-width Ar filename" doesn't make sense, but either "-width Ar" or "-width filename" does, as might something like "-width xxfilename" for a little extra space.
* There are a lot of needlessly complex hanging tag macros in man4 used to create simple item lists. Those should be simplified one of these days before someone copies and edits yet another man4 page.
|
1.7 | 16-Nov-2001 |
wiz | Sort sections, use standard section headers.
|
1.6 | 05-Jun-2001 |
wiz | Drop arguments of .Os.
|
1.5 | 03-Apr-2001 |
wiz | Xref newfs_lfs instead of newlfs; whitespace fixes while I'm here.
|
1.4 | 07-Nov-2000 |
lukem | fix up various .Nm abuses: - keep the case consistent between the actual name and what's referenced. e.g, if it's `foo', don't use '.Nm Foo' at the start of a sentence. - remove unnecessary `.Nm foo' after the first occurrence (except for using `.Nm ""' if there's stuff following, or for the 2nd and so on occurrences in a SYNOPSIS - use Sx, Ic, Li, Em, Sq, and Xr as appropriate
|
1.3 | 16-May-2000 |
perseant | branches: 1.3.4; fsck_lfs can now write to the filesystem, allowing it to correct most (though still not all) errors in a damaged lfs. Segment byte accounting is corrected in pass 5. "fsck_lfs -p" will do a partial roll-forward, verifying the checkpoint from the newer superblock. fscknames[] is updated so that fsck knows about fsck_lfs.
|
1.2 | 19-Mar-1999 |
perseant | "LFS" really stands for "Log-*structured* File System"
|
1.1 | 18-Mar-1999 |
perseant | Initial checkin of fsck_lfs. This version cannot do any repair (-p flag does nothing, and one of -p or -n is required) but can be useful as a diagnostic tool.
|
1.3.4.1 | 04-Apr-2001 |
he | Pull up revisions 1.4-1.5 (requested by wiz): Fix up various .Nm abuses. Xref newfs_lfs instead of newlfs + whitespace fixes.
|
1.17.2.1 | 07-May-2005 |
tron | Apply patch (requested by perseant in ticket #242): * fsck_lfs buffer cache fixes, including PR #29151 * Change fsck_lfs phase 0 message to reflect reality * fsck_lfs: check phase 5 (cleanerinfo accounting) even on roll-forward * Keep better track of the free list during roll-forward, avoiding a core dump * Improve hash table use for fsck_lfs buffer and vnode cache * Document fsck_lfs flag -f, and implement -q * Add resize_lfs, including kernel support * Add LFS to mountd's list of exportable filesystem types * Make the LFS lkm work again [christos@] * Add MP locking to the LFS kernel subsystem * Fix pager_map deadlock in lfs_putpages() * Avoid incomplete file extension that looks like "partial truncation" to fsck * Use lfs_malloc for cleaner malloc, since the cleaner often runs in low-memory conditions. * Use splay trees, not hash table, to track page allocation for write. * Fix mkdir panic on full fs * Fix page accounting leak by counting differently. * Use rightly named structure for lfs_getattr [skrll@] * Cosmetic changes for readability.
|
1.20.20.1 | 17-Jan-2009 |
mjf | Sync with HEAD.
|
1.20.4.1 | 24-Mar-2009 |
bouyer | Pull up following revision(s) (requested by manu in ticket #1288): sbin/fsck_lfs/inode.c: revision 1.40 via patch sbin/fsck_ffs/fsck_ffs.8: revision 1.44 via patch sbin/fsck_ext2fs/fsck.h: revision 1.14 via patch sbin/fsck_ext2fs/main.c: revision 1.30 via patch sbin/fsck_ffs/inode.c: revision 1.61 via patch sbin/fsck_ffs/main.c: revision 1.71 via patch sbin/fsck_ext2fs/inode.c: revision 1.23 via patch sbin/fsck_lfs/fsck.h: revision 1.18 via patch sbin/fsck_lfs/fsck_lfs.8: revision 1.21 via patch sbin/fsck_lfs/main.c: revision 1.38 via patch sbin/fsck_ext2fs/fsck_ext2fs.8: revision 1.15 via patch sbin/fsck_ffs/fsck.h: revision 1.47 via patch Disable userid to username lookups by default. Add a -U flag to perform them. In single user mode lookups that involve the network might not work and they slow down fsck.
|
1.21.4.1 | 13-May-2009 |
jym | Sync with HEAD.
Third (and last) commit. See http://mail-index.netbsd.org/source-changes/2009/05/13/msg221222.html
|
1.22.16.1 | 23-Jul-2013 |
riastradh | sync with HEAD
|
1.22.12.1 | 20-Aug-2014 |
tls | Rebase to HEAD as of a few days ago.
|
1.22.6.1 | 22-May-2014 |
yamt | sync with head.
for a reference, the tree before this commit was tagged as yamt-pagecache-tag8.
this commit was splitted into small chunks to avoid a limitation of cvs. ("Protocol error: too many arguments")
|
1.24.2.1 | 10-Aug-2014 |
tls | Rebase.
|
1.17 | 14-Sep-2025 |
perseant | Add -a flag to suppress warnings about discrepancies in avail accounting, which is common with the -i flag.
Expand the computation of avail if the -d flag is given. The computation itself is not changed.
Do not offer to roll forward if the -n flag was given.
Exit with FSCK_EXIT_UNRESOLVED if the -n flag was given and any questions were asked. This is helpful when using fsck_lfs as a diagnostic in scripts.
|
1.16 | 03-Apr-2020 |
joerg | Avoid common symbols for fsck_lfs.
|
1.15 | 01-Sep-2015 |
dholland | branches: 1.15.16; Use daddr_t, not ulfs_daddr_t, as the latter's 32 bits wide. Don't use either for on-disk items. Declare external data in header files. Part 3 of 3.
|
1.14 | 12-Aug-2015 |
dholland | Hack up dinode usage to be 64 vs. 32 as needed. Part 1.
(This part changes the native lfs code; the ufs-derived code already has 64 vs. 32 logic, but as aspects of it are unsafe, and don't entirely interoperate cleanly with the lfs 64/32 stuff, pass 2 will be rehashing that.)
|
1.13 | 06-Jun-2013 |
dholland | ufs -> ulfs for fsck_lfs.
|
1.12 | 01-Sep-2006 |
perseant | branches: 1.12.42; 1.12.48; Several fixes to improve the reliability of the roll-forward agent. Also, note "properly orphaned" files as distinct from corrupted files.
|
1.11 | 18-Jul-2006 |
perseant | Various improvements to fsck_lfs, to wit:
* Add lfs_balloc capability to the lfs library. * Extend the Ifile if we run out of free inodes when creating lost+found. * Don't roll forward if we have allocated a lost+found, to avoid conflicts when adding new files in roll-forward. * Make some messages slightly more verbose (e.g. include inode number, and use pwarn() instead of printf() so the messages include the device name when preening). * Change superblock detection/avoidance to use the offset table in the primary superblock, rather than looking at the contents. * Be more verbose about various operations when passed the -d flag, especially roll-forward. * Be more careful about dirops during roll forward, since the cleaner can sometimes write blocks from dirop vnodes. Detect and avoid this problem. * Always check the free list, even if given -i; if we're going to write it we have to check it first. * Mark inodes dirty when blocks are found during roll forward, so the inodes are written with the new block locations. * Update size of inodes if blocks beyond EOF are found during roll forward. * Fix segment accounting for blocks and inodes found during roll forward. * Report statistics on roll forward: how many new/deleted/moved files and how many updated blocks (or "nothing new"). * Don't care if the device being checked is really a device, if we have been passed the -f flag (to facilitate automated testing). * When writing to the disk, use the current time in the segment headers rathern than time 0. * When passed the -i flag, locate the partial segment containing the Ifile inode and use that to calculate lfs_offset, lfs_curseg, lfs_nextseg. (Again for automated testing.)
|
1.10 | 27-Jun-2005 |
christos | constify
|
1.9 | 14-Apr-2005 |
perseant | Document "-f" (force check) flag. Implement and document "-q" (quiet).
|
1.8 | 07-Aug-2003 |
agc | branches: 1.8.6; Move UCB-licensed code from 4-clause to 3-clause licence.
Patches provided by Joel Baker in PR 22308, verified by myself.
|
1.7 | 02-Apr-2003 |
fvdl | Add support for UFS2. UFS2 is an enhanced FFS, adding support for 64 bit block pointers, extended attribute storage, and a few other things.
This commit does not yet include the code to manipulate the extended storage (for e.g. ACLs), this will be done later.
Originally written by Kirk McKusick and Network Associates Laboratories for FreeBSD.
|
1.6 | 28-Mar-2003 |
perseant | Add working writing ability to fsck_lfs, including roll-forward, based on a partial-segment writer ported from the kernel.
|
1.5 | 24-Jan-2003 |
fvdl | Bump daddr_t to 64 bits. Replace it with int32_t in all places where it was used on-disk, so that on-disk formats remain the same. Remove ufs_daddr_t and ufs_lbn_t for the time being.
|
1.4 | 14-Jun-2000 |
perseant | Add "-i" flag to specify the location of the index file inode, to examine alternate checkpoints. Regularize usage of maxino. Remove olf debugging cruft.
|
1.3 | 23-May-2000 |
perseant | branches: 1.3.2; Convert to NetBSD source code style
|
1.2 | 03-Jul-1999 |
kleink | RCS Id police.
|
1.1 | 18-Mar-1999 |
perseant | Initial checkin of fsck_lfs. This version cannot do any repair (-p flag does nothing, and one of -p or -n is required) but can be useful as a diagnostic tool.
|
1.3.2.1 | 22-Jun-2000 |
minoura | Sync w/ netbsd-1-5-base.
|
1.8.6.1 | 07-May-2005 |
tron | Apply patch (requested by perseant in ticket #242): * fsck_lfs buffer cache fixes, including PR #29151 * Change fsck_lfs phase 0 message to reflect reality * fsck_lfs: check phase 5 (cleanerinfo accounting) even on roll-forward * Keep better track of the free list during roll-forward, avoiding a core dump * Improve hash table use for fsck_lfs buffer and vnode cache * Document fsck_lfs flag -f, and implement -q * Add resize_lfs, including kernel support * Add LFS to mountd's list of exportable filesystem types * Make the LFS lkm work again [christos@] * Add MP locking to the LFS kernel subsystem * Fix pager_map deadlock in lfs_putpages() * Avoid incomplete file extension that looks like "partial truncation" to fsck * Use lfs_malloc for cleaner malloc, since the cleaner often runs in low-memory conditions. * Use splay trees, not hash table, to track page allocation for write. * Fix mkdir panic on full fs * Fix page accounting leak by counting differently. * Use rightly named structure for lfs_getattr [skrll@] * Cosmetic changes for readability.
|
1.12.48.1 | 23-Jun-2013 |
tls | resync from head
|
1.12.42.1 | 22-May-2014 |
yamt | sync with head.
for a reference, the tree before this commit was tagged as yamt-pagecache-tag8.
this commit was splitted into small chunks to avoid a limitation of cvs. ("Protocol error: too many arguments")
|
1.15.16.1 | 08-Apr-2020 |
martin | Merge changes from current as of 20200406
|
1.70 | 03-Apr-2020 |
joerg | Avoid common symbols for fsck_lfs.
|
1.69 | 10-Jun-2017 |
pgoyette | branches: 1.69.6; Update inode member i_flag --> i_state to keep up with kernel changes
|
1.68 | 21-Sep-2015 |
dholland | branches: 1.68.8; Add 64-bit directory entry structures, and adjust accessors accordingly.
The LFS64 directory entry has a 64-bit inode number. This is stored as two 32-bit values to avoid inducing 64-bit alignment requirements.
The exposed type for manipulating directory entries is now LFS_DIRHEADER, following the same convention as e.g. IFILE and SEGUSE. (But with LFS_ on it, because.)
|
1.67 | 15-Sep-2015 |
dholland | Pass around struct lfs_dirheader instead of struct lfs_direct.
|
1.66 | 15-Sep-2015 |
dholland | Add an accessor function for directory names.
|
1.65 | 15-Sep-2015 |
dholland | Tidyups/fixes preparatory to making d_name[] in struct lfs_direct size 0 instead of size LFS_MAXNAMLEN+1, and preparatory to having accessor functions for d_name. In particular, don't create prototype entries and copy them, and access the name field only for directory structures that are in buffers with space for the name to exist.
|
1.64 | 15-Sep-2015 |
dholland | Add and use accessor functions for more of the directory entry fields.
|
1.63 | 01-Sep-2015 |
dholland | Add new accessors for the d_type and d_namlen fields of struct lfs_direct. Napalm the old byteswap access logic for these.
|
1.62 | 01-Sep-2015 |
dholland | Use daddr_t, not ulfs_daddr_t, as the latter's 32 bits wide. Don't use either for on-disk items. Declare external data in header files. Part 3 of 3.
|
1.61 | 01-Sep-2015 |
dholland | Use the lfs dinode accessors in place of the ufs-derived ones. (Mostly.)
The ufs-derived ones are fake structure member macros, which are gross and not very safe. Also, it seems that a lot of places in the lfs code were using the ffsv1 branch of them unconditionally, and this way it's guaranteed all those places have been updated.
Found while doing this: for non-devices, have getattr produce NODEV in the rdev field instead of leaking the address of the first direct block.
|
1.60 | 19-Aug-2015 |
dholland | Part two of dinodes; use the same union everywhere. (previously the ufs-derived code had things set up slightly different)
Remove a bunch of associated mess.
|
1.59 | 12-Aug-2015 |
dholland | Hack up dinode usage to be 64 vs. 32 as needed. Part 1.
(This part changes the native lfs code; the ufs-derived code already has 64 vs. 32 logic, but as aspects of it are unsafe, and don't entirely interoperate cleanly with the lfs 64/32 stuff, pass 2 will be rehashing that.)
|
1.58 | 12-Aug-2015 |
dholland | Add IFILE32 and IFILE64 structures for the on-disk ifile entries. Add and use accessors. There are also a bunch of places that cast and I hope I've found them all...
|
1.57 | 28-Jul-2015 |
dholland | Add a new lfs header file: lfs_accessors.h.
This contains all the accessor functions and macros out of lfs.h. Add an include of lfs_accessors.h after all uses of lfs.h... except for code that wants to define its own struct lfs-alike that the accessors are supposed to play along with. For these, set STRUCT_LFS and include lfs_accessors.h after the necessary structure has been defined, so that lfs_accessors.h can emit functions in terms of it.
|
1.56 | 24-Jul-2015 |
dholland | More lfs superblock accessors. (This changes the rest of the code over; all the accessors were already added.)
The difference between this commit and the previous one is arbitrary, but the previous one passed the regression tests on its own so I'm keeping it separate to help with any bisections that might be needed in the future.
|
1.55 | 24-Jul-2015 |
dholland | Switch to accessor functions for elements of the LFS on-disk superblock. This will allow switching between 32/64 bit forms on the fly; it will also allow handling LFS_EI reasonably tidily. (That currently doesn't work on the superblock.)
It also gets rid of cpp abuse in the form of fake structure member macros.
Also, instead of doing sleep/wakeup on &lfs_avail and &lfs_nextseg inside the on-disk superblock, add extra elements to the in-memory struct lfs for this. (XXX: these should be changed to condvars, but not right now)
XXX: this migrates a structure needed by the lfs code in libsa (struct salfs) into lfs.h, where it doesn't belong, but for the time being this is necessary in order to allow the accessors (and the various lfs macros and other goop that relies on them) to compile.
|
1.54 | 16-Jun-2015 |
christos | fix error messages containing \n
|
1.53 | 29-Mar-2015 |
chopps | - Fix fallout for recent bread() change (removing cred arg).
|
1.52 | 23-Mar-2014 |
dholland | don't use sprintf
|
1.51 | 18-Jun-2013 |
christos | Prefix most of the cpp macros with lfs_ and LFS_ to avoid conflicts with ffs. This was done so that boot blocks that want to compile both FFS and LFS in the same file work.
|
1.50 | 08-Jun-2013 |
dholland | Tidy up the LFS userland build hacks. Don't use -I${NETBSDSRCDIR}/sys; don't include files other than the exported LFS headers, which are lfs.h, lfs_inode.h, and (for now) lfs_extern.h.
|
1.49 | 08-Jun-2013 |
dholland | DIRBLKSIZ -> LFS_DIRBLKSIZ DIRECTSIZ -> LFS_DIRECTSIZ DIRSIZ -> LFS_DIRSIZ OLDDIRFMT -> LFS_OLDDIRFMT NEWDIRFMT -> LFS_NEWDIRFMT IFTODT -> LFS_IFTODT DTTOIF -> LFS_DTTOIF
|
1.48 | 08-Jun-2013 |
dholland | struct direct -> struct lfs_direct struct dirtemplate -> struct lfs_dirtemplate struct odirtemplate -> struct lfs_odirtemplate DT_* -> LFS_DT_*
|
1.47 | 08-Jun-2013 |
dholland | Stick LFS_ in front of IFMT, IFIFO, IFREG, etc. so as not to conflict with the UFS copies of these symbols. (Which themselves ought to have UFS_ stuck on.)
|
1.46 | 08-Jun-2013 |
dholland | Move the dinode (on-disk inode) structures to lfs.h, since they are and will be obviously required by userland tools that need to read the on-disk structures.
Also, DINODE{1,2}_SIZE -> LFS_DINODE{1,2}_SIZE.
|
1.45 | 06-Jun-2013 |
dholland | Cleanups and hacks to make lfs userland stuff build: - lfs_cksum.c doesn't actually need ulfs_inode.h any more. - neither does lfs_itimes.c. - add hacks to fsck_lfs to make it compile. - add hacks to newfs_lfs to make it compile. - fix warning in ulfs_quota.c when quotas are fully disabled (as I guess is happening with the rumpity version)
XXX: This commit adds -I${NETBSDSRCDIR}/sys to the Makefiles for XXX: fsck_lfs, newfs_lfs, and lfs_cleanerd. This needs to be cleaned XXX: up ASAP; but I consider this less problematic in the short term XXX: than spewing ulfs_*.h into /usr/include.
|
1.44 | 06-Jun-2013 |
dholland | ufs -> ulfs for fsck_lfs.
|
1.43 | 22-Jan-2013 |
dholland | Stuff UFS_ in front of a few of ufs's symbols to reduce namespace pollution. Specifically: ROOTINO -> UFS_ROOTINO WINO -> UFS_WINO NXADDR -> UFS_NXADDR NDADDR -> UFS_NDADDR NIADDR -> UFS_NIADDR MAXSYMLINKLEN -> UFS_MAXSYMLINKLEN MAXSYMLINKLEN_UFS[12] -> UFS[12]_MAXSYMLINKLEN (for consistency)
Sort out ext2fs's misuse of NDADDR and NIADDR; fortunately, these have the same values in ext2fs and ffs.
No functional change intended.
|
1.42 | 16-Feb-2010 |
mlelstv | branches: 1.42.6; 1.42.12; Three changes in a single commit.
- drop the notion of frags (LFS fragments) vs fsb (FFS fragments) The code uses a complicated unity function that just makes the code difficult to understand.
- support larger sector sizes. Fix disk address computations to use DEV_BSIZE in the kernel as required by device drivers and to use sector sizes in userland.
- Fix several locking bugs in lfs_bio.c and lfs_subr.c.
|
1.41 | 04-Feb-2010 |
christos | Centralize time printing and deal with ctime possibly returning NULL.
|
1.40 | 09-Oct-2008 |
christos | Disable userid to username lookups by default. Add a -U flag to perform them. In single user mode lookups that involve the network might not work and they slow down fsck.
|
1.39 | 16-May-2008 |
hannken | Make sure all cached buffers with valid, not yet written data have been run through copy-on-write. Call fscow_run() with valid data where possible.
The LP_UFSCOW hack is no longer needed to protect ffs_copyonwrite() against endless recursion.
- Add a flag B_MODIFY to bread(), breada() and breadn(). If set the caller intends to modify the buffer returned.
- Always run copy-on-write on buffers returned from ffs_balloc().
- Add new function ffs_getblk() that gets a buffer, assigns a new blkno, may clear the buffer and runs copy-on-write. Process possible errors from getblk() or fscow_run(). Part of PR kern/38664.
Welcome to 4.99.63
Reviewed by: YAMAMOTO Takashi <yamt@netbsd.org>
|
1.38 | 28-Apr-2008 |
martin | branches: 1.38.2; Remove clause 3 and 4 from TNF licenses
|
1.37 | 08-Oct-2007 |
ad | branches: 1.37.8; 1.37.10; Give brelse() a second argument so that it matches the kernel. fsck_lfs now compiles again.
|
1.36 | 09-Nov-2006 |
christos | branches: 1.36.2; 1.36.8; Fix malloc/realloc/calloc issues: always check and exit, use EEXIT instead of 8.
|
1.35 | 01-Sep-2006 |
perseant | Several fixes to improve the reliability of the roll-forward agent. Also, note "properly orphaned" files as distinct from corrupted files.
|
1.34 | 19-Jul-2006 |
perseant | On-disk inode accounting fix for roll-forward.
|
1.33 | 19-Jul-2006 |
perseant | Don't doubly free an inode remove_ino() during roll-forward.
|
1.32 | 18-Jul-2006 |
perseant | Various improvements to fsck_lfs, to wit:
* Add lfs_balloc capability to the lfs library. * Extend the Ifile if we run out of free inodes when creating lost+found. * Don't roll forward if we have allocated a lost+found, to avoid conflicts when adding new files in roll-forward. * Make some messages slightly more verbose (e.g. include inode number, and use pwarn() instead of printf() so the messages include the device name when preening). * Change superblock detection/avoidance to use the offset table in the primary superblock, rather than looking at the contents. * Be more verbose about various operations when passed the -d flag, especially roll-forward. * Be more careful about dirops during roll forward, since the cleaner can sometimes write blocks from dirop vnodes. Detect and avoid this problem. * Always check the free list, even if given -i; if we're going to write it we have to check it first. * Mark inodes dirty when blocks are found during roll forward, so the inodes are written with the new block locations. * Update size of inodes if blocks beyond EOF are found during roll forward. * Fix segment accounting for blocks and inodes found during roll forward. * Report statistics on roll forward: how many new/deleted/moved files and how many updated blocks (or "nothing new"). * Don't care if the device being checked is really a device, if we have been passed the -f flag (to facilitate automated testing). * When writing to the disk, use the current time in the segment headers rathern than time 0. * When passed the -i flag, locate the partial segment containing the Ifile inode and use that to calculate lfs_offset, lfs_curseg, lfs_nextseg. (Again for automated testing.)
|
1.31 | 13-Sep-2005 |
christos | rename lfs.h to lfs_user.h so that it does not conflict.
|
1.30 | 19-Aug-2005 |
christos | 64 bit inode changes
|
1.29 | 27-Jun-2005 |
christos | more const.
|
1.28 | 27-Jun-2005 |
christos | constify
|
1.27 | 08-Jun-2005 |
perseant | Use the correct method to create a new inode, when we allocate lost+found.
Correct uninitialized variable issues in pass6.c and dir.c (PR#30411 and PR#30394, respectively).
|
1.26 | 25-Mar-2005 |
perseant | "#define lfs_devvp lfs_unlockvp" for readability, since that's what we use it for in fsck_lfs/newfs_lfs.
|
1.25 | 06-Feb-2005 |
perry | branches: 1.25.2; ANSIfy a function declaration, remove obsolete "register" declarations.
|
1.24 | 18-Jul-2004 |
yamt | zero-out dinode is not a proper way to 'clear' an lfs inode.
|
1.23 | 20-Mar-2004 |
perseant | change KES license to standard NetBSD license
|
1.22 | 03-Oct-2003 |
yamt | make this work for big (ie. with indirect blocks) directories without spurious 'EXTRA ..' errors.
|
1.21 | 19-Sep-2003 |
itojun | realloc pedant
|
1.20 | 07-Aug-2003 |
agc | Move UCB-licensed code from 4-clause to 3-clause licence.
Patches provided by Joel Baker in PR 22308, verified by myself.
|
1.19 | 13-Jul-2003 |
itojun | use bounded string op
|
1.18 | 12-Jul-2003 |
yamt | in ckinode(), use idesc->id_number instead of dino.di_u.inumber since the latter is invalid for pass2 and vget can return invalid vnode for inode number 0.
|
1.17 | 02-Apr-2003 |
fvdl | Add support for UFS2. UFS2 is an enhanced FFS, adding support for 64 bit block pointers, extended attribute storage, and a few other things.
This commit does not yet include the code to manipulate the extended storage (for e.g. ACLs), this will be done later.
Originally written by Kirk McKusick and Network Associates Laboratories for FreeBSD.
|
1.16 | 28-Mar-2003 |
perseant | Add working writing ability to fsck_lfs, including roll-forward, based on a partial-segment writer ported from the kernel.
|
1.15 | 17-Feb-2003 |
perseant | Add code to UBCify LFS. This is still behind "#ifdef LFS_UBC" for now (there are still some details to work out) but expect that to go away soon. To support these basic changes (creation of lfs_putpages, lfs_gop_write, mods to lfs_balloc) several other changes were made, to wit:
* Create a writer daemon kernel thread whose purpose is to handle page writes for the pagedaemon, but which also takes over some of the functions of lfs_check(). This thread is started the first time an LFS is mounted.
* Add a "flags" parameter to GOP_SIZE. Current values are GOP_SIZE_READ, meaning that the call should return the size of the in-core version of the file, and GOP_SIZE_WRITE, meaning that it should return the on-disk size. One of GOP_SIZE_READ or GOP_SIZE_WRITE must be specified.
* Instead of using malloc(...M_WAITOK) for everything, reserve enough resources to get by and use malloc(...M_NOWAIT), using the reserves if necessary. Use the pool subsystem for structures small enough that this is feasible. This also obsoletes LFS_THROTTLE.
And a few that are not strictly necessary:
* Moves the LFS inode extensions off onto a separately allocated structure; getting closer to LFS as an LKM. "Welcome to 1.6O."
* Unified GOP_ALLOC between FFS and LFS.
* Update LFS copyright headers to correct values.
* Actually cast to unsigned in lfs_shellsort, like the comment says.
* Keep track of which segments were empty before the previous checkpoint; any segments that pass two checkpoints both dirty and empty can be summarily cleaned. Do this. Right now lfs_segclean still works, but this should be turned into an effectless compatibility syscall.
|
1.14 | 24-Jan-2003 |
fvdl | Bump daddr_t to 64 bits. Replace it with int32_t in all places where it was used on-disk, so that on-disk formats remain the same. Remove ufs_daddr_t and ufs_lbn_t for the time being.
|
1.13 | 23-May-2002 |
perseant | Re-checksum the superblock whenever it is marked dirty.
Tested on alpha.
|
1.12 | 25-Sep-2001 |
wiz | branches: 1.12.2; Add some \n to error messages.
|
1.11 | 13-Jul-2001 |
perseant | Merge the short-lived perseant-lfsv2 branch into the trunk.
Kernels and tools understand both v1 and v2 filesystems; newfs_lfs generates v2 by default. Changes for the v2 layout include:
- Segments of non-PO2 size and arbitrary block offset, so these can be matched to convenient physical characteristics of the partition (e.g., stripe or track size and offset).
- Address by fragment instead of by disk sector, paving the way for non-512-byte-sector devices. In theory fragments can be as large as you like, though in reality they must be smaller than MAXBSIZE in size.
- Use serial number and filesystem identifier to ensure that roll-forward doesn't get old data and think it's new. Roll-forward is enabled for v2 filesystems, though not for v1 filesystems by default.
- The inode free list is now a tailq, paving the way for undelete (undelete is not yet implemented, but can be without further non-backwards-compatible changes to disk structures).
- Inode atime information is kept in the Ifile, instead of on the inode; that is, the inode is never written *just* because atime was changed. Because of this the inodes remain near the file data on the disk, rather than wandering all over as the disk is read repeatedly. This speeds up repeated reads by a small but noticeable amount.
Other changes of note include:
- The ifile written by newfs_lfs can now be of arbitrary length, it is no longer restricted to a single indirect block.
- Fixed an old bug where ctime was changed every time a vnode was created. I need to look more closely to make sure that the times are only updated during write(2) and friends, not after-the-fact during a segment write, and certainly not by the cleaner.
|
1.10 | 04-Feb-2001 |
christos | branches: 1.10.2; fix redundant decls
|
1.9 | 06-Jan-2001 |
joff | Fixed blockmap handling to properly use disk blocks rather than fragments. Fixes an issue with fsck_lfs not detecting all duplicate blocks that may exist in a corrupted filesystem.
|
1.8 | 05-Jan-2001 |
lukem | use %ll_ instead of the less standard %q_
|
1.7 | 14-Jun-2000 |
perseant | Add "-i" flag to specify the location of the index file inode, to examine alternate checkpoints. Regularize usage of maxino. Remove olf debugging cruft.
|
1.6 | 23-May-2000 |
perseant | branches: 1.6.2; Convert to NetBSD source code style
|
1.5 | 16-May-2000 |
perseant | fsck_lfs can now write to the filesystem, allowing it to correct most (though still not all) errors in a damaged lfs. Segment byte accounting is corrected in pass 5. "fsck_lfs -p" will do a partial roll-forward, verifying the checkpoint from the newer superblock. fscknames[] is updated so that fsck knows about fsck_lfs.
|
1.4 | 20-Jan-2000 |
perseant | Rename lfs_ifind so that it does not conflict with new kernel prototype. Addresses PR #9253.
|
1.3 | 03-Jul-1999 |
kleink | RCS Id police.
|
1.2 | 24-Mar-1999 |
nathanw | branches: 1.2.2; printf format fixes for Alpha.
|
1.1 | 18-Mar-1999 |
perseant | Initial checkin of fsck_lfs. This version cannot do any repair (-p flag does nothing, and one of -p or -n is required) but can be useful as a diagnostic tool.
|
1.2.2.1 | 21-Jan-2000 |
he | Pull up revision 1.4 (requested by perseant): Fix name collision error due to recent kernel prototype updates. Fixes PR#9253.
|
1.6.2.1 | 22-Jun-2000 |
minoura | Sync w/ netbsd-1-5-base.
|
1.10.2.3 | 02-Jul-2001 |
perseant | Change disk addressing unit to be the fragment, instead of the disk sector. All quantities in the superblock, inodes, indirect blocks, etc. refer now to this abstract unit (called "fsb" as it is in FFS) instead of disk sectors; as a consequence segment summary blocks have to be multiples of a fragment in size. In v1 filesystems, compatibility code ensures that 1 fsb == 1 sector, regardless of fragment size.
Fragments can now range in size between 512 and 32k; in the event that LFS_LABELPAD (8k) is smaller than the disk address unit size, an extra proto-superblock is kept at 8k from the beginning of the disk, to be used *only* to locate the real superblocks. (Not all of the userland knows about this yet.)
Almost all of this was done not by me, but by joff.
|
1.10.2.2 | 30-Jun-2001 |
perseant | Fixes, from joff, for correct compatibility operation of fsck_lfs, dumplfs, lfs_cleanerd; correct usage message from dumplfs.
|
1.10.2.1 | 27-Jun-2001 |
perseant | Import of what I've been calling "LFSv2", that is, LFS with some features added that require changes to the on-disk data structures. These include:
- 64-bit time in everything but inodes - User-specified segment offset, and segment size no longer restricted to PO2. - Serial number on segment summaries in addition to timestamp, and a new volume identifier, to make roll-forward feasible without fear of finding old data and thinking it was new.
Although I think this version works at least as well as what's on the trunk, we're not done yet; hence this commit is going in on a branch and not on the trunk. Enhancements that are not here yet include fragment addressing, like FFS does, instead of block addressing.
|
1.12.2.1 | 02-Jun-2002 |
tv | Pull up revision 1.13 (requested by perseant in ticket #131): Re-checksum the superblock whenever it is marked dirty. Tested on alpha.
|
1.25.2.1 | 07-May-2005 |
tron | Apply patch (requested by perseant in ticket #242): * fsck_lfs buffer cache fixes, including PR #29151 * Change fsck_lfs phase 0 message to reflect reality * fsck_lfs: check phase 5 (cleanerinfo accounting) even on roll-forward * Keep better track of the free list during roll-forward, avoiding a core dump * Improve hash table use for fsck_lfs buffer and vnode cache * Document fsck_lfs flag -f, and implement -q * Add resize_lfs, including kernel support * Add LFS to mountd's list of exportable filesystem types * Make the LFS lkm work again [christos@] * Add MP locking to the LFS kernel subsystem * Fix pager_map deadlock in lfs_putpages() * Avoid incomplete file extension that looks like "partial truncation" to fsck * Use lfs_malloc for cleaner malloc, since the cleaner often runs in low-memory conditions. * Use splay trees, not hash table, to track page allocation for write. * Fix mkdir panic on full fs * Fix page accounting leak by counting differently. * Use rightly named structure for lfs_getattr [skrll@] * Cosmetic changes for readability.
|
1.36.8.1 | 06-Nov-2007 |
matt | sync with HEAD
|
1.36.2.1 | 24-Mar-2009 |
bouyer | Pull up following revision(s) (requested by manu in ticket #1288): sbin/fsck_lfs/inode.c: revision 1.40 via patch sbin/fsck_ffs/fsck_ffs.8: revision 1.44 via patch sbin/fsck_ext2fs/fsck.h: revision 1.14 via patch sbin/fsck_ext2fs/main.c: revision 1.30 via patch sbin/fsck_ffs/inode.c: revision 1.61 via patch sbin/fsck_ffs/main.c: revision 1.71 via patch sbin/fsck_ext2fs/inode.c: revision 1.23 via patch sbin/fsck_lfs/fsck.h: revision 1.18 via patch sbin/fsck_lfs/fsck_lfs.8: revision 1.21 via patch sbin/fsck_lfs/main.c: revision 1.38 via patch sbin/fsck_ext2fs/fsck_ext2fs.8: revision 1.15 via patch sbin/fsck_ffs/fsck.h: revision 1.47 via patch Disable userid to username lookups by default. Add a -U flag to perform them. In single user mode lookups that involve the network might not work and they slow down fsck.
|
1.37.10.1 | 18-May-2008 |
yamt | sync with head.
|
1.37.8.2 | 17-Jan-2009 |
mjf | Sync with HEAD.
|
1.37.8.1 | 02-Jun-2008 |
mjf | Sync with HEAD.
|
1.38.2.1 | 23-Jun-2008 |
wrstuden | Sync w/ -current. 34 merge conflicts to follow.
|
1.42.12.3 | 20-Aug-2014 |
tls | Rebase to HEAD as of a few days ago.
|
1.42.12.2 | 23-Jun-2013 |
tls | resync from head
|
1.42.12.1 | 25-Feb-2013 |
tls | resync with head
|
1.42.6.2 | 22-May-2014 |
yamt | sync with head.
for a reference, the tree before this commit was tagged as yamt-pagecache-tag8.
this commit was splitted into small chunks to avoid a limitation of cvs. ("Protocol error: too many arguments")
|
1.42.6.1 | 23-Jan-2013 |
yamt | sync with head
|
1.68.8.1 | 30-Oct-2017 |
snj | Pull up following revision(s) (requested by maya in ticket #330): sbin/fsck_lfs/inode.c: 1.69 sbin/fsck_lfs/lfs.c: 1.73 sbin/fsck_lfs/pass6.c: 1.50 sbin/fsck_lfs/segwrite.c: 1.46 sys/ufs/lfs/lfs.h: 1.202-1.203 sys/ufs/lfs/lfs_accessors.h: 1.48 sys/ufs/lfs/lfs_alloc.c: 1.136-1.137 sys/ufs/lfs/lfs_balloc.c: 1.94 sys/ufs/lfs/lfs_bio.c: 1.141 sys/ufs/lfs/lfs_extern.h: 1.113 sys/ufs/lfs/lfs_inode.c: 1.156-1.157 sys/ufs/lfs/lfs_inode.h: 1.20, 1.21, 1.23 sys/ufs/lfs/lfs_itimes.c: 1.20 sys/ufs/lfs/lfs_pages.c: 1.13-1.15 sys/ufs/lfs/lfs_rename.c: 1.22 sys/ufs/lfs/lfs_segment.c: 1.270-1.275 sys/ufs/lfs/lfs_subr.c: 1.94-1.97 sys/ufs/lfs/lfs_syscalls.c: 1.175 sys/ufs/lfs/lfs_vfsops.c: 1.360 sys/ufs/lfs/lfs_vnops.c: 1.316-1.321 sys/ufs/lfs/ulfs_inode.c: 1.20 sys/ufs/lfs/ulfs_inode.h: 1.24 sys/ufs/lfs/ulfs_lookup.c: 1.41 sys/ufs/lfs/ulfs_quota2.c: 1.31 sys/ufs/lfs/ulfs_readwrite.c: 1.24 sys/ufs/lfs/ulfs_vnops.c: 1.49-1.50 Update inode member i_flag --> i_state to keep up with kernel changes Move definition of IN_ALLMOD near the flag it's a mask for. Now we can see that it doesn't match all the flags, but changing that will require more careful thought. Correct confusion between i_flag and i_flags These will have to be renamed. Spotted by Riastradh, thanks! Add an XXX about the missing flags so it's not buried in a commit message. now the XXX count for LFS is 260 Rename i_flag to i_state. The similarity to i_flags has previously caused errors. Use continue to denote the no-op loop to match netbsd style newline for extra clarity. It isn't safe to drain dirops with seglock held, it'll deadlock if there are any dirops. drain before grabbing seglock. lfs_dirops == 0 is always true (as we already drained dirops), so omit that part of the comparison. Fixes a lot of LFS deadlocks. PR kern/52301 Many thanks to dholland for help analyzing coredumps Ifdef out KDASSERT which fires on my machine. Deduplicate sanity check that seglock is held on segunlock Revert r1.272 fix to PR kern/52301, the performance hit is making things unusable. change lfs_nextsegsleep and lfs_allclean_wakeup to use condvar XXX had to use lfs_lock in lfs_segwait, removed kernel_lock, is this appropriate? fix buffer overflow/KASSERT when cookies are supplied lfs no longer uses the ffs-style struct direct, use the correct minimum size from dholland XXX more wrong Consistently use {,UN}MARK_VNODE macros rather than function calls. Not much point doing anything after a panic call Ask some question about the code in a XXX comment XXX question our double-flushing of dirops Fix typo in comment
|
1.69.6.1 | 08-Apr-2020 |
martin | Merge changes from current as of 20200406
|
1.4 | 17-Jun-2020 |
kamil | Include explicitly <rump/rump_syscallshotgun.h> for previous indirect users via <rump/rump.h>.
|
1.3 | 13-Oct-2009 |
pooka | fix prototypes of function pointers to varargs syscalls
|
1.2 | 06-Aug-2009 |
pooka | in const where available
|
1.1 | 06-Aug-2009 |
pooka | Define syscalls of lfs userspace tools (cleaner, mainly) through a struct called kernelops, which contains standard system calls for the normal case and rump system calls for the rump case.
Make it possible to run the lfs cleaner in a library fashion (taking the quick route with the implementation).
|
1.4 | 16-Feb-2010 |
mlelstv | Three changes in a single commit.
- drop the notion of frags (LFS fragments) vs fsb (FFS fragments) The code uses a complicated unity function that just makes the code difficult to understand.
- support larger sector sizes. Fix disk address computations to use DEV_BSIZE in the kernel as required by device drivers and to use sector sizes in userland.
- Fix several locking bugs in lfs_bio.c and lfs_subr.c.
|
1.3 | 13-Oct-2009 |
pooka | fix prototypes of function pointers to varargs syscalls
|
1.2 | 06-Aug-2009 |
pooka | in const where available
|
1.1 | 06-Aug-2009 |
pooka | Define syscalls of lfs userspace tools (cleaner, mainly) through a struct called kernelops, which contains standard system calls for the normal case and rump system calls for the rump case.
Make it possible to run the lfs cleaner in a library fashion (taking the quick route with the implementation).
|
1.76 | 12-Oct-2025 |
perseant | Look at the superblock magic number before attempting to read the address of the first alternate out of it. If the magic number doesn't match one of our known numbers, the primary is invalid and we have no way of locating an alternate. Bail out in that case.
Makes fsck_lfs work for LFS64, at least in the minimal sense of being able to report that a newly created LFS64 has no errors.
|
1.75 | 03-Apr-2020 |
joerg | branches: 1.75.8; Avoid common symbols for fsck_lfs.
|
1.74 | 12-Jun-2018 |
zafer | branches: 1.74.2; Remove duplicate assignments. Fixes PR bin/51512 by Jose Luis Rodriguez Garcia
|
1.73 | 10-Jun-2017 |
pgoyette | branches: 1.73.4; Update inode member i_flag --> i_state to keep up with kernel changes
|
1.72 | 16-Sep-2016 |
christos | branches: 1.72.6; PR/51478: Jose Luis Rodriguez Garcia: Fix leak mem fsck_lfs/lfs.c
|
1.71 | 20-Mar-2016 |
dholland | branches: 1.71.2; Comment out unused logic. PR 50973
|
1.70 | 19-Feb-2016 |
riastradh | Need <stdbool.h> for true/false.
|
1.69 | 15-Oct-2015 |
dholland | Enable lfs64 in fsck_lfs. (and in everything else that uses this code)
|
1.68 | 10-Oct-2015 |
dholland | Track down and fix two missing uses of SEGSUM_FINFOBASE().
|
1.67 | 03-Oct-2015 |
dholland | Drop an explicit sign-extension in fsck that shouldn't be needed any more.
|
1.66 | 03-Oct-2015 |
dholland | Add lfs_checkword type for reading checksum data out of structures. This is always uint32_t, but having a name for it both makes things clearer and avoids confusion about whether it should be 32 or 64 bit.
Note: deployed in only one place (that was erroneously tagged ondisk32) so far.
|
1.65 | 03-Oct-2015 |
dholland | Fix hardwired 32-bit stuff in fsck: - compute the maximum file size using LFS_BLKPTRSIZE() - use the new IINFO in pass 6 instead of uint32_t pointers - use accessors to read and write indirect blocks
|
1.64 | 03-Oct-2015 |
dholland | Apply IINFO in the other userland tools.
|
1.63 | 01-Sep-2015 |
dholland | Use daddr_t, not ulfs_daddr_t, as the latter's 32 bits wide. Don't use either for on-disk items. Declare external data in header files. Part 3 of 3.
|
1.62 | 01-Sep-2015 |
dholland | Use daddr_t, not ulfs_daddr_t, as the latter's 32 bits wide. Don't use either for on-disk items. Part 2 of 3.
|
1.61 | 01-Sep-2015 |
dholland | Use daddr_t, not ulfs_daddr_t, as the latter's 32 bits wide. Don't use either for on-disk items. Part 1 of 3.
|
1.60 | 01-Sep-2015 |
dholland | The ifile's inode number is constant. (it is always 1)
Therefore, storing the value in the superblock and reading it out again is silly and offers the opportunity for it to become corrupted. So, don't do that (most of the code already didn't) and use the existing constant instead. Initialize new 32-bit superblocks with the value for the sake of old userland programs, but don't keep the value in the 64-bit superblock at all.
(approved by Margo Seltzer)
|
1.59 | 01-Sep-2015 |
dholland | Add byteswapping to the dinode accessors.
This prevents regressions in the ulfs code when switching to the new accessors. Note that while adding byteswapping to the other accessors is straightforward, I haven't done it yet; and that also is not enough to make LFS_EI work, because there are places lying around that bypass the accessors for one reason and another and all of them need to be updated. That is going to have to wait for a later day as LFS_EI is not on the critical path right now.
|
1.58 | 01-Sep-2015 |
dholland | Use the lfs dinode accessors in place of the ufs-derived ones. (Mostly.)
The ufs-derived ones are fake structure member macros, which are gross and not very safe. Also, it seems that a lot of places in the lfs code were using the ffsv1 branch of them unconditionally, and this way it's guaranteed all those places have been updated.
Found while doing this: for non-devices, have getattr produce NODEV in the rdev field instead of leaking the address of the first direct block.
|
1.57 | 19-Aug-2015 |
dholland | Part two of dinodes; use the same union everywhere. (previously the ufs-derived code had things set up slightly different)
Remove a bunch of associated mess.
|
1.56 | 12-Aug-2015 |
dholland | Hack up dinode usage to be 64 vs. 32 as needed. Part 1.
(This part changes the native lfs code; the ufs-derived code already has 64 vs. 32 logic, but as aspects of it are unsafe, and don't entirely interoperate cleanly with the lfs 64/32 stuff, pass 2 will be rehashing that.)
|
1.55 | 12-Aug-2015 |
dholland | Provide 32-bit and 64-bit versions of FINFO.
This also entailed sorting out part of struct segment, as that contains a pointer into the current FINFO data.
|
1.54 | 12-Aug-2015 |
dholland | Make 32-bit and 64-bit versions of SEGSUM. Also fix some of the FINFO handling as it's closely entangled.
|
1.53 | 12-Aug-2015 |
dholland | Add IFILE32 and IFILE64 structures for the on-disk ifile entries. Add and use accessors. There are also a bunch of places that cast and I hope I've found them all...
|
1.52 | 02-Aug-2015 |
dholland | Add a (draft) 64-bit superblock. Make things build again.
Add pieces of support for using both superblock types where convenient, and specifically to the superblock accessors, but don't actually enable it anywhere.
First substantive step on PR 50000.
|
1.51 | 02-Aug-2015 |
dholland | Use accessor functions for the version field of the lfs superblock. I thought at first maybe the cases that test the version should be rolled into the accessors, but on the whole I think the conclusion on that is no.
|
1.50 | 02-Aug-2015 |
dholland | Second batch of 64 -> 32 truncations in lfs, along with more minor tidyups and corrections in passing.
|
1.49 | 02-Aug-2015 |
dholland | Fix assorted 64 -> 32 truncations in lfs. Also, some minor tidyups and corrections in passing.
|
1.48 | 28-Jul-2015 |
dholland | Add a new lfs header file: lfs_accessors.h.
This contains all the accessor functions and macros out of lfs.h. Add an include of lfs_accessors.h after all uses of lfs.h... except for code that wants to define its own struct lfs-alike that the accessors are supposed to play along with. For these, set STRUCT_LFS and include lfs_accessors.h after the necessary structure has been defined, so that lfs_accessors.h can emit functions in terms of it.
|
1.47 | 24-Jul-2015 |
dholland | More lfs superblock accessors. (This changes the rest of the code over; all the accessors were already added.)
The difference between this commit and the previous one is arbitrary, but the previous one passed the regression tests on its own so I'm keeping it separate to help with any bisections that might be needed in the future.
|
1.46 | 24-Jul-2015 |
dholland | Switch to accessor functions for elements of the LFS on-disk superblock. This will allow switching between 32/64 bit forms on the fly; it will also allow handling LFS_EI reasonably tidily. (That currently doesn't work on the superblock.)
It also gets rid of cpp abuse in the form of fake structure member macros.
Also, instead of doing sleep/wakeup on &lfs_avail and &lfs_nextseg inside the on-disk superblock, add extra elements to the in-memory struct lfs for this. (XXX: these should be changed to condvars, but not right now)
XXX: this migrates a structure needed by the lfs code in libsa (struct salfs) into lfs.h, where it doesn't belong, but for the time being this is necessary in order to allow the accessors (and the various lfs macros and other goop that relies on them) to compile.
|
1.45 | 31-May-2015 |
hannken | Use VFS_PROTOS() for lfs. Rename conflicting struct lfs field "lfs_start" to "lfs_s0addr".
No functional change.
|
1.44 | 29-Mar-2015 |
chopps | - Fix fallout for recent bread() change (removing cred arg).
|
1.43 | 13-Jul-2014 |
dholland | Revert previous; it doesn't work because all the lfs tools promiscuously .PATH in each other's source files, and I haven't the time or patience to deal with it tonight.
|
1.42 | 12-Jul-2014 |
dholland | Remove pointless function indirection through panic_func(). It was initialized to one thing, and then set to another right at the top of main and never changed again.
|
1.41 | 19-Oct-2013 |
christos | branches: 1.41.2; fix unused variable warnings.
|
1.40 | 18-Jun-2013 |
christos | Prefix most of the cpp macros with lfs_ and LFS_ to avoid conflicts with ffs. This was done so that boot blocks that want to compile both FFS and LFS in the same file work.
|
1.39 | 08-Jun-2013 |
dholland | Tidy up the LFS userland build hacks. Don't use -I${NETBSDSRCDIR}/sys; don't include files other than the exported LFS headers, which are lfs.h, lfs_inode.h, and (for now) lfs_extern.h.
|
1.38 | 06-Jun-2013 |
dholland | Cleanups and hacks to make lfs userland stuff build: - lfs_cksum.c doesn't actually need ulfs_inode.h any more. - neither does lfs_itimes.c. - add hacks to fsck_lfs to make it compile. - add hacks to newfs_lfs to make it compile. - fix warning in ulfs_quota.c when quotas are fully disabled (as I guess is happening with the rumpity version)
XXX: This commit adds -I${NETBSDSRCDIR}/sys to the Makefiles for XXX: fsck_lfs, newfs_lfs, and lfs_cleanerd. This needs to be cleaned XXX: up ASAP; but I consider this less problematic in the short term XXX: than spewing ulfs_*.h into /usr/include.
|
1.37 | 06-Jun-2013 |
dholland | ufs -> ulfs for fsck_lfs.
|
1.36 | 22-Jan-2013 |
dholland | Stuff UFS_ in front of a few of ufs's symbols to reduce namespace pollution. Specifically: ROOTINO -> UFS_ROOTINO WINO -> UFS_WINO NXADDR -> UFS_NXADDR NDADDR -> UFS_NDADDR NIADDR -> UFS_NIADDR MAXSYMLINKLEN -> UFS_MAXSYMLINKLEN MAXSYMLINKLEN_UFS[12] -> UFS[12]_MAXSYMLINKLEN (for consistency)
Sort out ext2fs's misuse of NDADDR and NIADDR; fortunately, these have the same values in ext2fs and ffs.
No functional change intended.
|
1.35 | 12-Jul-2011 |
dholland | branches: 1.35.2; 1.35.8; Don't need to initialize (one of) the elements now in i_crap; nothing in here touches that material.
|
1.34 | 21-Jun-2011 |
mrg | avoid code that looks like this: x = x = y; since GCC 4.5 complains about it having sequence point issues.
|
1.33 | 21-Feb-2010 |
mlelstv | branches: 1.33.4; dev_bsize wasn't initialized. The actual value doesn't matter since the same value is used to compute byte offsets into the special file but a value of zero causes a division by zero.
|
1.32 | 16-Feb-2010 |
mlelstv | Three changes in a single commit.
- drop the notion of frags (LFS fragments) vs fsb (FFS fragments) The code uses a complicated unity function that just makes the code difficult to understand.
- support larger sector sizes. Fix disk address computations to use DEV_BSIZE in the kernel as required by device drivers and to use sector sizes in userland.
- Fix several locking bugs in lfs_bio.c and lfs_subr.c.
|
1.31 | 06-Aug-2009 |
pooka | Define syscalls of lfs userspace tools (cleaner, mainly) through a struct called kernelops, which contains standard system calls for the normal case and rump system calls for the rump case.
Make it possible to run the lfs cleaner in a library fashion (taking the quick route with the implementation).
|
1.30 | 22-Feb-2009 |
ad | PR kern/26878 FFSv2 + softdep = livelock (no free ram) PR kern/16942 panic with softdep and quotas PR kern/19565 panic: softdep_write_inodeblock: indirect pointer #1 mismatch PR kern/26274 softdep panic: allocdirect_merge: ... PR kern/26374 Long delay before non-root users can write to softdep partitions PR kern/28621 1.6.x "vp != NULL" panic in ffs_softdep.c:4653 while unmounting a softdep (+quota) filesystem PR kern/29513 FFS+Softdep panic with unfsck-able file-corruption PR kern/31544 The ffs softdep code appears to fail to write dirty bits to disk PR kern/31981 stopping scsi disk can cause panic (softdep) PR kern/32116 kernel panic in softdep (assertion failure) PR kern/32532 softdep_trackbufs deadlock PR kern/37191 softdep: locking against myself PR kern/40474 Kernel panic after remounting raid root with softdep
Retire softdep, pass 2. As discussed and later formally announced on the mailing lists.
|
1.29 | 16-May-2008 |
hannken | branches: 1.29.4; Make sure all cached buffers with valid, not yet written data have been run through copy-on-write. Call fscow_run() with valid data where possible.
The LP_UFSCOW hack is no longer needed to protect ffs_copyonwrite() against endless recursion.
- Add a flag B_MODIFY to bread(), breada() and breadn(). If set the caller intends to modify the buffer returned.
- Always run copy-on-write on buffers returned from ffs_balloc().
- Add new function ffs_getblk() that gets a buffer, assigns a new blkno, may clear the buffer and runs copy-on-write. Process possible errors from getblk() or fscow_run(). Part of PR kern/38664.
Welcome to 4.99.63
Reviewed by: YAMAMOTO Takashi <yamt@netbsd.org>
|
1.28 | 28-Apr-2008 |
martin | branches: 1.28.2; Remove clause 3 and 4 from TNF licenses
|
1.27 | 08-Oct-2007 |
ad | branches: 1.27.8; 1.27.10; Give brelse() a second argument so that it matches the kernel. fsck_lfs now compiles again.
|
1.26 | 09-Nov-2006 |
christos | branches: 1.26.8; Fix malloc/realloc/calloc issues: always check and exit, use EEXIT instead of 8.
|
1.25 | 01-Sep-2006 |
perseant | Several fixes to improve the reliability of the roll-forward agent. Also, note "properly orphaned" files as distinct from corrupted files.
|
1.24 | 18-Jul-2006 |
perseant | Various improvements to fsck_lfs, to wit:
* Add lfs_balloc capability to the lfs library. * Extend the Ifile if we run out of free inodes when creating lost+found. * Don't roll forward if we have allocated a lost+found, to avoid conflicts when adding new files in roll-forward. * Make some messages slightly more verbose (e.g. include inode number, and use pwarn() instead of printf() so the messages include the device name when preening). * Change superblock detection/avoidance to use the offset table in the primary superblock, rather than looking at the contents. * Be more verbose about various operations when passed the -d flag, especially roll-forward. * Be more careful about dirops during roll forward, since the cleaner can sometimes write blocks from dirop vnodes. Detect and avoid this problem. * Always check the free list, even if given -i; if we're going to write it we have to check it first. * Mark inodes dirty when blocks are found during roll forward, so the inodes are written with the new block locations. * Update size of inodes if blocks beyond EOF are found during roll forward. * Fix segment accounting for blocks and inodes found during roll forward. * Report statistics on roll forward: how many new/deleted/moved files and how many updated blocks (or "nothing new"). * Don't care if the device being checked is really a device, if we have been passed the -f flag (to facilitate automated testing). * When writing to the disk, use the current time in the segment headers rathern than time 0. * When passed the -i flag, locate the partial segment containing the Ifile inode and use that to calculate lfs_offset, lfs_curseg, lfs_nextseg. (Again for automated testing.)
|
1.23 | 05-Jun-2006 |
christos | fsck_lfs does not us fsutil.c; perhaps it should? revert to perror for now.
|
1.22 | 05-Jun-2006 |
christos | s/perror/perr
|
1.21 | 17-Apr-2006 |
perseant | Remove the free list ordering/disordering code, since the kernel now keeps the list in order (ordering it on mount).
Regularize error messages: these are now all in ALL CAPS, with all hex numbers (not reported in caps) prefixed by 0x. (The non-fsck-specific messages are an exception to this all-caps rule.)
|
1.20 | 17-Mar-2006 |
rumble | Check for allocation failures in malloc, calloc, realloc, asprintf, and vasprintf and try to handle them.
|
1.19 | 13-Oct-2005 |
jmc | Put back removed initializer. gcc on sh3 still doesn't get it correct...
|
1.18 | 08-Oct-2005 |
chs | avoid the need for a bogus initializer.
|
1.17 | 13-Sep-2005 |
christos | rename lfs.h to lfs_user.h so that it does not conflict.
|
1.16 | 08-Jun-2005 |
perseant | Use the correct method to create a new inode, when we allocate lost+found.
Correct uninitialized variable issues in pass6.c and dir.c (PR#30411 and PR#30394, respectively).
|
1.15 | 07-Jun-2005 |
he | Initialize metalbn in ufs_getlbns to appease -Wuninitialized. Marked with XXXGCC for dreamcast (found while compiling for it).
Reviewed by lukem.
|
1.14 | 02-Jun-2005 |
lukem | appease gcc -Wuninitialized
|
1.13 | 23-May-2005 |
perseant | Check some error conditions that would otherwise cause fsck_lfs to dump core. Pointed out by Pavel Cahyna in a follow-on to PR #29151.
|
1.12 | 23-Apr-2005 |
perseant | Check parts of pass 5 even if only rolling forward. We can't check the true segment holdings against the blocks held by the inodes, but we can still check the cleanerinfo data against the segment table.
|
1.11 | 12-Apr-2005 |
martin | When creating an int hash value from pointer, go via intptr_t. Fixes PR 29953.
|
1.10 | 11-Apr-2005 |
perseant | Be more efficient with the hash tables for the buffer and vnode caches.
Note that roll-forward can add more inodes to the filesystem; don't overflow the tables but reallocate them.
|
1.9 | 25-Mar-2005 |
perseant | "#define lfs_devvp lfs_unlockvp" for readability, since that's what we use it for in fsck_lfs/newfs_lfs.
|
1.8 | 26-Feb-2005 |
perseant | branches: 1.8.2; Various minor LFS improvements:
* Extend the lfs library from fsck_lfs(8) so that it can be used with a not-yet-existent LFS. Make newfs_lfs(8) use this library, so it can create LFSs whose Ifile is larger than one segment. * Make newfs_lfs(8) use strsuftoi64() for its arguments, a la newfs(8). * Make fsck_lfs(8) respect the "file system is clean" flag. * Don't let fsck_lfs(8) think it has dirty blocks when invoked with the -n flag.
|
1.7 | 07-Aug-2003 |
agc | branches: 1.7.4; Move UCB-licensed code from 4-clause to 3-clause licence.
Patches provided by Joel Baker in PR 22308, verified by myself.
|
1.6 | 12-Jul-2003 |
yamt | in lfs_raw_vget(), - don't leave references into free'ed memory region. (fix SIGBUSes) - plug a memory leak.
|
1.5 | 12-Jul-2003 |
yamt | - don't assume that malloc'ed memory is zero-filled. - LIST_INIT {dirty,clean} block lists.
|
1.4 | 12-Jul-2003 |
yamt | only read superblock (ie. struct dlfs) from disk and initialize rest of struct lfs by hand. (this shouldn't cause a real problem since if superblock is valid, LFS_SBPAD-sizeof(struct dlfs) bytes after it is always zero-filled, though)
PR/22123 (Izumi Tsutsui)
|
1.3 | 08-May-2003 |
petrov | Fix format string. (no % in PRIx..).
|
1.2 | 02-Apr-2003 |
fvdl | Add support for UFS2. UFS2 is an enhanced FFS, adding support for 64 bit block pointers, extended attribute storage, and a few other things.
This commit does not yet include the code to manipulate the extended storage (for e.g. ACLs), this will be done later.
Originally written by Kirk McKusick and Network Associates Laboratories for FreeBSD.
|
1.1 | 28-Mar-2003 |
perseant | Add working writing ability to fsck_lfs, including roll-forward, based on a partial-segment writer ported from the kernel.
|
1.7.4.1 | 10-May-2005 |
riz | Pull up the following revisions (requested by perseant in ticket #1281):
1.8 sys/ufs/lfs/TODO 1.75 sys/ufs/lfs/lfs.h (via patch) 1.74 sys/ufs/lfs/lfs_alloc.c (via patch) 1.49, 1.51 sys/ufs/lfs/lfs_balloc.c (1.51 via patch) 1.78 sys/ufs/lfs/lfs_bio.c 1.62 sys/ufs/lfs/lfs_extern.h (via patch) 1.156 sys/ufs/lfs/lfs_segment.c (via patch) 1.48 sys/ufs/lfs/lfs_subr.c 1.101 sys/ufs/lfs/lfs_syscalls.c 1.163 sys/ufs/lfs/lfs_vfsops.c (via patch) 1.134 sys/ufs/lfs/lfs_vnops.c (via patch) 1.61 sys/ufs/ufs/ufs_readwrite.c (via patch)
1.20 libexec/lfs_cleanerd/clean.h (via patch) 1.52 libexec/lfs_cleanerd/cleanerd.c (via patch) 1.41 libexec/lfs_cleanerd/library.c (via patch)
1.4 regress/sys/fs/lfs/newfs_fsck/Makefile 1.2 regress/sys/fs/lfs/newfs_fsck/mkfs_mount 1.2 regress/sys/fs/lfs/newfs_fsck/smallfiles 1.3 sbin/fsck_lfs/bufcache.c 1.3 sbin/fsck_lfs/bufcache.h 1.3 sbin/fsck_lfs/lfs.h 1.8 sbin/fsck_lfs/lfs.c (via patch) 1.8 sbin/fsck_lfs/pass3.c (via patch) 1.18 sbin/fsck_lfs/pass0.c (via patch) 1.18 sbin/fsck_lfs/utilities.c (via patch) 1.7 sbin/fsck_lfs/segwrite.c 1.19 sbin/fsck_lfs/setup.c (via patch) 1.3 sbin/newfs_lfs/Makefile 0 sbin/newfs_lfs/lfs.c (yes, remove it) 1.1 sbin/newfs_lfs/make_lfs.c 1.15 sbin/newfs_lfs/newfs.c (via patch)
Various minor LFS improvements.
Kernel:
* Note when lfs_putpages(9) thinks it is not going to be writing any pages before calling genfs_putpages(9). This prevents a situation in which blocks can be queued for writing without a segment header. * Correct computation of NRESERVE(), though it is still a gross overestimate in most cases. Note that if NRESERVE() is too high, it may be impossible to create files on the filesystem. We catch this case on filesystem mount and refuse to mount r/w. * Allow filesystems to be mounted whose block size is == MAXBSIZE. * Somewhere along the line, ufs_bmaparray(9) started mangling UNWRITTEN entries in indirect blocks again, triggering a failed assertion "daddr <= LFS_MAX_DADDR". Explicitly convert to and from int32_t to correct this. Should fix PR #29045. * Add a high-water mark for the number of dirty pages any given LFS can hold before triggering a flush. This is settable by sysctl, but off (zero) by default. * Be more careful about the MAX_BYTES and MAX_BUFS computations so we shouldn't see "please increase to at least zero" messages. * Note that VBLK and VCHR vnodes can have nonzero values in di_db[0] even though their v_size == 0. Don't panic when we see this. Fixes PR #26680. * Change lfs_bfree to a signed quantity. The manner in which it is processed before being passed to the cleaner means that sometimes it may drop below zero, and the cleaner must be aware of this. * Never report bfree < 0 (or higher than lfs_dsize) through lfs_statfs(9). This prevents df(1) from ever telling us that our full filesystems have 16TB free. * Account space allocated through lfs_balloc(9) that does not have associated buffer headers, so that the pagedaemon doesn't run us out of segments. * Return ENOSPC from lfs_balloc(9) when bfree drops to zero. * Address a deadlock in lfs_bmapv/lfs_markv when the filesystem is being unmounted. Because vfs_busy() is a shared lock, and lfs_bmapv/lfs_markv mark the filesystem vfs_busy(), the cleaner can be holding the lock that umount() is blocking on, then try to vfs_busy() again in getnewvnode().
cleaner:
* Adapt lfs_cleanerd to use the fcntl call to get the Ifile filehandle, so it need not be in the namespace. * Make lfs_cleanerd be more careful when there are very few available segments. * Make lfs_cleanerd less verbose when the filesystem is unmounted.
newfs_lfs, fsck_lfs, and regression:
* Extend the lfs library from fsck_lfs(8) so that it can be used with a not-yet-existent LFS. Make newfs_lfs(8) use this library, so it can create LFSs whose Ifile is larger than one segment. Addresses PR #11110. * Make newfs_lfs(8) use strsuftoi64() for its arguments, a la newfs(8). * Make fsck_lfs(8) respect the "file system is clean" flag. * Don't let fsck_lfs(8) think it has dirty blocks when invoked with the -n flag. * Remove the Ifile from the filesystem namespace. The cleaner now uses a fcntl call on the root inode to find the Ifile filehandle. (As a side-effect, addresses PR #29144.)
|
1.8.2.1 | 07-May-2005 |
tron | Apply patch (requested by perseant in ticket #242): * fsck_lfs buffer cache fixes, including PR #29151 * Change fsck_lfs phase 0 message to reflect reality * fsck_lfs: check phase 5 (cleanerinfo accounting) even on roll-forward * Keep better track of the free list during roll-forward, avoiding a core dump * Improve hash table use for fsck_lfs buffer and vnode cache * Document fsck_lfs flag -f, and implement -q * Add resize_lfs, including kernel support * Add LFS to mountd's list of exportable filesystem types * Make the LFS lkm work again [christos@] * Add MP locking to the LFS kernel subsystem * Fix pager_map deadlock in lfs_putpages() * Avoid incomplete file extension that looks like "partial truncation" to fsck * Use lfs_malloc for cleaner malloc, since the cleaner often runs in low-memory conditions. * Use splay trees, not hash table, to track page allocation for write. * Fix mkdir panic on full fs * Fix page accounting leak by counting differently. * Use rightly named structure for lfs_getattr [skrll@] * Cosmetic changes for readability.
|
1.26.8.1 | 06-Nov-2007 |
matt | sync with HEAD
|
1.27.10.1 | 18-May-2008 |
yamt | sync with head.
|
1.27.8.1 | 02-Jun-2008 |
mjf | Sync with HEAD.
|
1.28.2.1 | 23-Jun-2008 |
wrstuden | Sync w/ -current. 34 merge conflicts to follow.
|
1.29.4.1 | 13-May-2009 |
jym | Sync with HEAD.
Third (and last) commit. See http://mail-index.netbsd.org/source-changes/2009/05/13/msg221222.html
|
1.33.4.1 | 23-Jun-2011 |
cherry | Catchup with rmind-uvmplock merge.
|
1.35.8.3 | 20-Aug-2014 |
tls | Rebase to HEAD as of a few days ago.
|
1.35.8.2 | 23-Jun-2013 |
tls | resync from head
|
1.35.8.1 | 25-Feb-2013 |
tls | resync with head
|
1.35.2.2 | 22-May-2014 |
yamt | sync with head.
for a reference, the tree before this commit was tagged as yamt-pagecache-tag8.
this commit was splitted into small chunks to avoid a limitation of cvs. ("Protocol error: too many arguments")
|
1.35.2.1 | 23-Jan-2013 |
yamt | sync with head
|
1.41.2.1 | 10-Aug-2014 |
tls | Rebase.
|
1.71.2.1 | 04-Nov-2016 |
pgoyette | Sync with HEAD
|
1.72.6.1 | 30-Oct-2017 |
snj | Pull up following revision(s) (requested by maya in ticket #330): sbin/fsck_lfs/inode.c: 1.69 sbin/fsck_lfs/lfs.c: 1.73 sbin/fsck_lfs/pass6.c: 1.50 sbin/fsck_lfs/segwrite.c: 1.46 sys/ufs/lfs/lfs.h: 1.202-1.203 sys/ufs/lfs/lfs_accessors.h: 1.48 sys/ufs/lfs/lfs_alloc.c: 1.136-1.137 sys/ufs/lfs/lfs_balloc.c: 1.94 sys/ufs/lfs/lfs_bio.c: 1.141 sys/ufs/lfs/lfs_extern.h: 1.113 sys/ufs/lfs/lfs_inode.c: 1.156-1.157 sys/ufs/lfs/lfs_inode.h: 1.20, 1.21, 1.23 sys/ufs/lfs/lfs_itimes.c: 1.20 sys/ufs/lfs/lfs_pages.c: 1.13-1.15 sys/ufs/lfs/lfs_rename.c: 1.22 sys/ufs/lfs/lfs_segment.c: 1.270-1.275 sys/ufs/lfs/lfs_subr.c: 1.94-1.97 sys/ufs/lfs/lfs_syscalls.c: 1.175 sys/ufs/lfs/lfs_vfsops.c: 1.360 sys/ufs/lfs/lfs_vnops.c: 1.316-1.321 sys/ufs/lfs/ulfs_inode.c: 1.20 sys/ufs/lfs/ulfs_inode.h: 1.24 sys/ufs/lfs/ulfs_lookup.c: 1.41 sys/ufs/lfs/ulfs_quota2.c: 1.31 sys/ufs/lfs/ulfs_readwrite.c: 1.24 sys/ufs/lfs/ulfs_vnops.c: 1.49-1.50 Update inode member i_flag --> i_state to keep up with kernel changes Move definition of IN_ALLMOD near the flag it's a mask for. Now we can see that it doesn't match all the flags, but changing that will require more careful thought. Correct confusion between i_flag and i_flags These will have to be renamed. Spotted by Riastradh, thanks! Add an XXX about the missing flags so it's not buried in a commit message. now the XXX count for LFS is 260 Rename i_flag to i_state. The similarity to i_flags has previously caused errors. Use continue to denote the no-op loop to match netbsd style newline for extra clarity. It isn't safe to drain dirops with seglock held, it'll deadlock if there are any dirops. drain before grabbing seglock. lfs_dirops == 0 is always true (as we already drained dirops), so omit that part of the comparison. Fixes a lot of LFS deadlocks. PR kern/52301 Many thanks to dholland for help analyzing coredumps Ifdef out KDASSERT which fires on my machine. Deduplicate sanity check that seglock is held on segunlock Revert r1.272 fix to PR kern/52301, the performance hit is making things unusable. change lfs_nextsegsleep and lfs_allclean_wakeup to use condvar XXX had to use lfs_lock in lfs_segwait, removed kernel_lock, is this appropriate? fix buffer overflow/KASSERT when cookies are supplied lfs no longer uses the ffs-style struct direct, use the correct minimum size from dholland XXX more wrong Consistently use {,UN}MARK_VNODE macros rather than function calls. Not much point doing anything after a panic call Ask some question about the code in a XXX comment XXX question our double-flushing of dirops Fix typo in comment
|
1.73.4.1 | 25-Jun-2018 |
pgoyette | Sync with HEAD
|
1.74.2.1 | 08-Apr-2020 |
martin | Merge changes from current as of 20200406
|
1.75.8.2 | 06-Sep-2025 |
perseant | Separate buffer cache code between fsck_lfs and fsck_exfatfs. This may be reunited later, probably as a library.
|
1.75.8.1 | 29-Jun-2024 |
perseant | Implementation of exFAT filesystem, with compilation conditional on MKEXFATFS make variable.
|
1.7 | 13-Sep-2005 |
christos | rename lfs.h to lfs_user.h so that it does not conflict.
|
1.6 | 08-Jun-2005 |
perseant | Use the correct method to create a new inode, when we allocate lost+found.
Correct uninitialized variable issues in pass6.c and dir.c (PR#30411 and PR#30394, respectively).
|
1.5 | 01-Apr-2005 |
he | Move the definition of simple_lock() and simple_unlock() to a common header, since more of the LFS macros now use these functions. Since we're outside of the kernel, these are defined to be empty.
|
1.4 | 25-Mar-2005 |
perseant | "#define lfs_devvp lfs_unlockvp" for readability, since that's what we use it for in fsck_lfs/newfs_lfs.
|
1.3 | 26-Feb-2005 |
perseant | branches: 1.3.2; Various minor LFS improvements:
* Extend the lfs library from fsck_lfs(8) so that it can be used with a not-yet-existent LFS. Make newfs_lfs(8) use this library, so it can create LFSs whose Ifile is larger than one segment. * Make newfs_lfs(8) use strsuftoi64() for its arguments, a la newfs(8). * Make fsck_lfs(8) respect the "file system is clean" flag. * Don't let fsck_lfs(8) think it has dirty blocks when invoked with the -n flag.
|
1.2 | 02-Apr-2003 |
fvdl | branches: 1.2.4; Add support for UFS2. UFS2 is an enhanced FFS, adding support for 64 bit block pointers, extended attribute storage, and a few other things.
This commit does not yet include the code to manipulate the extended storage (for e.g. ACLs), this will be done later.
Originally written by Kirk McKusick and Network Associates Laboratories for FreeBSD.
|
1.1 | 28-Mar-2003 |
perseant | Add working writing ability to fsck_lfs, including roll-forward, based on a partial-segment writer ported from the kernel.
|
1.2.4.1 | 10-May-2005 |
riz | Pull up the following revisions (requested by perseant in ticket #1281):
1.8 sys/ufs/lfs/TODO 1.75 sys/ufs/lfs/lfs.h (via patch) 1.74 sys/ufs/lfs/lfs_alloc.c (via patch) 1.49, 1.51 sys/ufs/lfs/lfs_balloc.c (1.51 via patch) 1.78 sys/ufs/lfs/lfs_bio.c 1.62 sys/ufs/lfs/lfs_extern.h (via patch) 1.156 sys/ufs/lfs/lfs_segment.c (via patch) 1.48 sys/ufs/lfs/lfs_subr.c 1.101 sys/ufs/lfs/lfs_syscalls.c 1.163 sys/ufs/lfs/lfs_vfsops.c (via patch) 1.134 sys/ufs/lfs/lfs_vnops.c (via patch) 1.61 sys/ufs/ufs/ufs_readwrite.c (via patch)
1.20 libexec/lfs_cleanerd/clean.h (via patch) 1.52 libexec/lfs_cleanerd/cleanerd.c (via patch) 1.41 libexec/lfs_cleanerd/library.c (via patch)
1.4 regress/sys/fs/lfs/newfs_fsck/Makefile 1.2 regress/sys/fs/lfs/newfs_fsck/mkfs_mount 1.2 regress/sys/fs/lfs/newfs_fsck/smallfiles 1.3 sbin/fsck_lfs/bufcache.c 1.3 sbin/fsck_lfs/bufcache.h 1.3 sbin/fsck_lfs/lfs.h 1.8 sbin/fsck_lfs/lfs.c (via patch) 1.8 sbin/fsck_lfs/pass3.c (via patch) 1.18 sbin/fsck_lfs/pass0.c (via patch) 1.18 sbin/fsck_lfs/utilities.c (via patch) 1.7 sbin/fsck_lfs/segwrite.c 1.19 sbin/fsck_lfs/setup.c (via patch) 1.3 sbin/newfs_lfs/Makefile 0 sbin/newfs_lfs/lfs.c (yes, remove it) 1.1 sbin/newfs_lfs/make_lfs.c 1.15 sbin/newfs_lfs/newfs.c (via patch)
Various minor LFS improvements.
Kernel:
* Note when lfs_putpages(9) thinks it is not going to be writing any pages before calling genfs_putpages(9). This prevents a situation in which blocks can be queued for writing without a segment header. * Correct computation of NRESERVE(), though it is still a gross overestimate in most cases. Note that if NRESERVE() is too high, it may be impossible to create files on the filesystem. We catch this case on filesystem mount and refuse to mount r/w. * Allow filesystems to be mounted whose block size is == MAXBSIZE. * Somewhere along the line, ufs_bmaparray(9) started mangling UNWRITTEN entries in indirect blocks again, triggering a failed assertion "daddr <= LFS_MAX_DADDR". Explicitly convert to and from int32_t to correct this. Should fix PR #29045. * Add a high-water mark for the number of dirty pages any given LFS can hold before triggering a flush. This is settable by sysctl, but off (zero) by default. * Be more careful about the MAX_BYTES and MAX_BUFS computations so we shouldn't see "please increase to at least zero" messages. * Note that VBLK and VCHR vnodes can have nonzero values in di_db[0] even though their v_size == 0. Don't panic when we see this. Fixes PR #26680. * Change lfs_bfree to a signed quantity. The manner in which it is processed before being passed to the cleaner means that sometimes it may drop below zero, and the cleaner must be aware of this. * Never report bfree < 0 (or higher than lfs_dsize) through lfs_statfs(9). This prevents df(1) from ever telling us that our full filesystems have 16TB free. * Account space allocated through lfs_balloc(9) that does not have associated buffer headers, so that the pagedaemon doesn't run us out of segments. * Return ENOSPC from lfs_balloc(9) when bfree drops to zero. * Address a deadlock in lfs_bmapv/lfs_markv when the filesystem is being unmounted. Because vfs_busy() is a shared lock, and lfs_bmapv/lfs_markv mark the filesystem vfs_busy(), the cleaner can be holding the lock that umount() is blocking on, then try to vfs_busy() again in getnewvnode().
cleaner:
* Adapt lfs_cleanerd to use the fcntl call to get the Ifile filehandle, so it need not be in the namespace. * Make lfs_cleanerd be more careful when there are very few available segments. * Make lfs_cleanerd less verbose when the filesystem is unmounted.
newfs_lfs, fsck_lfs, and regression:
* Extend the lfs library from fsck_lfs(8) so that it can be used with a not-yet-existent LFS. Make newfs_lfs(8) use this library, so it can create LFSs whose Ifile is larger than one segment. Addresses PR #11110. * Make newfs_lfs(8) use strsuftoi64() for its arguments, a la newfs(8). * Make fsck_lfs(8) respect the "file system is clean" flag. * Don't let fsck_lfs(8) think it has dirty blocks when invoked with the -n flag. * Remove the Ifile from the filesystem namespace. The cleaner now uses a fcntl call on the root inode to find the Ifile filehandle. (As a side-effect, addresses PR #29144.)
|
1.3.2.1 | 07-May-2005 |
tron | Apply patch (requested by perseant in ticket #242): * fsck_lfs buffer cache fixes, including PR #29151 * Change fsck_lfs phase 0 message to reflect reality * fsck_lfs: check phase 5 (cleanerinfo accounting) even on roll-forward * Keep better track of the free list during roll-forward, avoiding a core dump * Improve hash table use for fsck_lfs buffer and vnode cache * Document fsck_lfs flag -f, and implement -q * Add resize_lfs, including kernel support * Add LFS to mountd's list of exportable filesystem types * Make the LFS lkm work again [christos@] * Add MP locking to the LFS kernel subsystem * Fix pager_map deadlock in lfs_putpages() * Avoid incomplete file extension that looks like "partial truncation" to fsck * Use lfs_malloc for cleaner malloc, since the cleaner often runs in low-memory conditions. * Use splay trees, not hash table, to track page allocation for write. * Fix mkdir panic on full fs * Fix page accounting leak by counting differently. * Use rightly named structure for lfs_getattr [skrll@] * Cosmetic changes for readability.
|
1.14 | 01-Sep-2015 |
dholland | branches: 1.14.28; Remove ulfs_daddr_t.
|
1.13 | 01-Sep-2015 |
dholland | Use daddr_t, not ulfs_daddr_t, as the latter's 32 bits wide. Don't use either for on-disk items. Part 2 of 3.
|
1.12 | 01-Sep-2015 |
dholland | Use daddr_t, not ulfs_daddr_t, as the latter's 32 bits wide. Don't use either for on-disk items. Part 1 of 3.
|
1.11 | 19-Aug-2015 |
dholland | Part two of dinodes; use the same union everywhere. (previously the ufs-derived code had things set up slightly different)
Remove a bunch of associated mess.
|
1.10 | 12-Aug-2015 |
dholland | Hack up dinode usage to be 64 vs. 32 as needed. Part 1.
(This part changes the native lfs code; the ufs-derived code already has 64 vs. 32 logic, but as aspects of it are unsafe, and don't entirely interoperate cleanly with the lfs 64/32 stuff, pass 2 will be rehashing that.)
|
1.9 | 12-Aug-2015 |
dholland | Provide 32-bit and 64-bit versions of FINFO.
This also entailed sorting out part of struct segment, as that contains a pointer into the current FINFO data.
|
1.8 | 12-Aug-2015 |
dholland | Make 32-bit and 64-bit versions of SEGSUM. Also fix some of the FINFO handling as it's closely entangled.
|
1.7 | 13-Jul-2014 |
dholland | Revert previous; it doesn't work because all the lfs tools promiscuously .PATH in each other's source files, and I haven't the time or patience to deal with it tonight.
|
1.6 | 12-Jul-2014 |
dholland | G/C my_vpanic().
|
1.5 | 08-Jun-2013 |
dholland | branches: 1.5.4; Redo these changes properly: -r1.12 libexec/lfs_cleanerd/Makefile -r1.15 sbin/fsck_lfs/Makefile -r1.6 sbin/newfs_lfs/Makefile
hi ad@
|
1.4 | 06-Jun-2013 |
dholland | ufs -> ulfs for fsck_lfs.
|
1.3 | 28-Apr-2008 |
martin | branches: 1.3.20; 1.3.26; Remove clause 3 and 4 from TNF licenses
|
1.2 | 18-Jul-2006 |
perseant | branches: 1.2.20; 1.2.22; Various improvements to fsck_lfs, to wit:
* Add lfs_balloc capability to the lfs library. * Extend the Ifile if we run out of free inodes when creating lost+found. * Don't roll forward if we have allocated a lost+found, to avoid conflicts when adding new files in roll-forward. * Make some messages slightly more verbose (e.g. include inode number, and use pwarn() instead of printf() so the messages include the device name when preening). * Change superblock detection/avoidance to use the offset table in the primary superblock, rather than looking at the contents. * Be more verbose about various operations when passed the -d flag, especially roll-forward. * Be more careful about dirops during roll forward, since the cleaner can sometimes write blocks from dirop vnodes. Detect and avoid this problem. * Always check the free list, even if given -i; if we're going to write it we have to check it first. * Mark inodes dirty when blocks are found during roll forward, so the inodes are written with the new block locations. * Update size of inodes if blocks beyond EOF are found during roll forward. * Fix segment accounting for blocks and inodes found during roll forward. * Report statistics on roll forward: how many new/deleted/moved files and how many updated blocks (or "nothing new"). * Don't care if the device being checked is really a device, if we have been passed the -f flag (to facilitate automated testing). * When writing to the disk, use the current time in the segment headers rathern than time 0. * When passed the -i flag, locate the partial segment containing the Ifile inode and use that to calculate lfs_offset, lfs_curseg, lfs_nextseg. (Again for automated testing.)
|
1.1 | 13-Sep-2005 |
christos | rename lfs.h to lfs_user.h so that it does not conflict.
|
1.2.22.1 | 18-May-2008 |
yamt | sync with head.
|
1.2.20.1 | 02-Jun-2008 |
mjf | Sync with HEAD.
|
1.3.26.1 | 23-Jun-2013 |
tls | resync from head
|
1.3.20.1 | 22-May-2014 |
yamt | sync with head.
for a reference, the tree before this commit was tagged as yamt-pagecache-tag8.
this commit was splitted into small chunks to avoid a limitation of cvs. ("Protocol error: too many arguments")
|
1.5.4.1 | 10-Aug-2014 |
tls | Rebase.
|
1.14.28.2 | 06-Sep-2025 |
perseant | Separate buffer cache code between fsck_lfs and fsck_exfatfs. This may be reunited later, probably as a library.
|
1.14.28.1 | 29-Jun-2024 |
perseant | Implementation of exFAT filesystem, with compilation conditional on MKEXFATFS make variable.
|
1.58 | 14-Sep-2025 |
wiz | fsck_lfs: add -i to usage
|
1.57 | 14-Sep-2025 |
perseant | Document the -a and -i flags.
|
1.56 | 14-Sep-2025 |
perseant | Add -a flag to suppress warnings about discrepancies in avail accounting, which is common with the -i flag.
Expand the computation of avail if the -d flag is given. The computation itself is not changed.
Do not offer to roll forward if the -n flag was given.
Exit with FSCK_EXIT_UNRESOLVED if the -n flag was given and any questions were asked. This is helpful when using fsck_lfs as a diagnostic in scripts.
|
1.55 | 03-Apr-2020 |
joerg | Avoid common symbols for fsck_lfs.
|
1.54 | 15-Aug-2019 |
kamil | fsck: Stop defining the same variable concurrently in bss and data
returntosingle was defined in multiple places:
- fsck_lfs/main.c - fsck_ffs/main.c - fsck_ext2fs/main.c - fsck/fsutil.c
Keep the fsutil.c definition as the only one.
Detected during the build of telned with Address Sanitizer (MKSANITIZER).
|
1.53 | 03-Feb-2019 |
mrg | branches: 1.53.2; - add or adjust /* FALLTHROUGH */ where appropriate - add __unreachable() after functions that can return but won't in this case, and thus can't be marked __dead easily
|
1.52 | 28-Jul-2015 |
dholland | branches: 1.52.16; Add a new lfs header file: lfs_accessors.h.
This contains all the accessor functions and macros out of lfs.h. Add an include of lfs_accessors.h after all uses of lfs.h... except for code that wants to define its own struct lfs-alike that the accessors are supposed to play along with. For these, set STRUCT_LFS and include lfs_accessors.h after the necessary structure has been defined, so that lfs_accessors.h can emit functions in terms of it.
|
1.51 | 24-Jul-2015 |
dholland | More lfs superblock accessors. (This changes the rest of the code over; all the accessors were already added.)
The difference between this commit and the previous one is arbitrary, but the previous one passed the regression tests on its own so I'm keeping it separate to help with any bisections that might be needed in the future.
|
1.50 | 24-Jul-2015 |
dholland | Switch to accessor functions for elements of the LFS on-disk superblock. This will allow switching between 32/64 bit forms on the fly; it will also allow handling LFS_EI reasonably tidily. (That currently doesn't work on the superblock.)
It also gets rid of cpp abuse in the form of fake structure member macros.
Also, instead of doing sleep/wakeup on &lfs_avail and &lfs_nextseg inside the on-disk superblock, add extra elements to the in-memory struct lfs for this. (XXX: these should be changed to condvars, but not right now)
XXX: this migrates a structure needed by the lfs code in libsa (struct salfs) into lfs.h, where it doesn't belong, but for the time being this is necessary in order to allow the accessors (and the various lfs macros and other goop that relies on them) to compile.
|
1.49 | 16-Jun-2015 |
christos | fix error messages containing \n
|
1.48 | 13-Jul-2014 |
dholland | Revert previous; it doesn't work because all the lfs tools promiscuously .PATH in each other's source files, and I haven't the time or patience to deal with it tonight.
|
1.47 | 12-Jul-2014 |
dholland | Remove pointless function indirection through panic_func(). It was initialized to one thing, and then set to another right at the top of main and never changed again.
|
1.46 | 12-Jul-2014 |
dholland | Revert version 1.111 of sysinst/disks.c, which caused sysinst to create lfs fstab entries with fsck disabled, and instead patch fsck_lfs to exit successfully without doing anything when given the -p (bootup preen) option. If you really want to do fsck_lfs -p, you can do fsck_lfs -f -p to make it go.
This has been sitting in my todo queue since February 2010 and was ok'd by the committer at the time. The original commit was based on this post: http://mail-index.netbsd.org/tech-kern/2010/02/09/msg007306.html
and I remain unconvinced that it's the right thing, but we can at least do it properly and not ship a sysinst with -7 that creates permanently wrong fstab files.
Note that this may cause problems for anyone who's taken -p out of the bootup fsck flags; but doing that is wrong, so don't.
|
1.45 | 08-Jun-2013 |
dholland | branches: 1.45.4; Tidy up the LFS userland build hacks. Don't use -I${NETBSDSRCDIR}/sys; don't include files other than the exported LFS headers, which are lfs.h, lfs_inode.h, and (for now) lfs_extern.h.
|
1.44 | 06-Jun-2013 |
dholland | ufs -> ulfs for fsck_lfs.
|
1.43 | 09-Jun-2011 |
christos | branches: 1.43.2; 1.43.8; share more code.
|
1.42 | 07-Jan-2010 |
christos | branches: 1.42.4; make this compile again.
|
1.41 | 06-Jan-2010 |
christos | PR/42568: Pedro F. Giffuni: Better signal handling from OpenBSD, but simplified.
|
1.40 | 12-Oct-2008 |
wiz | Don't use unicode in usage. Noted by Anon Ymous.
|
1.39 | 09-Oct-2008 |
wiz | Sync usage with man page.
|
1.38 | 09-Oct-2008 |
christos | Disable userid to username lookups by default. Add a -U flag to perform them. In single user mode lookups that involve the network might not work and they slow down fsck.
|
1.37 | 23-Feb-2008 |
christos | Make sure that the exit values are always sane, and use symbolic instead of magic constants. Reviewed by go@
|
1.36 | 16-Jul-2007 |
pooka | branches: 1.36.4; 1.36.10; 1.36.12; Make all mount(2) return value error checks against -1. Some file systems just checked != 0, breaking MNT_GETARGS. Others worked with < 0, but make them check against -1 too for consistency. And sprinkle some stylish line wrapping where appropriate.
|
1.35 | 14-Jul-2007 |
dsl | Add additional 'sizeof args' parameter to mount(2).
|
1.34 | 08-Feb-2007 |
drochner | include <signal.h> where signal(3) is used
|
1.33 | 17-Jan-2007 |
hubertf | Remove more duplicate #includes, from Slava Semushin <slava.semushin@gmail.com>
|
1.32 | 01-Dec-2006 |
tls | branches: 1.32.2; Prompt before rolling forward, in interactive mode, so it's possible to fix the filesystem but not roll forward possibly unwanted changes.
|
1.31 | 09-Nov-2006 |
christos | Fix malloc/realloc/calloc issues: always check and exit, use EEXIT instead of 8.
|
1.30 | 01-Sep-2006 |
perseant | Several fixes to improve the reliability of the roll-forward agent. Also, note "properly orphaned" files as distinct from corrupted files.
|
1.29 | 18-Jul-2006 |
perseant | Various improvements to fsck_lfs, to wit:
* Add lfs_balloc capability to the lfs library. * Extend the Ifile if we run out of free inodes when creating lost+found. * Don't roll forward if we have allocated a lost+found, to avoid conflicts when adding new files in roll-forward. * Make some messages slightly more verbose (e.g. include inode number, and use pwarn() instead of printf() so the messages include the device name when preening). * Change superblock detection/avoidance to use the offset table in the primary superblock, rather than looking at the contents. * Be more verbose about various operations when passed the -d flag, especially roll-forward. * Be more careful about dirops during roll forward, since the cleaner can sometimes write blocks from dirop vnodes. Detect and avoid this problem. * Always check the free list, even if given -i; if we're going to write it we have to check it first. * Mark inodes dirty when blocks are found during roll forward, so the inodes are written with the new block locations. * Update size of inodes if blocks beyond EOF are found during roll forward. * Fix segment accounting for blocks and inodes found during roll forward. * Report statistics on roll forward: how many new/deleted/moved files and how many updated blocks (or "nothing new"). * Don't care if the device being checked is really a device, if we have been passed the -f flag (to facilitate automated testing). * When writing to the disk, use the current time in the segment headers rathern than time 0. * When passed the -i flag, locate the partial segment containing the Ifile inode and use that to calculate lfs_offset, lfs_curseg, lfs_nextseg. (Again for automated testing.)
|
1.28 | 17-Apr-2006 |
perseant | Remove the free list ordering/disordering code, since the kernel now keeps the list in order (ordering it on mount).
Regularize error messages: these are now all in ALL CAPS, with all hex numbers (not reported in caps) prefixed by 0x. (The non-fsck-specific messages are an exception to this all-caps rule.)
|
1.27 | 23-Sep-2005 |
jmmv | Apply the NFS exports list rototill patch:
- Remove all NFS related stuff from file system specific code. - Drop the vfs_checkexp hook and generalize it in the new nfs_check_export function, thus removing redundancy from all file systems. - Move all NFS export-related stuff from kern/vfs_subr.c to the new file sys/nfs/nfs_export.c. The former was becoming large and its code is always compiled, regardless of the build options. Using the latter, the code is only compiled in when NFSSERVER is enabled. While doing this, also make some functions in nfs_subs.c conditional to NFSSERVER. - Add a new command in nfssvc(2), called NFSSVC_SETEXPORTSLIST, that takes a path and a set of export entries. At the moment it can only clear the exports list or append entries, one by one, but it is done in a way that allows setting the whole set of entries atomically in the future (see the comment in mountd_set_exports_list or in doc/TODO). - Change mountd(8) to use the nfssvc(2) system call instead of mount(2) so that it becomes file system agnostic. In fact, all this whole thing was done to remove a 'XXX' block from this utility! - Change the mount*, newfs and fsck* userland utilities to not deal with NFS exports initialization; done internally by the kernel when initializing the NFS support for each file system. - Implement an interface for VFS (called VFS hooks) so that several kernel subsystems can run arbitrary code upon receipt of specific VFS events. At the moment, this only provides support for unmount and is used to destroy NFS exports lists from the file systems being unmounted, though it has room for extension.
Thanks go to yamt@, chs@, thorpej@, wrstuden@ and others for their comments and advice in the development of this patch.
|
1.26 | 19-Aug-2005 |
christos | 64 bit inode changes
|
1.25 | 27-Jun-2005 |
christos | constify
|
1.24 | 23-Apr-2005 |
perseant | Check parts of pass 5 even if only rolling forward. We can't check the true segment holdings against the blocks held by the inodes, but we can still check the cleanerinfo data against the segment table.
|
1.23 | 14-Apr-2005 |
wiz | Sync usage with man page.
|
1.22 | 14-Apr-2005 |
perseant | Document "-f" (force check) flag. Implement and document "-q" (quiet).
|
1.21 | 06-Apr-2005 |
perseant | Correct phase 0 message
|
1.20 | 19-Jan-2005 |
xtraeme | branches: 1.20.2; ANSIfy, WARNS=2
|
1.19 | 13-Jan-2005 |
christos | Add a progress meter to fsck_ffs based on the work by thorpej presented to the mailing lists last January. This is optional.
|
1.18 | 21-Apr-2004 |
christos | Replace the statfs() family of system calls with statvfs(). Retain binary compatibility.
|
1.17 | 05-Jan-2004 |
jmmv | Homogenize usage messages: make the 'usage' word all lowercase, as this seems to be the most common practice in our tree.
|
1.16 | 20-Oct-2003 |
dsl | Add a -q (quiet) option to print nothing for clean filesystems. Support in fsck_ffs and stub in fsck_xxx. Push a few more messages through pwarn() instead of printf() to ensure disk name is shown.
|
1.15 | 07-Aug-2003 |
agc | Move UCB-licensed code from 4-clause to 3-clause licence.
Patches provided by Joel Baker in PR 22308, verified by myself.
|
1.14 | 29-Mar-2003 |
perseant | Fix some accounting problems when preening, since preening skips phases 1-4 entirely. Make preen run phase 0, since the Ifile is so important and the test so quick.
|
1.13 | 28-Mar-2003 |
perseant | Add working writing ability to fsck_lfs, including roll-forward, based on a partial-segment writer ported from the kernel.
|
1.12 | 28-Jan-2003 |
mrg | make this build on alpha after daddr_t->64bit
|
1.11 | 24-Jan-2003 |
fvdl | Bump daddr_t to 64 bits. Replace it with int32_t in all places where it was used on-disk, so that on-disk formats remain the same. Remove ufs_daddr_t and ufs_lbn_t for the time being.
|
1.10 | 18-Aug-2001 |
ad | getopt() returns -1 on error, not EOF.
|
1.9 | 19-Feb-2001 |
cgd | convert to use getprogname()
|
1.8 | 04-Feb-2001 |
christos | fix redundant decls
|
1.7 | 11-Nov-2000 |
perseant | Add "-f" flag to match fsck(8) manual page. This flag currently has no effect. Fixes PR #11129.
|
1.6 | 14-Jun-2000 |
perseant | branches: 1.6.2; Add "-i" flag to specify the location of the index file inode, to examine alternate checkpoints. Regularize usage of maxino. Remove olf debugging cruft.
|
1.5 | 23-May-2000 |
perseant | branches: 1.5.2; Convert to NetBSD source code style
|
1.4 | 16-May-2000 |
perseant | fsck_lfs can now write to the filesystem, allowing it to correct most (though still not all) errors in a damaged lfs. Segment byte accounting is corrected in pass 5. "fsck_lfs -p" will do a partial roll-forward, verifying the checkpoint from the newer superblock. fscknames[] is updated so that fsck knows about fsck_lfs.
|
1.3 | 14-Apr-2000 |
simonb | Don't declare 'extern opt*' getopt variables.
|
1.2 | 03-Jul-1999 |
kleink | RCS Id police.
|
1.1 | 18-Mar-1999 |
perseant | Initial checkin of fsck_lfs. This version cannot do any repair (-p flag does nothing, and one of -p or -n is required) but can be useful as a diagnostic tool.
|
1.5.2.1 | 22-Jun-2000 |
minoura | Sync w/ netbsd-1-5-base.
|
1.6.2.1 | 03-Feb-2001 |
he | Pull up revision 1.7 (requested by perseant): Add compatibility option "-f" to fsck_lfs (PR #11129).
|
1.20.2.1 | 07-May-2005 |
tron | Apply patch (requested by perseant in ticket #242): * fsck_lfs buffer cache fixes, including PR #29151 * Change fsck_lfs phase 0 message to reflect reality * fsck_lfs: check phase 5 (cleanerinfo accounting) even on roll-forward * Keep better track of the free list during roll-forward, avoiding a core dump * Improve hash table use for fsck_lfs buffer and vnode cache * Document fsck_lfs flag -f, and implement -q * Add resize_lfs, including kernel support * Add LFS to mountd's list of exportable filesystem types * Make the LFS lkm work again [christos@] * Add MP locking to the LFS kernel subsystem * Fix pager_map deadlock in lfs_putpages() * Avoid incomplete file extension that looks like "partial truncation" to fsck * Use lfs_malloc for cleaner malloc, since the cleaner often runs in low-memory conditions. * Use splay trees, not hash table, to track page allocation for write. * Fix mkdir panic on full fs * Fix page accounting leak by counting differently. * Use rightly named structure for lfs_getattr [skrll@] * Cosmetic changes for readability.
|
1.32.2.1 | 24-Mar-2009 |
bouyer | Pull up following revision(s) (requested by manu in ticket #1288): sbin/fsck_lfs/inode.c: revision 1.40 via patch sbin/fsck_ffs/fsck_ffs.8: revision 1.44 via patch sbin/fsck_ext2fs/fsck.h: revision 1.14 via patch sbin/fsck_ext2fs/main.c: revision 1.30 via patch sbin/fsck_ffs/inode.c: revision 1.61 via patch sbin/fsck_ffs/main.c: revision 1.71 via patch sbin/fsck_ext2fs/inode.c: revision 1.23 via patch sbin/fsck_lfs/fsck.h: revision 1.18 via patch sbin/fsck_lfs/fsck_lfs.8: revision 1.21 via patch sbin/fsck_lfs/main.c: revision 1.38 via patch sbin/fsck_ext2fs/fsck_ext2fs.8: revision 1.15 via patch sbin/fsck_ffs/fsck.h: revision 1.47 via patch Disable userid to username lookups by default. Add a -U flag to perform them. In single user mode lookups that involve the network might not work and they slow down fsck.
|
1.36.12.2 | 17-Jan-2009 |
mjf | Sync with HEAD.
|
1.36.12.1 | 03-Apr-2008 |
mjf | Sync with HEAD.
|
1.36.10.1 | 24-Mar-2008 |
keiichi | sync with head.
|
1.36.4.1 | 23-Mar-2008 |
matt | sync with HEAD
|
1.42.4.1 | 23-Jun-2011 |
cherry | Catchup with rmind-uvmplock merge.
|
1.43.8.2 | 20-Aug-2014 |
tls | Rebase to HEAD as of a few days ago.
|
1.43.8.1 | 23-Jun-2013 |
tls | resync from head
|
1.43.2.1 | 22-May-2014 |
yamt | sync with head.
for a reference, the tree before this commit was tagged as yamt-pagecache-tag8.
this commit was splitted into small chunks to avoid a limitation of cvs. ("Protocol error: too many arguments")
|
1.45.4.1 | 10-Aug-2014 |
tls | Rebase.
|
1.52.16.2 | 13-Apr-2020 |
martin | Mostly merge changes from HEAD upto 20200411
|
1.52.16.1 | 10-Jun-2019 |
christos | Sync with HEAD
|
1.53.2.1 | 16-Aug-2019 |
martin | Pull up following revision(s) (requested by kamil in ticket #73):
sbin/fsck_lfs/main.c: revision 1.54 sbin/fsck_ext2fs/main.c: revision 1.40 sbin/fsck_ffs/main.c: revision 1.86
fsck: Stop defining the same variable concurrently in bss and data returntosingle was defined in multiple places: - fsck_lfs/main.c - fsck_ffs/main.c - fsck_ext2fs/main.c - fsck/fsutil.c
Keep the fsutil.c definition as the only one.
Detected during the build of telned with Address Sanitizer (MKSANITIZER).
|
1.43 | 03-Apr-2020 |
joerg | Avoid common symbols for fsck_lfs.
|
1.42 | 01-Sep-2015 |
dholland | branches: 1.42.16; Make the inode fields in the 64-bit superblock 64 bits wide. Reasoning as before.
Note that I am not going through and checking for 64->32 truncations in inode numbers; I'm sure there are quite a few, but that's a project for later.
|
1.41 | 23-Aug-2015 |
christos | swap the formats too, not just the args.
|
1.40 | 23-Aug-2015 |
dholland | Fix reversed arguments to a print. nice and confusing...
|
1.39 | 12-Aug-2015 |
dholland | Add IFILE32 and IFILE64 structures for the on-disk ifile entries. Add and use accessors. There are also a bunch of places that cast and I hope I've found them all...
|
1.38 | 12-Aug-2015 |
dholland | Make 32-bit and 64-bit versions of CLEANERINFO.
XXX: while this is written to disk, it seems like much of it would XXX: be better set up as a commpage shared with the cleaner.
|
1.37 | 28-Jul-2015 |
dholland | Add a new lfs header file: lfs_accessors.h.
This contains all the accessor functions and macros out of lfs.h. Add an include of lfs_accessors.h after all uses of lfs.h... except for code that wants to define its own struct lfs-alike that the accessors are supposed to play along with. For these, set STRUCT_LFS and include lfs_accessors.h after the necessary structure has been defined, so that lfs_accessors.h can emit functions in terms of it.
|
1.36 | 24-Jul-2015 |
dholland | Switch to accessor functions for elements of the LFS on-disk superblock. This will allow switching between 32/64 bit forms on the fly; it will also allow handling LFS_EI reasonably tidily. (That currently doesn't work on the superblock.)
It also gets rid of cpp abuse in the form of fake structure member macros.
Also, instead of doing sleep/wakeup on &lfs_avail and &lfs_nextseg inside the on-disk superblock, add extra elements to the in-memory struct lfs for this. (XXX: these should be changed to condvars, but not right now)
XXX: this migrates a structure needed by the lfs code in libsa (struct salfs) into lfs.h, where it doesn't belong, but for the time being this is necessary in order to allow the accessors (and the various lfs macros and other goop that relies on them) to compile.
|
1.35 | 08-Jun-2013 |
dholland | Tidy up the LFS userland build hacks. Don't use -I${NETBSDSRCDIR}/sys; don't include files other than the exported LFS headers, which are lfs.h, lfs_inode.h, and (for now) lfs_extern.h.
|
1.34 | 06-Jun-2013 |
dholland | Cleanups and hacks to make lfs userland stuff build: - lfs_cksum.c doesn't actually need ulfs_inode.h any more. - neither does lfs_itimes.c. - add hacks to fsck_lfs to make it compile. - add hacks to newfs_lfs to make it compile. - fix warning in ulfs_quota.c when quotas are fully disabled (as I guess is happening with the rumpity version)
XXX: This commit adds -I${NETBSDSRCDIR}/sys to the Makefiles for XXX: fsck_lfs, newfs_lfs, and lfs_cleanerd. This needs to be cleaned XXX: up ASAP; but I consider this less problematic in the short term XXX: than spewing ulfs_*.h into /usr/include.
|
1.33 | 06-Jun-2013 |
dholland | ufs -> ulfs for fsck_lfs.
|
1.32 | 22-Jan-2013 |
dholland | Stuff UFS_ in front of a few of ufs's symbols to reduce namespace pollution. Specifically: ROOTINO -> UFS_ROOTINO WINO -> UFS_WINO NXADDR -> UFS_NXADDR NDADDR -> UFS_NDADDR NIADDR -> UFS_NIADDR MAXSYMLINKLEN -> UFS_MAXSYMLINKLEN MAXSYMLINKLEN_UFS[12] -> UFS[12]_MAXSYMLINKLEN (for consistency)
Sort out ext2fs's misuse of NDADDR and NIADDR; fortunately, these have the same values in ext2fs and ffs.
No functional change intended.
|
1.31 | 28-Apr-2008 |
martin | branches: 1.31.20; 1.31.26; Remove clause 3 and 4 from TNF licenses
|
1.30 | 08-Oct-2007 |
ad | branches: 1.30.8; 1.30.10; Give brelse() a second argument so that it matches the kernel. fsck_lfs now compiles again.
|
1.29 | 09-Nov-2006 |
christos | branches: 1.29.8; Fix malloc/realloc/calloc issues: always check and exit, use EEXIT instead of 8.
|
1.28 | 18-Jul-2006 |
perseant | Various improvements to fsck_lfs, to wit:
* Add lfs_balloc capability to the lfs library. * Extend the Ifile if we run out of free inodes when creating lost+found. * Don't roll forward if we have allocated a lost+found, to avoid conflicts when adding new files in roll-forward. * Make some messages slightly more verbose (e.g. include inode number, and use pwarn() instead of printf() so the messages include the device name when preening). * Change superblock detection/avoidance to use the offset table in the primary superblock, rather than looking at the contents. * Be more verbose about various operations when passed the -d flag, especially roll-forward. * Be more careful about dirops during roll forward, since the cleaner can sometimes write blocks from dirop vnodes. Detect and avoid this problem. * Always check the free list, even if given -i; if we're going to write it we have to check it first. * Mark inodes dirty when blocks are found during roll forward, so the inodes are written with the new block locations. * Update size of inodes if blocks beyond EOF are found during roll forward. * Fix segment accounting for blocks and inodes found during roll forward. * Report statistics on roll forward: how many new/deleted/moved files and how many updated blocks (or "nothing new"). * Don't care if the device being checked is really a device, if we have been passed the -f flag (to facilitate automated testing). * When writing to the disk, use the current time in the segment headers rathern than time 0. * When passed the -i flag, locate the partial segment containing the Ifile inode and use that to calculate lfs_offset, lfs_curseg, lfs_nextseg. (Again for automated testing.)
|
1.27 | 17-Apr-2006 |
perseant | Remove the free list ordering/disordering code, since the kernel now keeps the list in order (ordering it on mount).
Regularize error messages: these are now all in ALL CAPS, with all hex numbers (not reported in caps) prefixed by 0x. (The non-fsck-specific messages are an exception to this all-caps rule.)
|
1.26 | 17-Mar-2006 |
perseant | Make it compile again.
|
1.25 | 17-Mar-2006 |
rumble | Check for allocation failures in malloc, calloc, realloc, asprintf, and vasprintf and try to handle them.
|
1.24 | 13-Sep-2005 |
christos | rename lfs.h to lfs_user.h so that it does not conflict.
|
1.23 | 20-Aug-2005 |
kent | fix a compilation problem on LP64
|
1.22 | 19-Aug-2005 |
christos | 64 bit inode changes
|
1.21 | 08-Jun-2005 |
perseant | Use the correct method to create a new inode, when we allocate lost+found.
Correct uninitialized variable issues in pass6.c and dir.c (PR#30411 and PR#30394, respectively).
|
1.20 | 11-Apr-2005 |
perseant | Be more efficient with the hash tables for the buffer and vnode caches.
Note that roll-forward can add more inodes to the filesystem; don't overflow the tables but reallocate them.
|
1.19 | 25-Mar-2005 |
perseant | Make fsck_lfs optimize the inode free list, if it appears to have become too disordered. This should improve file creation speed on aged filesystems. Include code to disorder the list for debugging purposes, though this is of course not compiled in by default.
|
1.18 | 26-Feb-2005 |
perseant | branches: 1.18.2; Various minor LFS improvements:
* Extend the lfs library from fsck_lfs(8) so that it can be used with a not-yet-existent LFS. Make newfs_lfs(8) use this library, so it can create LFSs whose Ifile is larger than one segment. * Make newfs_lfs(8) use strsuftoi64() for its arguments, a la newfs(8). * Make fsck_lfs(8) respect the "file system is clean" flag. * Don't let fsck_lfs(8) think it has dirty blocks when invoked with the -n flag.
|
1.17 | 19-Jan-2005 |
xtraeme | ANSIfy, WARNS=2
|
1.16 | 07-Aug-2003 |
agc | branches: 1.16.4; Move UCB-licensed code from 4-clause to 3-clause licence.
Patches provided by Joel Baker in PR 22308, verified by myself.
|
1.15 | 31-Mar-2003 |
perseant | Check inode free list tail pointer as well as head pointer, and write both into the CLEANERINFO block of the Ifile as well as into the superblock. Make preen update both superblocks.
|
1.14 | 28-Mar-2003 |
perseant | Add working writing ability to fsck_lfs, including roll-forward, based on a partial-segment writer ported from the kernel.
|
1.13 | 17-Feb-2003 |
perseant | Add code to UBCify LFS. This is still behind "#ifdef LFS_UBC" for now (there are still some details to work out) but expect that to go away soon. To support these basic changes (creation of lfs_putpages, lfs_gop_write, mods to lfs_balloc) several other changes were made, to wit:
* Create a writer daemon kernel thread whose purpose is to handle page writes for the pagedaemon, but which also takes over some of the functions of lfs_check(). This thread is started the first time an LFS is mounted.
* Add a "flags" parameter to GOP_SIZE. Current values are GOP_SIZE_READ, meaning that the call should return the size of the in-core version of the file, and GOP_SIZE_WRITE, meaning that it should return the on-disk size. One of GOP_SIZE_READ or GOP_SIZE_WRITE must be specified.
* Instead of using malloc(...M_WAITOK) for everything, reserve enough resources to get by and use malloc(...M_NOWAIT), using the reserves if necessary. Use the pool subsystem for structures small enough that this is feasible. This also obsoletes LFS_THROTTLE.
And a few that are not strictly necessary:
* Moves the LFS inode extensions off onto a separately allocated structure; getting closer to LFS as an LKM. "Welcome to 1.6O."
* Unified GOP_ALLOC between FFS and LFS.
* Update LFS copyright headers to correct values.
* Actually cast to unsigned in lfs_shellsort, like the comment says.
* Keep track of which segments were empty before the previous checkpoint; any segments that pass two checkpoints both dirty and empty can be summarily cleaned. Do this. Right now lfs_segclean still works, but this should be turned into an effectless compatibility syscall.
|
1.12 | 24-Jan-2003 |
fvdl | Bump daddr_t to 64 bits. Replace it with int32_t in all places where it was used on-disk, so that on-disk formats remain the same. Remove ufs_daddr_t and ufs_lbn_t for the time being.
|
1.11 | 04-Feb-2002 |
perseant | Use the correct size for inode blocks. This caused false data checksum mispatches to be reported on v2 filesystems.
|
1.10 | 02-Nov-2001 |
lukem | fix -Wshadow warning
|
1.9 | 13-Jul-2001 |
perseant | Merge the short-lived perseant-lfsv2 branch into the trunk.
Kernels and tools understand both v1 and v2 filesystems; newfs_lfs generates v2 by default. Changes for the v2 layout include:
- Segments of non-PO2 size and arbitrary block offset, so these can be matched to convenient physical characteristics of the partition (e.g., stripe or track size and offset).
- Address by fragment instead of by disk sector, paving the way for non-512-byte-sector devices. In theory fragments can be as large as you like, though in reality they must be smaller than MAXBSIZE in size.
- Use serial number and filesystem identifier to ensure that roll-forward doesn't get old data and think it's new. Roll-forward is enabled for v2 filesystems, though not for v1 filesystems by default.
- The inode free list is now a tailq, paving the way for undelete (undelete is not yet implemented, but can be without further non-backwards-compatible changes to disk structures).
- Inode atime information is kept in the Ifile, instead of on the inode; that is, the inode is never written *just* because atime was changed. Because of this the inodes remain near the file data on the disk, rather than wandering all over as the disk is read repeatedly. This speeds up repeated reads by a small but noticeable amount.
Other changes of note include:
- The ifile written by newfs_lfs can now be of arbitrary length, it is no longer restricted to a single indirect block.
- Fixed an old bug where ctime was changed every time a vnode was created. I need to look more closely to make sure that the times are only updated during write(2) and friends, not after-the-fact during a segment write, and certainly not by the cleaner.
|
1.8 | 05-Jan-2001 |
lukem | branches: 1.8.2; use %ll_ instead of the less standard %q_
|
1.7 | 14-Jun-2000 |
perseant | Add "-i" flag to specify the location of the index file inode, to examine alternate checkpoints. Regularize usage of maxino. Remove olf debugging cruft.
|
1.6 | 30-May-2000 |
perseant | Check for cycles in the inode free list, and for free inodes not on the free list.
|
1.5 | 23-May-2000 |
perseant | branches: 1.5.2; Convert to NetBSD source code style
|
1.4 | 16-May-2000 |
perseant | fsck_lfs can now write to the filesystem, allowing it to correct most (though still not all) errors in a damaged lfs. Segment byte accounting is corrected in pass 5. "fsck_lfs -p" will do a partial roll-forward, verifying the checkpoint from the newer superblock. fscknames[] is updated so that fsck knows about fsck_lfs.
|
1.3 | 03-Jul-1999 |
kleink | RCS Id police.
|
1.2 | 24-Mar-1999 |
nathanw | printf format fixes for Alpha.
|
1.1 | 18-Mar-1999 |
perseant | Initial checkin of fsck_lfs. This version cannot do any repair (-p flag does nothing, and one of -p or -n is required) but can be useful as a diagnostic tool.
|
1.5.2.1 | 22-Jun-2000 |
minoura | Sync w/ netbsd-1-5-base.
|
1.8.2.2 | 02-Jul-2001 |
perseant | Change disk addressing unit to be the fragment, instead of the disk sector. All quantities in the superblock, inodes, indirect blocks, etc. refer now to this abstract unit (called "fsb" as it is in FFS) instead of disk sectors; as a consequence segment summary blocks have to be multiples of a fragment in size. In v1 filesystems, compatibility code ensures that 1 fsb == 1 sector, regardless of fragment size.
Fragments can now range in size between 512 and 32k; in the event that LFS_LABELPAD (8k) is smaller than the disk address unit size, an extra proto-superblock is kept at 8k from the beginning of the disk, to be used *only* to locate the real superblocks. (Not all of the userland knows about this yet.)
Almost all of this was done not by me, but by joff.
|
1.8.2.1 | 27-Jun-2001 |
perseant | Import of what I've been calling "LFSv2", that is, LFS with some features added that require changes to the on-disk data structures. These include:
- 64-bit time in everything but inodes - User-specified segment offset, and segment size no longer restricted to PO2. - Serial number on segment summaries in addition to timestamp, and a new volume identifier, to make roll-forward feasible without fear of finding old data and thinking it was new.
Although I think this version works at least as well as what's on the trunk, we're not done yet; hence this commit is going in on a branch and not on the trunk. Enhancements that are not here yet include fragment addressing, like FFS does, instead of block addressing.
|
1.16.4.1 | 10-May-2005 |
riz | Pull up the following revisions (requested by perseant in ticket #1281):
1.8 sys/ufs/lfs/TODO 1.75 sys/ufs/lfs/lfs.h (via patch) 1.74 sys/ufs/lfs/lfs_alloc.c (via patch) 1.49, 1.51 sys/ufs/lfs/lfs_balloc.c (1.51 via patch) 1.78 sys/ufs/lfs/lfs_bio.c 1.62 sys/ufs/lfs/lfs_extern.h (via patch) 1.156 sys/ufs/lfs/lfs_segment.c (via patch) 1.48 sys/ufs/lfs/lfs_subr.c 1.101 sys/ufs/lfs/lfs_syscalls.c 1.163 sys/ufs/lfs/lfs_vfsops.c (via patch) 1.134 sys/ufs/lfs/lfs_vnops.c (via patch) 1.61 sys/ufs/ufs/ufs_readwrite.c (via patch)
1.20 libexec/lfs_cleanerd/clean.h (via patch) 1.52 libexec/lfs_cleanerd/cleanerd.c (via patch) 1.41 libexec/lfs_cleanerd/library.c (via patch)
1.4 regress/sys/fs/lfs/newfs_fsck/Makefile 1.2 regress/sys/fs/lfs/newfs_fsck/mkfs_mount 1.2 regress/sys/fs/lfs/newfs_fsck/smallfiles 1.3 sbin/fsck_lfs/bufcache.c 1.3 sbin/fsck_lfs/bufcache.h 1.3 sbin/fsck_lfs/lfs.h 1.8 sbin/fsck_lfs/lfs.c (via patch) 1.8 sbin/fsck_lfs/pass3.c (via patch) 1.18 sbin/fsck_lfs/pass0.c (via patch) 1.18 sbin/fsck_lfs/utilities.c (via patch) 1.7 sbin/fsck_lfs/segwrite.c 1.19 sbin/fsck_lfs/setup.c (via patch) 1.3 sbin/newfs_lfs/Makefile 0 sbin/newfs_lfs/lfs.c (yes, remove it) 1.1 sbin/newfs_lfs/make_lfs.c 1.15 sbin/newfs_lfs/newfs.c (via patch)
Various minor LFS improvements.
Kernel:
* Note when lfs_putpages(9) thinks it is not going to be writing any pages before calling genfs_putpages(9). This prevents a situation in which blocks can be queued for writing without a segment header. * Correct computation of NRESERVE(), though it is still a gross overestimate in most cases. Note that if NRESERVE() is too high, it may be impossible to create files on the filesystem. We catch this case on filesystem mount and refuse to mount r/w. * Allow filesystems to be mounted whose block size is == MAXBSIZE. * Somewhere along the line, ufs_bmaparray(9) started mangling UNWRITTEN entries in indirect blocks again, triggering a failed assertion "daddr <= LFS_MAX_DADDR". Explicitly convert to and from int32_t to correct this. Should fix PR #29045. * Add a high-water mark for the number of dirty pages any given LFS can hold before triggering a flush. This is settable by sysctl, but off (zero) by default. * Be more careful about the MAX_BYTES and MAX_BUFS computations so we shouldn't see "please increase to at least zero" messages. * Note that VBLK and VCHR vnodes can have nonzero values in di_db[0] even though their v_size == 0. Don't panic when we see this. Fixes PR #26680. * Change lfs_bfree to a signed quantity. The manner in which it is processed before being passed to the cleaner means that sometimes it may drop below zero, and the cleaner must be aware of this. * Never report bfree < 0 (or higher than lfs_dsize) through lfs_statfs(9). This prevents df(1) from ever telling us that our full filesystems have 16TB free. * Account space allocated through lfs_balloc(9) that does not have associated buffer headers, so that the pagedaemon doesn't run us out of segments. * Return ENOSPC from lfs_balloc(9) when bfree drops to zero. * Address a deadlock in lfs_bmapv/lfs_markv when the filesystem is being unmounted. Because vfs_busy() is a shared lock, and lfs_bmapv/lfs_markv mark the filesystem vfs_busy(), the cleaner can be holding the lock that umount() is blocking on, then try to vfs_busy() again in getnewvnode().
cleaner:
* Adapt lfs_cleanerd to use the fcntl call to get the Ifile filehandle, so it need not be in the namespace. * Make lfs_cleanerd be more careful when there are very few available segments. * Make lfs_cleanerd less verbose when the filesystem is unmounted.
newfs_lfs, fsck_lfs, and regression:
* Extend the lfs library from fsck_lfs(8) so that it can be used with a not-yet-existent LFS. Make newfs_lfs(8) use this library, so it can create LFSs whose Ifile is larger than one segment. Addresses PR #11110. * Make newfs_lfs(8) use strsuftoi64() for its arguments, a la newfs(8). * Make fsck_lfs(8) respect the "file system is clean" flag. * Don't let fsck_lfs(8) think it has dirty blocks when invoked with the -n flag. * Remove the Ifile from the filesystem namespace. The cleaner now uses a fcntl call on the root inode to find the Ifile filehandle. (As a side-effect, addresses PR #29144.)
|
1.18.2.1 | 07-May-2005 |
tron | Apply patch (requested by perseant in ticket #242): * fsck_lfs buffer cache fixes, including PR #29151 * Change fsck_lfs phase 0 message to reflect reality * fsck_lfs: check phase 5 (cleanerinfo accounting) even on roll-forward * Keep better track of the free list during roll-forward, avoiding a core dump * Improve hash table use for fsck_lfs buffer and vnode cache * Document fsck_lfs flag -f, and implement -q * Add resize_lfs, including kernel support * Add LFS to mountd's list of exportable filesystem types * Make the LFS lkm work again [christos@] * Add MP locking to the LFS kernel subsystem * Fix pager_map deadlock in lfs_putpages() * Avoid incomplete file extension that looks like "partial truncation" to fsck * Use lfs_malloc for cleaner malloc, since the cleaner often runs in low-memory conditions. * Use splay trees, not hash table, to track page allocation for write. * Fix mkdir panic on full fs * Fix page accounting leak by counting differently. * Use rightly named structure for lfs_getattr [skrll@] * Cosmetic changes for readability.
|
1.29.8.1 | 06-Nov-2007 |
matt | sync with HEAD
|
1.30.10.1 | 18-May-2008 |
yamt | sync with head.
|
1.30.8.1 | 02-Jun-2008 |
mjf | Sync with HEAD.
|
1.31.26.2 | 23-Jun-2013 |
tls | resync from head
|
1.31.26.1 | 25-Feb-2013 |
tls | resync with head
|
1.31.20.2 | 22-May-2014 |
yamt | sync with head.
for a reference, the tree before this commit was tagged as yamt-pagecache-tag8.
this commit was splitted into small chunks to avoid a limitation of cvs. ("Protocol error: too many arguments")
|
1.31.20.1 | 23-Jan-2013 |
yamt | sync with head
|
1.42.16.1 | 08-Apr-2020 |
martin | Merge changes from current as of 20200406
|
1.47 | 03-Apr-2020 |
joerg | Avoid common symbols for fsck_lfs.
|
1.46 | 23-Feb-2020 |
riastradh | Fix userland references to LFS_ORPHAN_NEXTFREE.
Forgot to grep for these or do a full distribution build, oops!
|
1.45 | 03-Oct-2015 |
dholland | branches: 1.45.16; 1.45.18; The per-inode state 'id_entryno' is used by pass1 for a block count, so widen it to 'long long'. pass2 uses it for the number of entries in a directory (IIUC) which does not need to be wider than int, but for now let's not try to split into two fields. FUTURE...
|
1.44 | 01-Sep-2015 |
dholland | Use daddr_t, not ulfs_daddr_t, as the latter's 32 bits wide. Don't use either for on-disk items. Declare external data in header files. Part 3 of 3.
|
1.43 | 01-Sep-2015 |
dholland | The ifile's inode number is constant. (it is always 1)
Therefore, storing the value in the superblock and reading it out again is silly and offers the opportunity for it to become corrupted. So, don't do that (most of the code already didn't) and use the existing constant instead. Initialize new 32-bit superblocks with the value for the sake of old userland programs, but don't keep the value in the 64-bit superblock at all.
(approved by Margo Seltzer)
|
1.42 | 12-Aug-2015 |
dholland | Hack up dinode usage to be 64 vs. 32 as needed. Part 1.
(This part changes the native lfs code; the ufs-derived code already has 64 vs. 32 logic, but as aspects of it are unsafe, and don't entirely interoperate cleanly with the lfs 64/32 stuff, pass 2 will be rehashing that.)
|
1.41 | 12-Aug-2015 |
dholland | Add IFILE32 and IFILE64 structures for the on-disk ifile entries. Add and use accessors. There are also a bunch of places that cast and I hope I've found them all...
|
1.40 | 28-Jul-2015 |
dholland | Add a new lfs header file: lfs_accessors.h.
This contains all the accessor functions and macros out of lfs.h. Add an include of lfs_accessors.h after all uses of lfs.h... except for code that wants to define its own struct lfs-alike that the accessors are supposed to play along with. For these, set STRUCT_LFS and include lfs_accessors.h after the necessary structure has been defined, so that lfs_accessors.h can emit functions in terms of it.
|
1.39 | 24-Jul-2015 |
dholland | More lfs superblock accessors. (This changes the rest of the code over; all the accessors were already added.)
The difference between this commit and the previous one is arbitrary, but the previous one passed the regression tests on its own so I'm keeping it separate to help with any bisections that might be needed in the future.
|
1.38 | 24-Jul-2015 |
dholland | Switch to accessor functions for elements of the LFS on-disk superblock. This will allow switching between 32/64 bit forms on the fly; it will also allow handling LFS_EI reasonably tidily. (That currently doesn't work on the superblock.)
It also gets rid of cpp abuse in the form of fake structure member macros.
Also, instead of doing sleep/wakeup on &lfs_avail and &lfs_nextseg inside the on-disk superblock, add extra elements to the in-memory struct lfs for this. (XXX: these should be changed to condvars, but not right now)
XXX: this migrates a structure needed by the lfs code in libsa (struct salfs) into lfs.h, where it doesn't belong, but for the time being this is necessary in order to allow the accessors (and the various lfs macros and other goop that relies on them) to compile.
|
1.37 | 18-Jun-2013 |
christos | Prefix most of the cpp macros with lfs_ and LFS_ to avoid conflicts with ffs. This was done so that boot blocks that want to compile both FFS and LFS in the same file work.
|
1.36 | 08-Jun-2013 |
dholland | Tidy up the LFS userland build hacks. Don't use -I${NETBSDSRCDIR}/sys; don't include files other than the exported LFS headers, which are lfs.h, lfs_inode.h, and (for now) lfs_extern.h.
|
1.35 | 08-Jun-2013 |
dholland | DIRBLKSIZ -> LFS_DIRBLKSIZ DIRECTSIZ -> LFS_DIRECTSIZ DIRSIZ -> LFS_DIRSIZ OLDDIRFMT -> LFS_OLDDIRFMT NEWDIRFMT -> LFS_NEWDIRFMT IFTODT -> LFS_IFTODT DTTOIF -> LFS_DTTOIF
|
1.34 | 08-Jun-2013 |
dholland | Stick LFS_ in front of IFMT, IFIFO, IFREG, etc. so as not to conflict with the UFS copies of these symbols. (Which themselves ought to have UFS_ stuck on.)
|
1.33 | 06-Jun-2013 |
dholland | Cleanups and hacks to make lfs userland stuff build: - lfs_cksum.c doesn't actually need ulfs_inode.h any more. - neither does lfs_itimes.c. - add hacks to fsck_lfs to make it compile. - add hacks to newfs_lfs to make it compile. - fix warning in ulfs_quota.c when quotas are fully disabled (as I guess is happening with the rumpity version)
XXX: This commit adds -I${NETBSDSRCDIR}/sys to the Makefiles for XXX: fsck_lfs, newfs_lfs, and lfs_cleanerd. This needs to be cleaned XXX: up ASAP; but I consider this less problematic in the short term XXX: than spewing ulfs_*.h into /usr/include.
|
1.32 | 06-Jun-2013 |
dholland | ufs -> ulfs for fsck_lfs.
|
1.31 | 22-Jan-2013 |
dholland | Stuff UFS_ in front of a few of ufs's symbols to reduce namespace pollution. Specifically: ROOTINO -> UFS_ROOTINO WINO -> UFS_WINO NXADDR -> UFS_NXADDR NDADDR -> UFS_NDADDR NIADDR -> UFS_NIADDR MAXSYMLINKLEN -> UFS_MAXSYMLINKLEN MAXSYMLINKLEN_UFS[12] -> UFS[12]_MAXSYMLINKLEN (for consistency)
Sort out ext2fs's misuse of NDADDR and NIADDR; fortunately, these have the same values in ext2fs and ffs.
No functional change intended.
|
1.30 | 16-Feb-2010 |
mlelstv | branches: 1.30.6; 1.30.12; Three changes in a single commit.
- drop the notion of frags (LFS fragments) vs fsb (FFS fragments) The code uses a complicated unity function that just makes the code difficult to understand.
- support larger sector sizes. Fix disk address computations to use DEV_BSIZE in the kernel as required by device drivers and to use sector sizes in userland.
- Fix several locking bugs in lfs_bio.c and lfs_subr.c.
|
1.29 | 08-Oct-2007 |
ad | Give brelse() a second argument so that it matches the kernel. fsck_lfs now compiles again.
|
1.28 | 09-Nov-2006 |
christos | branches: 1.28.8; Fix malloc/realloc/calloc issues: always check and exit, use EEXIT instead of 8.
|
1.27 | 16-Oct-2006 |
christos | comment out/delete impossible code
|
1.26 | 01-Sep-2006 |
perseant | Several fixes to improve the reliability of the roll-forward agent. Also, note "properly orphaned" files as distinct from corrupted files.
|
1.25 | 18-Jul-2006 |
perseant | Various improvements to fsck_lfs, to wit:
* Add lfs_balloc capability to the lfs library. * Extend the Ifile if we run out of free inodes when creating lost+found. * Don't roll forward if we have allocated a lost+found, to avoid conflicts when adding new files in roll-forward. * Make some messages slightly more verbose (e.g. include inode number, and use pwarn() instead of printf() so the messages include the device name when preening). * Change superblock detection/avoidance to use the offset table in the primary superblock, rather than looking at the contents. * Be more verbose about various operations when passed the -d flag, especially roll-forward. * Be more careful about dirops during roll forward, since the cleaner can sometimes write blocks from dirop vnodes. Detect and avoid this problem. * Always check the free list, even if given -i; if we're going to write it we have to check it first. * Mark inodes dirty when blocks are found during roll forward, so the inodes are written with the new block locations. * Update size of inodes if blocks beyond EOF are found during roll forward. * Fix segment accounting for blocks and inodes found during roll forward. * Report statistics on roll forward: how many new/deleted/moved files and how many updated blocks (or "nothing new"). * Don't care if the device being checked is really a device, if we have been passed the -f flag (to facilitate automated testing). * When writing to the disk, use the current time in the segment headers rathern than time 0. * When passed the -i flag, locate the partial segment containing the Ifile inode and use that to calculate lfs_offset, lfs_curseg, lfs_nextseg. (Again for automated testing.)
|
1.24 | 17-Mar-2006 |
rumble | Check for allocation failures in malloc, calloc, realloc, asprintf, and vasprintf and try to handle them.
|
1.23 | 13-Sep-2005 |
christos | rename lfs.h to lfs_user.h so that it does not conflict.
|
1.22 | 19-Aug-2005 |
christos | 64 bit inode changes
|
1.21 | 27-Jun-2005 |
christos | constify
|
1.20 | 06-Feb-2005 |
perry | remove obsolete "register" declarations.
|
1.19 | 19-Jan-2005 |
xtraeme | ANSIfy, WARNS=2
|
1.18 | 18-Jul-2004 |
yamt | zero-out dinode is not a proper way to 'clear' an lfs inode.
|
1.17 | 07-Aug-2003 |
agc | Move UCB-licensed code from 4-clause to 3-clause licence.
Patches provided by Joel Baker in PR 22308, verified by myself.
|
1.16 | 12-Jul-2003 |
yamt | fix a null dereference on stale inode.
|
1.15 | 02-Apr-2003 |
fvdl | Add support for UFS2. UFS2 is an enhanced FFS, adding support for 64 bit block pointers, extended attribute storage, and a few other things.
This commit does not yet include the code to manipulate the extended storage (for e.g. ACLs), this will be done later.
Originally written by Kirk McKusick and Network Associates Laboratories for FreeBSD.
|
1.14 | 28-Mar-2003 |
perseant | Add working writing ability to fsck_lfs, including roll-forward, based on a partial-segment writer ported from the kernel.
|
1.13 | 24-Jan-2003 |
fvdl | Bump daddr_t to 64 bits. Replace it with int32_t in all places where it was used on-disk, so that on-disk formats remain the same. Remove ufs_daddr_t and ufs_lbn_t for the time being.
|
1.12 | 25-Sep-2001 |
wiz | Add some \n to error messages.
|
1.11 | 13-Jul-2001 |
perseant | Merge the short-lived perseant-lfsv2 branch into the trunk.
Kernels and tools understand both v1 and v2 filesystems; newfs_lfs generates v2 by default. Changes for the v2 layout include:
- Segments of non-PO2 size and arbitrary block offset, so these can be matched to convenient physical characteristics of the partition (e.g., stripe or track size and offset).
- Address by fragment instead of by disk sector, paving the way for non-512-byte-sector devices. In theory fragments can be as large as you like, though in reality they must be smaller than MAXBSIZE in size.
- Use serial number and filesystem identifier to ensure that roll-forward doesn't get old data and think it's new. Roll-forward is enabled for v2 filesystems, though not for v1 filesystems by default.
- The inode free list is now a tailq, paving the way for undelete (undelete is not yet implemented, but can be without further non-backwards-compatible changes to disk structures).
- Inode atime information is kept in the Ifile, instead of on the inode; that is, the inode is never written *just* because atime was changed. Because of this the inodes remain near the file data on the disk, rather than wandering all over as the disk is read repeatedly. This speeds up repeated reads by a small but noticeable amount.
Other changes of note include:
- The ifile written by newfs_lfs can now be of arbitrary length, it is no longer restricted to a single indirect block.
- Fixed an old bug where ctime was changed every time a vnode was created. I need to look more closely to make sure that the times are only updated during write(2) and friends, not after-the-fact during a segment write, and certainly not by the cleaner.
|
1.10 | 06-Jan-2001 |
joff | branches: 1.10.2; Fixed blockmap handling to properly use disk blocks rather than fragments. Fixes an issue with fsck_lfs not detecting all duplicate blocks that may exist in a corrupted filesystem.
|
1.9 | 05-Jan-2001 |
lukem | use %ll_ instead of the less standard %q_
|
1.8 | 14-Jun-2000 |
perseant | Add "-i" flag to specify the location of the index file inode, to examine alternate checkpoints. Regularize usage of maxino. Remove olf debugging cruft.
|
1.7 | 30-May-2000 |
perseant | Check for cycles in the inode free list, and for free inodes not on the free list.
|
1.6 | 23-May-2000 |
perseant | branches: 1.6.2; Convert to NetBSD source code style
|
1.5 | 16-May-2000 |
perseant | fsck_lfs can now write to the filesystem, allowing it to correct most (though still not all) errors in a damaged lfs. Segment byte accounting is corrected in pass 5. "fsck_lfs -p" will do a partial roll-forward, verifying the checkpoint from the newer superblock. fscknames[] is updated so that fsck knows about fsck_lfs.
|
1.4 | 20-Jan-2000 |
perseant | Rename lfs_ifind so that it does not conflict with new kernel prototype. Addresses PR #9253.
|
1.3 | 03-Jul-1999 |
kleink | RCS Id police.
|
1.2 | 24-Mar-1999 |
nathanw | branches: 1.2.2; printf format fixes for Alpha.
|
1.1 | 18-Mar-1999 |
perseant | Initial checkin of fsck_lfs. This version cannot do any repair (-p flag does nothing, and one of -p or -n is required) but can be useful as a diagnostic tool.
|
1.2.2.1 | 21-Jan-2000 |
he | Pull up revision 1.4 (requested by perseant): Fix name collision error due to recent kernel prototype updates. Fixes PR#9253.
|
1.6.2.1 | 22-Jun-2000 |
minoura | Sync w/ netbsd-1-5-base.
|
1.10.2.1 | 02-Jul-2001 |
perseant | Change disk addressing unit to be the fragment, instead of the disk sector. All quantities in the superblock, inodes, indirect blocks, etc. refer now to this abstract unit (called "fsb" as it is in FFS) instead of disk sectors; as a consequence segment summary blocks have to be multiples of a fragment in size. In v1 filesystems, compatibility code ensures that 1 fsb == 1 sector, regardless of fragment size.
Fragments can now range in size between 512 and 32k; in the event that LFS_LABELPAD (8k) is smaller than the disk address unit size, an extra proto-superblock is kept at 8k from the beginning of the disk, to be used *only* to locate the real superblocks. (Not all of the userland knows about this yet.)
Almost all of this was done not by me, but by joff.
|
1.28.8.1 | 06-Nov-2007 |
matt | sync with HEAD
|
1.30.12.2 | 23-Jun-2013 |
tls | resync from head
|
1.30.12.1 | 25-Feb-2013 |
tls | resync with head
|
1.30.6.2 | 22-May-2014 |
yamt | sync with head.
for a reference, the tree before this commit was tagged as yamt-pagecache-tag8.
this commit was splitted into small chunks to avoid a limitation of cvs. ("Protocol error: too many arguments")
|
1.30.6.1 | 23-Jan-2013 |
yamt | sync with head
|
1.45.18.1 | 17-Aug-2020 |
martin | Pull up following revision(s) (requested by riastradh in ticket #1050):
sys/ufs/lfs/lfs_subr.c: revision 1.101 sys/ufs/lfs/lfs_subr.c: revision 1.102 sys/ufs/lfs/lfs_inode.c: revision 1.158 sys/ufs/lfs/lfs_inode.h: revision 1.25 sys/ufs/lfs/lfs_balloc.c: revision 1.95 sys/ufs/lfs/lfs_pages.c: revision 1.21 sys/ufs/lfs/lfs_vnops.c: revision 1.330 sys/ufs/lfs/lfs_alloc.c: revision 1.140 (patch) sys/ufs/lfs/lfs_alloc.c: revision 1.141 (patch) lib/libp2k/p2k.c: revision 1.72 sys/ufs/lfs/lfs.h: revision 1.205 sys/ufs/lfs/lfs.h: revision 1.206 sys/ufs/lfs/lfs_segment.c: revision 1.284 sys/ufs/lfs/lfs.h: revision 1.207 sys/ufs/lfs/lfs_segment.c: revision 1.285 sys/ufs/lfs/lfs_debug.c: revision 1.55 sys/ufs/lfs/lfs_rename.c: revision 1.23 usr.sbin/dumplfs/dumplfs.c: revision 1.65 sys/ufs/lfs/lfs_vfsops.c: revision 1.371 sys/arch/i386/stand/efiboot/bootx64/Makefile: revision 1.3 sys/ufs/lfs/lfs_vfsops.c: revision 1.372 sys/ufs/lfs/lfs_vfsops.c: revision 1.373 sbin/fsck_lfs/pass1.c: revision 1.46 sys/ufs/lfs/lfs_vnops.c: revision 1.326 sys/ufs/lfs/lfs_vnops.c: revision 1.327 sys/ufs/lfs/lfs_vfsops.c: revision 1.375 (patch) sys/ufs/lfs/lfs_vnops.c: revision 1.328 sys/ufs/lfs/lfs_subr.c: revision 1.98 sys/ufs/lfs/lfs_extern.h: revision 1.116 sys/ufs/lfs/lfs_vnops.c: revision 1.329 sys/ufs/lfs/lfs_subr.c: revision 1.99 sys/ufs/lfs/lfs_extern.h: revision 1.117 sys/ufs/lfs/lfs_accessors.h: revision 1.49 sys/ufs/lfs/lfs_extern.h: revision 1.118 sys/rump/fs/lib/liblfs/Makefile: revision 1.15 sys/ufs/lfs/lfs_bio.c: revision 1.146 (patch) sys/ufs/lfs/lfs_bio.c: revision 1.147 sys/ufs/lfs/lfs_subr.c: revision 1.100
Fix kassert in lfs by initializing vp first.
Use a marker node to iterate lfs_dchainhd / i_lfs_dchain.
I believe elements can be removed while the lock is dropped, including the next node we're hanging on to.
Just use VOP_BWRITE for lfs_bwrite_log. Hope this doesn't cause trouble with vfs_suspend.
Teach lfs to transition ro<->rw.
Prevent new dirops while we issue lfs_flush_dirops.
lfs_flush_dirops assumes (by KASSERT((ip->i_state & IN_ADIROP) == 0)) that vnodes on the dchain will not become involved in active dirops even while holding no other locks (lfs_lock, v_interlock), so we must set lfs_writer here. All other callers already set lfs_writer.
We set fs->lfs_writer++ without explicitly doing lfs_writer_enter because (a) we already waited for the dirops to drain, and (b) we hold lfs_lock and cannot drop it before setting lfs_writer.
Assert lfs_writer where I think we can now prove it.
Serialize access to the splay tree with lfs_lock.
Change some cheap KDASSERT into KASSERT.
Take a reference and fix assertions in lfs_flush_dirops. Fixes panic: KASSERT((ip->i_state & IN_ADIROP) == 0) at lfs_vnops.c:1670 lfs_flush_dirops lfs_check lfs_setattr VOP_SETATTR change_mode sys_fchmod syscall
This assertion -- and the assertion that vp->v_uflag has VU_DIROP set -- is valid only until we release lfs_lock, because we may race with lfs_unmark_dirop which will remove the nodes and change the flags.
Further, vp itself is valid only as long as it is referenced, which it is as long as it's on the dchain, but lfs_unmark_dirop drops the dchain's reference.
Don't lfs_writer_enter while holding v_interlock.
There's no need to lfs_writer_enter at all here, as far as I can see. lfs_flush_fs will do it for us.
Break deadlock in PR kern/52301.
The lock order is lfs_writer -> lfs_seglock. The problem in 52301 is that lfs_segwrite violates this lock order by sometimes doing lfs_seglock -> lfs_writer, either (a) when doing a checkpoint or (b), opportunistically, when there are no dirops pending. Both cases can deadlock, because dirops sometimes take the seglock (lfs_truncate, lfs_valloc, lfs_vfree): (a) There may be dirops pending, and they may be waiting for the seglock, so we can't wait for them to complete while holding the seglock. (b) The test for fs->lfs_dirops == 0 happens unlocked, and the state may change by the time lfs_writer_enter acquires lfs_lock.
To resolve this in each case: (a) Do lfs_writer_enter before lfs_seglock, since we will need it unconditionally anyway. The worst performance impact of this should be that some dirops get delayed a little bit. (b) Create a new lfs_writer_tryenter to use at this point so that the test for fs->lfs_dirops == 0 and the acquisition of lfs_writer happen atomically under lfs_lock.
Initialize/destroy lfs_allclean_wakeup in modcmd, not lfs_mountfs.
Fixes reloading lfs.kmod.
In lfs_update, hold lfs_writer around lfs_vflush.
Otherwise, we might do lfs_vflush -> lfs_seglock -> lfs_segwait(SEGM_CKP) -> lfs_writer_enter which is the reverse of the lfs_writer -> lfs_seglock ordering.
Call lfs_orphan in lfs_rename while we're still in the dirop. lfs_writer_enter can't fail; keep it simple and don't pretend it can.
Assert that mtsleep can't fail either -- it doesn't catch signals and there's no timeout.
Teach LFS_ORPHAN_NEXTFREE about lfs64.
Dust off the orphan detection code and try to make it work.
Fix !DIAGNOSTIC compile
Fix userland references to LFS_ORPHAN_NEXTFREE.
Forgot to grep for these or do a full distribution build, oops!
Fix missing <sys/evcnt.h> by removing the evcnts instead.
Just wanted to confirm that a race might happen, and indeed it did. These serve little diagnostic value otherwise.
OR into bp->b_cflags; don't overwrite.
CTASSERT lfs on-disk structure sizes.
Avoid misaligned access to lfs64 on-disk records in memory. lfs64 directory entries are only 32-bit aligned in order to conserve space in directory blocks, and we had a hack to stuff a 64-bit inode in them. This replaces the hack by __aligned(4) __packed, and goes further:
1. It's not clear that all the other lfs64 data structures are 64-bit aligned on disk to begin with. We can go through these later and upgrade them from struct foo64 { ... } __aligned(4) __packed; union foo { struct foo64 f64; ... }; to struct foo64 { ... }; union foo { struct foo64 f64 __aligned(8); ... } __aligned(4) __packed; if we really want to take advantage of 64-bit memory accesses. However, the __aligned(4) __packed must remain on the union because: 2. We access even the lfs32 data structures via a union that has lfs64 members, and it turns out that compilers will assume access through a union with 64-bit aligned members implies the whole union has 64-bit alignment, even if we're only accessing a 32-bit aligned member.
Fix clang build after packed lfs64 accessor change.
Suppress spurious address-of-packed error in rump lfs too.
|
1.45.16.1 | 08-Apr-2020 |
martin | Merge changes from current as of 20200406
|
1.3 | 16-May-2000 |
perseant | fsck_lfs can now write to the filesystem, allowing it to correct most (though still not all) errors in a damaged lfs. Segment byte accounting is corrected in pass 5. "fsck_lfs -p" will do a partial roll-forward, verifying the checkpoint from the newer superblock. fscknames[] is updated so that fsck knows about fsck_lfs.
|
1.2 | 03-Jul-1999 |
kleink | RCS Id police.
|
1.1 | 18-Mar-1999 |
perseant | Initial checkin of fsck_lfs. This version cannot do any repair (-p flag does nothing, and one of -p or -n is required) but can be useful as a diagnostic tool.
|
1.35 | 03-Apr-2020 |
joerg | Avoid common symbols for fsck_lfs.
|
1.34 | 21-Sep-2015 |
dholland | branches: 1.34.16; Add 64-bit directory entry structures, and adjust accessors accordingly.
The LFS64 directory entry has a 64-bit inode number. This is stored as two 32-bit values to avoid inducing 64-bit alignment requirements.
The exposed type for manipulating directory entries is now LFS_DIRHEADER, following the same convention as e.g. IFILE and SEGUSE. (But with LFS_ on it, because.)
|
1.33 | 21-Sep-2015 |
dholland | Oops; LFS_DIRECTSIZ() is going to need the fs as an argument.
Also, it turns out that dirhash needs a compile-time-constant version of LFS_DIRECTSIZ(LFS_MAXNAMLEN+1), independent of 64-vs-32, so create LFS_MAXDIRENTRYSIZE for this. Sigh.
|
1.32 | 15-Sep-2015 |
dholland | Pass around struct lfs_dirheader instead of struct lfs_direct.
|
1.31 | 15-Sep-2015 |
dholland | Add an accessor function for directory names.
|
1.30 | 15-Sep-2015 |
dholland | Add a function lfs_copydirname() to copy directory names in place; use it in place of (variously) memcpy and strlcpy. (The latter isn't even correct; was probably changed blindly from strncpy at some point.)
The new function zeroes the padding in the directory entry instead of leaving trash behind.
|
1.29 | 15-Sep-2015 |
dholland | Tidyups/fixes preparatory to making d_name[] in struct lfs_direct size 0 instead of size LFS_MAXNAMLEN+1, and preparatory to having accessor functions for d_name. In particular, don't create prototype entries and copy them, and access the name field only for directory structures that are in buffers with space for the name to exist.
|
1.28 | 15-Sep-2015 |
dholland | Add and use accessor functions for more of the directory entry fields.
|
1.27 | 01-Sep-2015 |
dholland | Add new accessors for the d_type and d_namlen fields of struct lfs_direct. Napalm the old byteswap access logic for these.
|
1.26 | 12-Aug-2015 |
dholland | Hack up dinode usage to be 64 vs. 32 as needed. Part 1.
(This part changes the native lfs code; the ufs-derived code already has 64 vs. 32 logic, but as aspects of it are unsafe, and don't entirely interoperate cleanly with the lfs 64/32 stuff, pass 2 will be rehashing that.)
|
1.25 | 16-Jun-2015 |
christos | a few more \n's in errors
|
1.24 | 16-Jun-2015 |
christos | fix error messages containing \n
|
1.23 | 08-Jun-2013 |
dholland | Tidy up the LFS userland build hacks. Don't use -I${NETBSDSRCDIR}/sys; don't include files other than the exported LFS headers, which are lfs.h, lfs_inode.h, and (for now) lfs_extern.h.
|
1.22 | 08-Jun-2013 |
dholland | DIRBLKSIZ -> LFS_DIRBLKSIZ DIRECTSIZ -> LFS_DIRECTSIZ DIRSIZ -> LFS_DIRSIZ OLDDIRFMT -> LFS_OLDDIRFMT NEWDIRFMT -> LFS_NEWDIRFMT IFTODT -> LFS_IFTODT DTTOIF -> LFS_DTTOIF
|
1.21 | 08-Jun-2013 |
dholland | struct direct -> struct lfs_direct struct dirtemplate -> struct lfs_dirtemplate struct odirtemplate -> struct lfs_odirtemplate DT_* -> LFS_DT_*
|
1.20 | 08-Jun-2013 |
dholland | Stick LFS_ in front of IFMT, IFIFO, IFREG, etc. so as not to conflict with the UFS copies of these symbols. (Which themselves ought to have UFS_ stuck on.)
|
1.19 | 06-Jun-2013 |
dholland | ufs -> ulfs for fsck_lfs.
|
1.18 | 22-Jan-2013 |
dholland | Stuff UFS_ in front of a few of ufs's symbols to reduce namespace pollution. Specifically: ROOTINO -> UFS_ROOTINO WINO -> UFS_WINO NXADDR -> UFS_NXADDR NDADDR -> UFS_NDADDR NIADDR -> UFS_NIADDR MAXSYMLINKLEN -> UFS_MAXSYMLINKLEN MAXSYMLINKLEN_UFS[12] -> UFS[12]_MAXSYMLINKLEN (for consistency)
Sort out ext2fs's misuse of NDADDR and NIADDR; fortunately, these have the same values in ext2fs and ffs.
No functional change intended.
|
1.17 | 09-Nov-2006 |
christos | branches: 1.17.42; 1.17.48; Fix malloc/realloc/calloc issues: always check and exit, use EEXIT instead of 8.
|
1.16 | 01-Sep-2006 |
perseant | Several fixes to improve the reliability of the roll-forward agent. Also, note "properly orphaned" files as distinct from corrupted files.
|
1.15 | 13-Sep-2005 |
christos | rename lfs.h to lfs_user.h so that it does not conflict.
|
1.14 | 27-Jun-2005 |
christos | constify
|
1.13 | 11-Apr-2005 |
perseant | Be more efficient with the hash tables for the buffer and vnode caches.
Note that roll-forward can add more inodes to the filesystem; don't overflow the tables but reallocate them.
|
1.12 | 06-Feb-2005 |
perry | branches: 1.12.2; remove obsolete "register" declarations.
|
1.11 | 19-Jan-2005 |
xtraeme | ANSIfy, WARNS=2
|
1.10 | 07-Aug-2003 |
agc | Move UCB-licensed code from 4-clause to 3-clause licence.
Patches provided by Joel Baker in PR 22308, verified by myself.
|
1.9 | 13-Jul-2003 |
itojun | use bounded string op
|
1.8 | 02-Apr-2003 |
fvdl | Add support for UFS2. UFS2 is an enhanced FFS, adding support for 64 bit block pointers, extended attribute storage, and a few other things.
This commit does not yet include the code to manipulate the extended storage (for e.g. ACLs), this will be done later.
Originally written by Kirk McKusick and Network Associates Laboratories for FreeBSD.
|
1.7 | 28-Mar-2003 |
perseant | Add working writing ability to fsck_lfs, including roll-forward, based on a partial-segment writer ported from the kernel.
|
1.6 | 25-Sep-2001 |
wiz | Add some \n to error messages.
|
1.5 | 14-Jun-2000 |
perseant | Add "-i" flag to specify the location of the index file inode, to examine alternate checkpoints. Regularize usage of maxino. Remove olf debugging cruft.
|
1.4 | 23-May-2000 |
perseant | branches: 1.4.2; Convert to NetBSD source code style
|
1.3 | 03-Jul-1999 |
kleink | RCS Id police.
|
1.2 | 24-Mar-1999 |
nathanw | printf format fixes for Alpha.
|
1.1 | 18-Mar-1999 |
perseant | Initial checkin of fsck_lfs. This version cannot do any repair (-p flag does nothing, and one of -p or -n is required) but can be useful as a diagnostic tool.
|
1.4.2.1 | 22-Jun-2000 |
minoura | Sync w/ netbsd-1-5-base.
|
1.12.2.1 | 07-May-2005 |
tron | Apply patch (requested by perseant in ticket #242): * fsck_lfs buffer cache fixes, including PR #29151 * Change fsck_lfs phase 0 message to reflect reality * fsck_lfs: check phase 5 (cleanerinfo accounting) even on roll-forward * Keep better track of the free list during roll-forward, avoiding a core dump * Improve hash table use for fsck_lfs buffer and vnode cache * Document fsck_lfs flag -f, and implement -q * Add resize_lfs, including kernel support * Add LFS to mountd's list of exportable filesystem types * Make the LFS lkm work again [christos@] * Add MP locking to the LFS kernel subsystem * Fix pager_map deadlock in lfs_putpages() * Avoid incomplete file extension that looks like "partial truncation" to fsck * Use lfs_malloc for cleaner malloc, since the cleaner often runs in low-memory conditions. * Use splay trees, not hash table, to track page allocation for write. * Fix mkdir panic on full fs * Fix page accounting leak by counting differently. * Use rightly named structure for lfs_getattr [skrll@] * Cosmetic changes for readability.
|
1.17.48.2 | 23-Jun-2013 |
tls | resync from head
|
1.17.48.1 | 25-Feb-2013 |
tls | resync with head
|
1.17.42.2 | 22-May-2014 |
yamt | sync with head.
for a reference, the tree before this commit was tagged as yamt-pagecache-tag8.
this commit was splitted into small chunks to avoid a limitation of cvs. ("Protocol error: too many arguments")
|
1.17.42.1 | 23-Jan-2013 |
yamt | sync with head
|
1.34.16.1 | 08-Apr-2020 |
martin | Merge changes from current as of 20200406
|
1.13 | 08-Jun-2013 |
dholland | Tidy up the LFS userland build hacks. Don't use -I${NETBSDSRCDIR}/sys; don't include files other than the exported LFS headers, which are lfs.h, lfs_inode.h, and (for now) lfs_extern.h.
|
1.12 | 06-Jun-2013 |
dholland | Cleanups and hacks to make lfs userland stuff build: - lfs_cksum.c doesn't actually need ulfs_inode.h any more. - neither does lfs_itimes.c. - add hacks to fsck_lfs to make it compile. - add hacks to newfs_lfs to make it compile. - fix warning in ulfs_quota.c when quotas are fully disabled (as I guess is happening with the rumpity version)
XXX: This commit adds -I${NETBSDSRCDIR}/sys to the Makefiles for XXX: fsck_lfs, newfs_lfs, and lfs_cleanerd. This needs to be cleaned XXX: up ASAP; but I consider this less problematic in the short term XXX: than spewing ulfs_*.h into /usr/include.
|
1.11 | 06-Jun-2013 |
dholland | ufs -> ulfs for fsck_lfs.
|
1.10 | 22-Jan-2013 |
dholland | Stuff UFS_ in front of a few of ufs's symbols to reduce namespace pollution. Specifically: ROOTINO -> UFS_ROOTINO WINO -> UFS_WINO NXADDR -> UFS_NXADDR NDADDR -> UFS_NDADDR NIADDR -> UFS_NIADDR MAXSYMLINKLEN -> UFS_MAXSYMLINKLEN MAXSYMLINKLEN_UFS[12] -> UFS[12]_MAXSYMLINKLEN (for consistency)
Sort out ext2fs's misuse of NDADDR and NIADDR; fortunately, these have the same values in ext2fs and ffs.
No functional change intended.
|
1.9 | 01-Sep-2006 |
perseant | branches: 1.9.42; 1.9.48; Several fixes to improve the reliability of the roll-forward agent. Also, note "properly orphaned" files as distinct from corrupted files.
|
1.8 | 26-Feb-2005 |
perseant | Various minor LFS improvements:
* Extend the lfs library from fsck_lfs(8) so that it can be used with a not-yet-existent LFS. Make newfs_lfs(8) use this library, so it can create LFSs whose Ifile is larger than one segment. * Make newfs_lfs(8) use strsuftoi64() for its arguments, a la newfs(8). * Make fsck_lfs(8) respect the "file system is clean" flag. * Don't let fsck_lfs(8) think it has dirty blocks when invoked with the -n flag.
|
1.7 | 06-Feb-2005 |
perry | remove obsolete "register" declarations.
|
1.6 | 19-Jan-2005 |
xtraeme | ANSIfy, WARNS=2
|
1.5 | 07-Aug-2003 |
agc | branches: 1.5.4; Move UCB-licensed code from 4-clause to 3-clause licence.
Patches provided by Joel Baker in PR 22308, verified by myself.
|
1.4 | 28-Mar-2003 |
perseant | Add working writing ability to fsck_lfs, including roll-forward, based on a partial-segment writer ported from the kernel.
|
1.3 | 23-May-2000 |
perseant | Convert to NetBSD source code style
|
1.2 | 03-Jul-1999 |
kleink | RCS Id police.
|
1.1 | 18-Mar-1999 |
perseant | Initial checkin of fsck_lfs. This version cannot do any repair (-p flag does nothing, and one of -p or -n is required) but can be useful as a diagnostic tool.
|
1.5.4.1 | 10-May-2005 |
riz | Pull up the following revisions (requested by perseant in ticket #1281):
1.8 sys/ufs/lfs/TODO 1.75 sys/ufs/lfs/lfs.h (via patch) 1.74 sys/ufs/lfs/lfs_alloc.c (via patch) 1.49, 1.51 sys/ufs/lfs/lfs_balloc.c (1.51 via patch) 1.78 sys/ufs/lfs/lfs_bio.c 1.62 sys/ufs/lfs/lfs_extern.h (via patch) 1.156 sys/ufs/lfs/lfs_segment.c (via patch) 1.48 sys/ufs/lfs/lfs_subr.c 1.101 sys/ufs/lfs/lfs_syscalls.c 1.163 sys/ufs/lfs/lfs_vfsops.c (via patch) 1.134 sys/ufs/lfs/lfs_vnops.c (via patch) 1.61 sys/ufs/ufs/ufs_readwrite.c (via patch)
1.20 libexec/lfs_cleanerd/clean.h (via patch) 1.52 libexec/lfs_cleanerd/cleanerd.c (via patch) 1.41 libexec/lfs_cleanerd/library.c (via patch)
1.4 regress/sys/fs/lfs/newfs_fsck/Makefile 1.2 regress/sys/fs/lfs/newfs_fsck/mkfs_mount 1.2 regress/sys/fs/lfs/newfs_fsck/smallfiles 1.3 sbin/fsck_lfs/bufcache.c 1.3 sbin/fsck_lfs/bufcache.h 1.3 sbin/fsck_lfs/lfs.h 1.8 sbin/fsck_lfs/lfs.c (via patch) 1.8 sbin/fsck_lfs/pass3.c (via patch) 1.18 sbin/fsck_lfs/pass0.c (via patch) 1.18 sbin/fsck_lfs/utilities.c (via patch) 1.7 sbin/fsck_lfs/segwrite.c 1.19 sbin/fsck_lfs/setup.c (via patch) 1.3 sbin/newfs_lfs/Makefile 0 sbin/newfs_lfs/lfs.c (yes, remove it) 1.1 sbin/newfs_lfs/make_lfs.c 1.15 sbin/newfs_lfs/newfs.c (via patch)
Various minor LFS improvements.
Kernel:
* Note when lfs_putpages(9) thinks it is not going to be writing any pages before calling genfs_putpages(9). This prevents a situation in which blocks can be queued for writing without a segment header. * Correct computation of NRESERVE(), though it is still a gross overestimate in most cases. Note that if NRESERVE() is too high, it may be impossible to create files on the filesystem. We catch this case on filesystem mount and refuse to mount r/w. * Allow filesystems to be mounted whose block size is == MAXBSIZE. * Somewhere along the line, ufs_bmaparray(9) started mangling UNWRITTEN entries in indirect blocks again, triggering a failed assertion "daddr <= LFS_MAX_DADDR". Explicitly convert to and from int32_t to correct this. Should fix PR #29045. * Add a high-water mark for the number of dirty pages any given LFS can hold before triggering a flush. This is settable by sysctl, but off (zero) by default. * Be more careful about the MAX_BYTES and MAX_BUFS computations so we shouldn't see "please increase to at least zero" messages. * Note that VBLK and VCHR vnodes can have nonzero values in di_db[0] even though their v_size == 0. Don't panic when we see this. Fixes PR #26680. * Change lfs_bfree to a signed quantity. The manner in which it is processed before being passed to the cleaner means that sometimes it may drop below zero, and the cleaner must be aware of this. * Never report bfree < 0 (or higher than lfs_dsize) through lfs_statfs(9). This prevents df(1) from ever telling us that our full filesystems have 16TB free. * Account space allocated through lfs_balloc(9) that does not have associated buffer headers, so that the pagedaemon doesn't run us out of segments. * Return ENOSPC from lfs_balloc(9) when bfree drops to zero. * Address a deadlock in lfs_bmapv/lfs_markv when the filesystem is being unmounted. Because vfs_busy() is a shared lock, and lfs_bmapv/lfs_markv mark the filesystem vfs_busy(), the cleaner can be holding the lock that umount() is blocking on, then try to vfs_busy() again in getnewvnode().
cleaner:
* Adapt lfs_cleanerd to use the fcntl call to get the Ifile filehandle, so it need not be in the namespace. * Make lfs_cleanerd be more careful when there are very few available segments. * Make lfs_cleanerd less verbose when the filesystem is unmounted.
newfs_lfs, fsck_lfs, and regression:
* Extend the lfs library from fsck_lfs(8) so that it can be used with a not-yet-existent LFS. Make newfs_lfs(8) use this library, so it can create LFSs whose Ifile is larger than one segment. Addresses PR #11110. * Make newfs_lfs(8) use strsuftoi64() for its arguments, a la newfs(8). * Make fsck_lfs(8) respect the "file system is clean" flag. * Don't let fsck_lfs(8) think it has dirty blocks when invoked with the -n flag. * Remove the Ifile from the filesystem namespace. The cleaner now uses a fcntl call on the root inode to find the Ifile filehandle. (As a side-effect, addresses PR #29144.)
|
1.9.48.2 | 23-Jun-2013 |
tls | resync from head
|
1.9.48.1 | 25-Feb-2013 |
tls | resync with head
|
1.9.42.2 | 22-May-2014 |
yamt | sync with head.
for a reference, the tree before this commit was tagged as yamt-pagecache-tag8.
this commit was splitted into small chunks to avoid a limitation of cvs. ("Protocol error: too many arguments")
|
1.9.42.1 | 23-Jan-2013 |
yamt | sync with head
|
1.28 | 03-Apr-2020 |
joerg | Avoid common symbols for fsck_lfs.
|
1.27 | 01-Sep-2015 |
dholland | branches: 1.27.16; Use daddr_t, not ulfs_daddr_t, as the latter's 32 bits wide. Don't use either for on-disk items. Declare external data in header files. Part 3 of 3.
|
1.26 | 12-Aug-2015 |
dholland | Hack up dinode usage to be 64 vs. 32 as needed. Part 1.
(This part changes the native lfs code; the ufs-derived code already has 64 vs. 32 logic, but as aspects of it are unsafe, and don't entirely interoperate cleanly with the lfs 64/32 stuff, pass 2 will be rehashing that.)
|
1.25 | 28-Jul-2015 |
dholland | Add a new lfs header file: lfs_accessors.h.
This contains all the accessor functions and macros out of lfs.h. Add an include of lfs_accessors.h after all uses of lfs.h... except for code that wants to define its own struct lfs-alike that the accessors are supposed to play along with. For these, set STRUCT_LFS and include lfs_accessors.h after the necessary structure has been defined, so that lfs_accessors.h can emit functions in terms of it.
|
1.24 | 24-Jul-2015 |
dholland | Switch to accessor functions for elements of the LFS on-disk superblock. This will allow switching between 32/64 bit forms on the fly; it will also allow handling LFS_EI reasonably tidily. (That currently doesn't work on the superblock.)
It also gets rid of cpp abuse in the form of fake structure member macros.
Also, instead of doing sleep/wakeup on &lfs_avail and &lfs_nextseg inside the on-disk superblock, add extra elements to the in-memory struct lfs for this. (XXX: these should be changed to condvars, but not right now)
XXX: this migrates a structure needed by the lfs code in libsa (struct salfs) into lfs.h, where it doesn't belong, but for the time being this is necessary in order to allow the accessors (and the various lfs macros and other goop that relies on them) to compile.
|
1.23 | 16-Jun-2015 |
christos | fix error messages containing \n
|
1.22 | 18-Jun-2013 |
christos | Prefix most of the cpp macros with lfs_ and LFS_ to avoid conflicts with ffs. This was done so that boot blocks that want to compile both FFS and LFS in the same file work.
|
1.21 | 08-Jun-2013 |
dholland | Tidy up the LFS userland build hacks. Don't use -I${NETBSDSRCDIR}/sys; don't include files other than the exported LFS headers, which are lfs.h, lfs_inode.h, and (for now) lfs_extern.h.
|
1.20 | 06-Jun-2013 |
dholland | Cleanups and hacks to make lfs userland stuff build: - lfs_cksum.c doesn't actually need ulfs_inode.h any more. - neither does lfs_itimes.c. - add hacks to fsck_lfs to make it compile. - add hacks to newfs_lfs to make it compile. - fix warning in ulfs_quota.c when quotas are fully disabled (as I guess is happening with the rumpity version)
XXX: This commit adds -I${NETBSDSRCDIR}/sys to the Makefiles for XXX: fsck_lfs, newfs_lfs, and lfs_cleanerd. This needs to be cleaned XXX: up ASAP; but I consider this less problematic in the short term XXX: than spewing ulfs_*.h into /usr/include.
|
1.19 | 06-Jun-2013 |
dholland | ufs -> ulfs for fsck_lfs.
|
1.18 | 22-Jan-2013 |
dholland | Stuff UFS_ in front of a few of ufs's symbols to reduce namespace pollution. Specifically: ROOTINO -> UFS_ROOTINO WINO -> UFS_WINO NXADDR -> UFS_NXADDR NDADDR -> UFS_NDADDR NIADDR -> UFS_NIADDR MAXSYMLINKLEN -> UFS_MAXSYMLINKLEN MAXSYMLINKLEN_UFS[12] -> UFS[12]_MAXSYMLINKLEN (for consistency)
Sort out ext2fs's misuse of NDADDR and NIADDR; fortunately, these have the same values in ext2fs and ffs.
No functional change intended.
|
1.17 | 16-Feb-2010 |
mlelstv | branches: 1.17.6; 1.17.12; Three changes in a single commit.
- drop the notion of frags (LFS fragments) vs fsb (FFS fragments) The code uses a complicated unity function that just makes the code difficult to understand.
- support larger sector sizes. Fix disk address computations to use DEV_BSIZE in the kernel as required by device drivers and to use sector sizes in userland.
- Fix several locking bugs in lfs_bio.c and lfs_subr.c.
|
1.16 | 09-Nov-2006 |
christos | Fix malloc/realloc/calloc issues: always check and exit, use EEXIT instead of 8.
|
1.15 | 01-Sep-2006 |
perseant | Several fixes to improve the reliability of the roll-forward agent. Also, note "properly orphaned" files as distinct from corrupted files.
|
1.14 | 18-Jul-2006 |
perseant | Various improvements to fsck_lfs, to wit:
* Add lfs_balloc capability to the lfs library. * Extend the Ifile if we run out of free inodes when creating lost+found. * Don't roll forward if we have allocated a lost+found, to avoid conflicts when adding new files in roll-forward. * Make some messages slightly more verbose (e.g. include inode number, and use pwarn() instead of printf() so the messages include the device name when preening). * Change superblock detection/avoidance to use the offset table in the primary superblock, rather than looking at the contents. * Be more verbose about various operations when passed the -d flag, especially roll-forward. * Be more careful about dirops during roll forward, since the cleaner can sometimes write blocks from dirop vnodes. Detect and avoid this problem. * Always check the free list, even if given -i; if we're going to write it we have to check it first. * Mark inodes dirty when blocks are found during roll forward, so the inodes are written with the new block locations. * Update size of inodes if blocks beyond EOF are found during roll forward. * Fix segment accounting for blocks and inodes found during roll forward. * Report statistics on roll forward: how many new/deleted/moved files and how many updated blocks (or "nothing new"). * Don't care if the device being checked is really a device, if we have been passed the -f flag (to facilitate automated testing). * When writing to the disk, use the current time in the segment headers rathern than time 0. * When passed the -i flag, locate the partial segment containing the Ifile inode and use that to calculate lfs_offset, lfs_curseg, lfs_nextseg. (Again for automated testing.)
|
1.13 | 13-Sep-2005 |
christos | rename lfs.h to lfs_user.h so that it does not conflict.
|
1.12 | 19-Aug-2005 |
christos | 64 bit inode changes
|
1.11 | 06-Feb-2005 |
perry | remove obsolete "register" declarations.
|
1.10 | 19-Jan-2005 |
xtraeme | ANSIfy, WARNS=2
|
1.9 | 07-Aug-2003 |
agc | Move UCB-licensed code from 4-clause to 3-clause licence.
Patches provided by Joel Baker in PR 22308, verified by myself.
|
1.8 | 02-Apr-2003 |
fvdl | Add support for UFS2. UFS2 is an enhanced FFS, adding support for 64 bit block pointers, extended attribute storage, and a few other things.
This commit does not yet include the code to manipulate the extended storage (for e.g. ACLs), this will be done later.
Originally written by Kirk McKusick and Network Associates Laboratories for FreeBSD.
|
1.7 | 29-Mar-2003 |
perseant | Fix some accounting problems when preening, since preening skips phases 1-4 entirely. Make preen run phase 0, since the Ifile is so important and the test so quick.
|
1.6 | 28-Mar-2003 |
perseant | Add working writing ability to fsck_lfs, including roll-forward, based on a partial-segment writer ported from the kernel.
|
1.5 | 25-Sep-2001 |
wiz | Add some \n to error messages.
|
1.4 | 06-Jan-2001 |
joff | Fixed blockmap handling to properly use disk blocks rather than fragments. Fixes an issue with fsck_lfs not detecting all duplicate blocks that may exist in a corrupted filesystem.
|
1.3 | 23-May-2000 |
perseant | Convert to NetBSD source code style
|
1.2 | 03-Jul-1999 |
kleink | RCS Id police.
|
1.1 | 18-Mar-1999 |
perseant | Initial checkin of fsck_lfs. This version cannot do any repair (-p flag does nothing, and one of -p or -n is required) but can be useful as a diagnostic tool.
|
1.17.12.2 | 23-Jun-2013 |
tls | resync from head
|
1.17.12.1 | 25-Feb-2013 |
tls | resync with head
|
1.17.6.2 | 22-May-2014 |
yamt | sync with head.
for a reference, the tree before this commit was tagged as yamt-pagecache-tag8.
this commit was splitted into small chunks to avoid a limitation of cvs. ("Protocol error: too many arguments")
|
1.17.6.1 | 23-Jan-2013 |
yamt | sync with head
|
1.27.16.1 | 08-Apr-2020 |
martin | Merge changes from current as of 20200406
|
1.38 | 14-Sep-2025 |
perseant | Add -a flag to suppress warnings about discrepancies in avail accounting, which is common with the -i flag.
Expand the computation of avail if the -d flag is given. The computation itself is not changed.
Do not offer to roll forward if the -n flag was given.
Exit with FSCK_EXIT_UNRESOLVED if the -n flag was given and any questions were asked. This is helpful when using fsck_lfs as a diagnostic in scripts.
|
1.37 | 03-Apr-2020 |
joerg | Avoid common symbols for fsck_lfs.
|
1.36 | 01-Sep-2015 |
dholland | branches: 1.36.16; Use daddr_t, not ulfs_daddr_t, as the latter's 32 bits wide. Don't use either for on-disk items. Declare external data in header files. Part 3 of 3.
|
1.35 | 03-Aug-2015 |
dholland | Use intmax_t to print daddr_t; from sevan@.
|
1.34 | 02-Aug-2015 |
dholland | Use accessor functions for the version field of the lfs superblock. I thought at first maybe the cases that test the version should be rolled into the accessors, but on the whole I think the conclusion on that is no.
|
1.33 | 02-Aug-2015 |
dholland | Fix assorted 64 -> 32 truncations in lfs. Also, some minor tidyups and corrections in passing.
|
1.32 | 28-Jul-2015 |
dholland | Add a new lfs header file: lfs_accessors.h.
This contains all the accessor functions and macros out of lfs.h. Add an include of lfs_accessors.h after all uses of lfs.h... except for code that wants to define its own struct lfs-alike that the accessors are supposed to play along with. For these, set STRUCT_LFS and include lfs_accessors.h after the necessary structure has been defined, so that lfs_accessors.h can emit functions in terms of it.
|
1.31 | 24-Jul-2015 |
dholland | More lfs superblock accessors. (This changes the rest of the code over; all the accessors were already added.)
The difference between this commit and the previous one is arbitrary, but the previous one passed the regression tests on its own so I'm keeping it separate to help with any bisections that might be needed in the future.
|
1.30 | 24-Jul-2015 |
dholland | Switch to accessor functions for elements of the LFS on-disk superblock. This will allow switching between 32/64 bit forms on the fly; it will also allow handling LFS_EI reasonably tidily. (That currently doesn't work on the superblock.)
It also gets rid of cpp abuse in the form of fake structure member macros.
Also, instead of doing sleep/wakeup on &lfs_avail and &lfs_nextseg inside the on-disk superblock, add extra elements to the in-memory struct lfs for this. (XXX: these should be changed to condvars, but not right now)
XXX: this migrates a structure needed by the lfs code in libsa (struct salfs) into lfs.h, where it doesn't belong, but for the time being this is necessary in order to allow the accessors (and the various lfs macros and other goop that relies on them) to compile.
|
1.29 | 31-May-2015 |
hannken | Use VFS_PROTOS() for lfs. Rename conflicting struct lfs field "lfs_start" to "lfs_s0addr".
No functional change.
|
1.28 | 18-Jun-2013 |
christos | Prefix most of the cpp macros with lfs_ and LFS_ to avoid conflicts with ffs. This was done so that boot blocks that want to compile both FFS and LFS in the same file work.
|
1.27 | 08-Jun-2013 |
dholland | Tidy up the LFS userland build hacks. Don't use -I${NETBSDSRCDIR}/sys; don't include files other than the exported LFS headers, which are lfs.h, lfs_inode.h, and (for now) lfs_extern.h.
|
1.26 | 06-Jun-2013 |
dholland | Cleanups and hacks to make lfs userland stuff build: - lfs_cksum.c doesn't actually need ulfs_inode.h any more. - neither does lfs_itimes.c. - add hacks to fsck_lfs to make it compile. - add hacks to newfs_lfs to make it compile. - fix warning in ulfs_quota.c when quotas are fully disabled (as I guess is happening with the rumpity version)
XXX: This commit adds -I${NETBSDSRCDIR}/sys to the Makefiles for XXX: fsck_lfs, newfs_lfs, and lfs_cleanerd. This needs to be cleaned XXX: up ASAP; but I consider this less problematic in the short term XXX: than spewing ulfs_*.h into /usr/include.
|
1.25 | 06-Jun-2013 |
dholland | ufs -> ulfs for fsck_lfs.
|
1.24 | 28-Apr-2008 |
martin | branches: 1.24.20; 1.24.26; Remove clause 3 and 4 from TNF licenses
|
1.23 | 08-Oct-2007 |
ad | branches: 1.23.8; 1.23.10; Give brelse() a second argument so that it matches the kernel. fsck_lfs now compiles again.
|
1.22 | 16-Oct-2006 |
christos | branches: 1.22.8; comment out/delete impossible code
|
1.21 | 01-Sep-2006 |
perseant | Several fixes to improve the reliability of the roll-forward agent. Also, note "properly orphaned" files as distinct from corrupted files.
|
1.20 | 13-Aug-2006 |
bjh21 | Fix typos in messages: SHOULE -> SHOULD
|
1.19 | 18-Jul-2006 |
perseant | Various improvements to fsck_lfs, to wit:
* Add lfs_balloc capability to the lfs library. * Extend the Ifile if we run out of free inodes when creating lost+found. * Don't roll forward if we have allocated a lost+found, to avoid conflicts when adding new files in roll-forward. * Make some messages slightly more verbose (e.g. include inode number, and use pwarn() instead of printf() so the messages include the device name when preening). * Change superblock detection/avoidance to use the offset table in the primary superblock, rather than looking at the contents. * Be more verbose about various operations when passed the -d flag, especially roll-forward. * Be more careful about dirops during roll forward, since the cleaner can sometimes write blocks from dirop vnodes. Detect and avoid this problem. * Always check the free list, even if given -i; if we're going to write it we have to check it first. * Mark inodes dirty when blocks are found during roll forward, so the inodes are written with the new block locations. * Update size of inodes if blocks beyond EOF are found during roll forward. * Fix segment accounting for blocks and inodes found during roll forward. * Report statistics on roll forward: how many new/deleted/moved files and how many updated blocks (or "nothing new"). * Don't care if the device being checked is really a device, if we have been passed the -f flag (to facilitate automated testing). * When writing to the disk, use the current time in the segment headers rathern than time 0. * When passed the -i flag, locate the partial segment containing the Ifile inode and use that to calculate lfs_offset, lfs_curseg, lfs_nextseg. (Again for automated testing.)
|
1.18 | 17-Apr-2006 |
perseant | Remove the free list ordering/disordering code, since the kernel now keeps the list in order (ordering it on mount).
Regularize error messages: these are now all in ALL CAPS, with all hex numbers (not reported in caps) prefixed by 0x. (The non-fsck-specific messages are an exception to this all-caps rule.)
|
1.17 | 13-Sep-2005 |
christos | rename lfs.h to lfs_user.h so that it does not conflict.
|
1.16 | 23-Apr-2005 |
perseant | Check parts of pass 5 even if only rolling forward. We can't check the true segment holdings against the blocks held by the inodes, but we can still check the cleanerinfo data against the segment table.
|
1.15 | 11-Apr-2005 |
perseant | Be more efficient with the hash tables for the buffer and vnode caches.
Note that roll-forward can add more inodes to the filesystem; don't overflow the tables but reallocate them.
|
1.14 | 19-Jan-2005 |
xtraeme | branches: 1.14.2; ANSIfy, WARNS=2
|
1.13 | 14-May-2004 |
yamt | pass5: dereference of an uninitialized pointer.
|
1.12 | 28-Mar-2003 |
perseant | Add working writing ability to fsck_lfs, including roll-forward, based on a partial-segment writer ported from the kernel.
|
1.11 | 23-Feb-2003 |
perseant | Make the "-O" (start filesystem offset) flag to newfs_lfs work correctly, and update fsck_lfs and dumplfs to deal with it. Note that while the argument to -O is given in disk sectors, it must be a multiple of the fragment size, and although it can be lower than the label or superblock, it can't intersect either.
|
1.10 | 23-May-2002 |
perseant | Re-checksum the superblock whenever it is marked dirty.
Tested on alpha.
|
1.9 | 13-Jul-2001 |
perseant | branches: 1.9.2; Merge the short-lived perseant-lfsv2 branch into the trunk.
Kernels and tools understand both v1 and v2 filesystems; newfs_lfs generates v2 by default. Changes for the v2 layout include:
- Segments of non-PO2 size and arbitrary block offset, so these can be matched to convenient physical characteristics of the partition (e.g., stripe or track size and offset).
- Address by fragment instead of by disk sector, paving the way for non-512-byte-sector devices. In theory fragments can be as large as you like, though in reality they must be smaller than MAXBSIZE in size.
- Use serial number and filesystem identifier to ensure that roll-forward doesn't get old data and think it's new. Roll-forward is enabled for v2 filesystems, though not for v1 filesystems by default.
- The inode free list is now a tailq, paving the way for undelete (undelete is not yet implemented, but can be without further non-backwards-compatible changes to disk structures).
- Inode atime information is kept in the Ifile, instead of on the inode; that is, the inode is never written *just* because atime was changed. Because of this the inodes remain near the file data on the disk, rather than wandering all over as the disk is read repeatedly. This speeds up repeated reads by a small but noticeable amount.
Other changes of note include:
- The ifile written by newfs_lfs can now be of arbitrary length, it is no longer restricted to a single indirect block.
- Fixed an old bug where ctime was changed every time a vnode was created. I need to look more closely to make sure that the times are only updated during write(2) and friends, not after-the-fact during a segment write, and certainly not by the cleaner.
|
1.8 | 21-Nov-2000 |
perseant | branches: 1.8.2; Check/fix accounting of lfs_dmeta. Patch from Jesse Off <joff@gci-net.com> (PR #11534).
|
1.7 | 13-Nov-2000 |
perseant | Report, and detect and correct inconsistencies in, the number of clean segments. Patches from Jesse Off <joff@gci-net.com> (PR #11470).
|
1.6 | 09-Sep-2000 |
perseant | Various bug-fixes to LFS, to wit:
Kernel:
* Add runtime quantity lfs_ravail, the number of disk-blocks reserved for writing. Writes to the filesystem first reserve a maximum amount of blocks before their write is allowed to proceed; after the blocks are allocated the reserved total is reduced by a corresponding amount.
If the lfs_reserve function cannot immediately reserve the requested number of blocks, the inode is unlocked, and the thread sleeps until the cleaner has made enough space available for the blocks to be reserved. In this way large files can be written to the filesystem (or, smaller files can be written to a nearly-full but thoroughly clean filesystem) and the cleaner can still function properly.
* Remove explicit switching on dlfs_minfreeseg from the kernel code; it is now merely a fs-creation parameter used to compute dlfs_avail and dlfs_bfree (and used by fsck_lfs(8) to check their accuracy). Its former role is better assumed by a properly computed dlfs_avail.
* Bounds-check inode numbers submitted through lfs_bmapv and lfs_markv. This prevents a panic, but, if the cleaner is feeding the filesystem the wrong data, you are still in a world of hurt.
* Cleanup: remove explicit references of DEV_BSIZE in favor of btodb()/dbtob().
lfs_cleanerd:
* Make -n mean "send N segments' blocks through a single call to lfs_markv". Previously it had meant "clean N segments though N calls to lfs_markv, before looking again to see if more need to be cleaned". The new behavior gives better packing of direct data on disk with as little metadata as possible, largely alleviating the problem that the cleaner can consume more disk through inefficient use of metadata than it frees by moving dirty data away from clean "holes" to produce entirely clean segments.
* Make -b mean "read as many segments as necessary to write N segments of dirty data back to disk", rather than its former meaning of "read as many segments as necessary to free N segments worth of space". The new meaning, combined with the new -n behavior described above, further aids in cleaning storage efficiency as entire segments can be written at once, using as few blocks as possible for segment summaries and inode blocks.
* Make the cleaner take note of segments which could not be cleaned due to error, and not attempt to clean them until they are entirely free of dirty blocks. This prevents the case in which a cleanerd running with -n 1 and without -b (formerly the default) would spin trying repeatedly to clean a corrupt segment, while the remaining space filled and deadlocked the filesystem.
* Update the lfs_cleanerd manual page to describe all the options, including the changes mentioned here (in particular, the -b and -n flags were previously undocumented).
fsck_lfs:
* Check, and optionally fix, lfs_avail (to an exact figure) and lfs_bfree (within a margin of error) in pass 5.
newfs_lfs:
* Reduce the default dlfs_minfreeseg to 1/20 of the total segments.
* Add a warning if the sgs disklabel field is 16 (the default for FFS' cpg, but not usually desirable for LFS' sgs: 5--8 is a better range).
* Change the calculation of lfs_avail and lfs_bfree, corresponding to the kernel changes mentioned above.
mount_lfs:
* Add -N and -b options to pass corresponding -n and -b options to lfs_cleanerd.
* Default to calling lfs_cleanerd with "-b -n 4".
[All of these changes were largely tested in the 1.5 branch, with the idea that they (along with previous un-pulled-up work) could be applied to the branch while it was still in ALPHA2; however my test system has experienced corruption on another filesystem (/dev/console has gone missing :^), and, while I believe this unrelated to the LFS changes, I cannot with good conscience request that the changes be pulled up.]
|
1.5 | 30-May-2000 |
perseant | branches: 1.5.2; Check for cycles in the inode free list, and for free inodes not on the free list.
|
1.4 | 23-May-2000 |
perseant | branches: 1.4.2; Convert to NetBSD source code style
|
1.3 | 16-May-2000 |
perseant | fsck_lfs can now write to the filesystem, allowing it to correct most (though still not all) errors in a damaged lfs. Segment byte accounting is corrected in pass 5. "fsck_lfs -p" will do a partial roll-forward, verifying the checkpoint from the newer superblock. fscknames[] is updated so that fsck knows about fsck_lfs.
|
1.2 | 03-Jul-1999 |
kleink | RCS Id police.
|
1.1 | 18-Mar-1999 |
perseant | Initial checkin of fsck_lfs. This version cannot do any repair (-p flag does nothing, and one of -p or -n is required) but can be useful as a diagnostic tool.
|
1.4.2.1 | 22-Jun-2000 |
minoura | Sync w/ netbsd-1-5-base.
|
1.5.2.2 | 03-Feb-2001 |
he | Pull up revisions 1.7-1.8 (requested by perseant): Report/fix lfs_nclean inconsistencies. Report/fix lfs_dmeta inconsistencies.
|
1.5.2.1 | 14-Sep-2000 |
perseant | Pull up LFS userland changes to correspond with the previous commit's kernel changes (approved by thorpej):
[basesrc/libexec/lfs_cleanerd:] cleanerd.c, 1.20--1.22 (MIN_FREE_SEG -> lfs_minfreeseg ; read bfree/avail from CLEANERINFO ; changes to definition of -n and -b) lfs_cleanerd.8, 1.7 (update man page to current behavior) library.c, 1.16 (fix comment)
[basesrc/sbin/fsck_lfs:] pass5.c, 1.6 (calculate/fix lfs_avail and lfs_bfree)
[basesrc/sbin/newfs_lfs:] config.h, 1.2--1.5 (MINFREE=20, remove FFS cruft ; add DFL_MIN_FREE_SEGS=8 and MINFREE=10 ; set DFL_MIN_FREE_SEGS=10 ; set DFL_MIN_FREE_SEGS=20) extern.h, 1.2 (correct function declaration for make_lfs) newfs.c, 1.4 (add -M flag) lfs.c, 1.13--1.14, 1.16--1.18 (change lfs_bfree initialization ; MIN_FREE_SEG -> lfs_minfreeseg ; only 10 superblocks and print nicely ; correct init calculation of lfs_bfree/lfs_avail to allow fs to fill ; make -N dtrt)
[basesrc/sbin/mount_lfs:] mount_lfs.8, 1.7 (document -N, -b flags) mount_lfs.c, 1.10 (default cleanerd to -b -n 4; add -N, -b flags)
[basesrc/usr.sbin/dumplfs:] dumplfs.c, 1.15 (print only the SEGUSEs specified with -s)
|
1.8.2.2 | 02-Jul-2001 |
perseant | Change disk addressing unit to be the fragment, instead of the disk sector. All quantities in the superblock, inodes, indirect blocks, etc. refer now to this abstract unit (called "fsb" as it is in FFS) instead of disk sectors; as a consequence segment summary blocks have to be multiples of a fragment in size. In v1 filesystems, compatibility code ensures that 1 fsb == 1 sector, regardless of fragment size.
Fragments can now range in size between 512 and 32k; in the event that LFS_LABELPAD (8k) is smaller than the disk address unit size, an extra proto-superblock is kept at 8k from the beginning of the disk, to be used *only* to locate the real superblocks. (Not all of the userland knows about this yet.)
Almost all of this was done not by me, but by joff.
|
1.8.2.1 | 27-Jun-2001 |
perseant | Import of what I've been calling "LFSv2", that is, LFS with some features added that require changes to the on-disk data structures. These include:
- 64-bit time in everything but inodes - User-specified segment offset, and segment size no longer restricted to PO2. - Serial number on segment summaries in addition to timestamp, and a new volume identifier, to make roll-forward feasible without fear of finding old data and thinking it was new.
Although I think this version works at least as well as what's on the trunk, we're not done yet; hence this commit is going in on a branch and not on the trunk. Enhancements that are not here yet include fragment addressing, like FFS does, instead of block addressing.
|
1.9.2.1 | 02-Jun-2002 |
tv | Pull up revision 1.10 (requested by perseant in ticket #131): Re-checksum the superblock whenever it is marked dirty. Tested on alpha.
|
1.14.2.1 | 07-May-2005 |
tron | Apply patch (requested by perseant in ticket #242): * fsck_lfs buffer cache fixes, including PR #29151 * Change fsck_lfs phase 0 message to reflect reality * fsck_lfs: check phase 5 (cleanerinfo accounting) even on roll-forward * Keep better track of the free list during roll-forward, avoiding a core dump * Improve hash table use for fsck_lfs buffer and vnode cache * Document fsck_lfs flag -f, and implement -q * Add resize_lfs, including kernel support * Add LFS to mountd's list of exportable filesystem types * Make the LFS lkm work again [christos@] * Add MP locking to the LFS kernel subsystem * Fix pager_map deadlock in lfs_putpages() * Avoid incomplete file extension that looks like "partial truncation" to fsck * Use lfs_malloc for cleaner malloc, since the cleaner often runs in low-memory conditions. * Use splay trees, not hash table, to track page allocation for write. * Fix mkdir panic on full fs * Fix page accounting leak by counting differently. * Use rightly named structure for lfs_getattr [skrll@] * Cosmetic changes for readability.
|
1.22.8.1 | 06-Nov-2007 |
matt | sync with HEAD
|
1.23.10.1 | 18-May-2008 |
yamt | sync with head.
|
1.23.8.1 | 02-Jun-2008 |
mjf | Sync with HEAD.
|
1.24.26.1 | 23-Jun-2013 |
tls | resync from head
|
1.24.20.1 | 22-May-2014 |
yamt | sync with head.
for a reference, the tree before this commit was tagged as yamt-pagecache-tag8.
this commit was splitted into small chunks to avoid a limitation of cvs. ("Protocol error: too many arguments")
|
1.36.16.1 | 08-Apr-2020 |
martin | Merge changes from current as of 20200406
|
1.51 | 03-Apr-2020 |
joerg | branches: 1.51.8; Avoid common symbols for fsck_lfs.
|
1.50 | 10-Jun-2017 |
pgoyette | branches: 1.50.6; Update inode member i_flag --> i_state to keep up with kernel changes
|
1.49 | 03-Oct-2015 |
dholland | branches: 1.49.8; Fix hardwired 32-bit stuff in fsck: - compute the maximum file size using LFS_BLKPTRSIZE() - use the new IINFO in pass 6 instead of uint32_t pointers - use accessors to read and write indirect blocks
|
1.48 | 01-Sep-2015 |
dholland | Use daddr_t, not ulfs_daddr_t, as the latter's 32 bits wide. Don't use either for on-disk items. Declare external data in header files. Part 3 of 3.
|
1.47 | 01-Sep-2015 |
dholland | Use daddr_t, not ulfs_daddr_t, as the latter's 32 bits wide. Don't use either for on-disk items. Part 2 of 3.
|
1.46 | 01-Sep-2015 |
dholland | Use daddr_t, not ulfs_daddr_t, as the latter's 32 bits wide. Don't use either for on-disk items. Part 1 of 3.
|
1.45 | 01-Sep-2015 |
dholland | The ifile's inode number is constant. (it is always 1)
Therefore, storing the value in the superblock and reading it out again is silly and offers the opportunity for it to become corrupted. So, don't do that (most of the code already didn't) and use the existing constant instead. Initialize new 32-bit superblocks with the value for the sake of old userland programs, but don't keep the value in the 64-bit superblock at all.
(approved by Margo Seltzer)
|
1.44 | 01-Sep-2015 |
dholland | Use the lfs dinode accessors in place of the ufs-derived ones. (Mostly.)
The ufs-derived ones are fake structure member macros, which are gross and not very safe. Also, it seems that a lot of places in the lfs code were using the ffsv1 branch of them unconditionally, and this way it's guaranteed all those places have been updated.
Found while doing this: for non-devices, have getattr produce NODEV in the rdev field instead of leaking the address of the first direct block.
|
1.43 | 19-Aug-2015 |
dholland | Part two of dinodes; use the same union everywhere. (previously the ufs-derived code had things set up slightly different)
Remove a bunch of associated mess.
|
1.42 | 12-Aug-2015 |
dholland | Hack up dinode usage to be 64 vs. 32 as needed. Part 1.
(This part changes the native lfs code; the ufs-derived code already has 64 vs. 32 logic, but as aspects of it are unsafe, and don't entirely interoperate cleanly with the lfs 64/32 stuff, pass 2 will be rehashing that.)
|
1.41 | 12-Aug-2015 |
dholland | Provide 32-bit and 64-bit versions of FINFO.
This also entailed sorting out part of struct segment, as that contains a pointer into the current FINFO data.
|
1.40 | 12-Aug-2015 |
dholland | Make 32-bit and 64-bit versions of SEGSUM. Also fix some of the FINFO handling as it's closely entangled.
|
1.39 | 12-Aug-2015 |
dholland | Add IFILE32 and IFILE64 structures for the on-disk ifile entries. Add and use accessors. There are also a bunch of places that cast and I hope I've found them all...
|
1.38 | 02-Aug-2015 |
dholland | Fix assorted 64 -> 32 truncations in lfs. Also, some minor tidyups and corrections in passing.
|
1.37 | 28-Jul-2015 |
dholland | Add a new lfs header file: lfs_accessors.h.
This contains all the accessor functions and macros out of lfs.h. Add an include of lfs_accessors.h after all uses of lfs.h... except for code that wants to define its own struct lfs-alike that the accessors are supposed to play along with. For these, set STRUCT_LFS and include lfs_accessors.h after the necessary structure has been defined, so that lfs_accessors.h can emit functions in terms of it.
|
1.36 | 24-Jul-2015 |
dholland | More lfs superblock accessors. (This changes the rest of the code over; all the accessors were already added.)
The difference between this commit and the previous one is arbitrary, but the previous one passed the regression tests on its own so I'm keeping it separate to help with any bisections that might be needed in the future.
|
1.35 | 24-Jul-2015 |
dholland | Switch to accessor functions for elements of the LFS on-disk superblock. This will allow switching between 32/64 bit forms on the fly; it will also allow handling LFS_EI reasonably tidily. (That currently doesn't work on the superblock.)
It also gets rid of cpp abuse in the form of fake structure member macros.
Also, instead of doing sleep/wakeup on &lfs_avail and &lfs_nextseg inside the on-disk superblock, add extra elements to the in-memory struct lfs for this. (XXX: these should be changed to condvars, but not right now)
XXX: this migrates a structure needed by the lfs code in libsa (struct salfs) into lfs.h, where it doesn't belong, but for the time being this is necessary in order to allow the accessors (and the various lfs macros and other goop that relies on them) to compile.
|
1.34 | 31-May-2015 |
hannken | Use VFS_PROTOS() for lfs. Rename conflicting struct lfs field "lfs_start" to "lfs_s0addr".
No functional change.
|
1.33 | 29-Mar-2015 |
chopps | - Fix fallout for recent bread() change (removing cred arg).
|
1.32 | 19-Oct-2013 |
christos | fix unused variable warnings.
|
1.31 | 18-Jun-2013 |
christos | Prefix most of the cpp macros with lfs_ and LFS_ to avoid conflicts with ffs. This was done so that boot blocks that want to compile both FFS and LFS in the same file work.
|
1.30 | 08-Jun-2013 |
dholland | dp->di_u.inumber -> dp->di_inumber
Should have been part of the previous changeset that applied that change to lfs.h. I'd quite like to know why the test build I ran didn't trip on this.
|
1.29 | 08-Jun-2013 |
dholland | Tidy up the LFS userland build hacks. Don't use -I${NETBSDSRCDIR}/sys; don't include files other than the exported LFS headers, which are lfs.h, lfs_inode.h, and (for now) lfs_extern.h.
|
1.28 | 08-Jun-2013 |
dholland | Move the dinode (on-disk inode) structures to lfs.h, since they are and will be obviously required by userland tools that need to read the on-disk structures.
Also, DINODE{1,2}_SIZE -> LFS_DINODE{1,2}_SIZE.
|
1.27 | 06-Jun-2013 |
dholland | Cleanups and hacks to make lfs userland stuff build: - lfs_cksum.c doesn't actually need ulfs_inode.h any more. - neither does lfs_itimes.c. - add hacks to fsck_lfs to make it compile. - add hacks to newfs_lfs to make it compile. - fix warning in ulfs_quota.c when quotas are fully disabled (as I guess is happening with the rumpity version)
XXX: This commit adds -I${NETBSDSRCDIR}/sys to the Makefiles for XXX: fsck_lfs, newfs_lfs, and lfs_cleanerd. This needs to be cleaned XXX: up ASAP; but I consider this less problematic in the short term XXX: than spewing ulfs_*.h into /usr/include.
|
1.26 | 06-Jun-2013 |
dholland | ufs -> ulfs for fsck_lfs.
|
1.25 | 22-Jan-2013 |
dholland | Stuff UFS_ in front of a few of ufs's symbols to reduce namespace pollution. Specifically: ROOTINO -> UFS_ROOTINO WINO -> UFS_WINO NXADDR -> UFS_NXADDR NDADDR -> UFS_NDADDR NIADDR -> UFS_NIADDR MAXSYMLINKLEN -> UFS_MAXSYMLINKLEN MAXSYMLINKLEN_UFS[12] -> UFS[12]_MAXSYMLINKLEN (for consistency)
Sort out ext2fs's misuse of NDADDR and NIADDR; fortunately, these have the same values in ext2fs and ffs.
No functional change intended.
|
1.24 | 05-Jan-2012 |
perseant | branches: 1.24.6; Correct fragment extension calculation in pass6, to avoid putting negative block counts on inodes during roll-forward.
|
1.23 | 16-Feb-2010 |
mlelstv | branches: 1.23.6; Three changes in a single commit.
- drop the notion of frags (LFS fragments) vs fsb (FFS fragments) The code uses a complicated unity function that just makes the code difficult to understand.
- support larger sector sizes. Fix disk address computations to use DEV_BSIZE in the kernel as required by device drivers and to use sector sizes in userland.
- Fix several locking bugs in lfs_bio.c and lfs_subr.c.
|
1.22 | 16-May-2008 |
hannken | Make sure all cached buffers with valid, not yet written data have been run through copy-on-write. Call fscow_run() with valid data where possible.
The LP_UFSCOW hack is no longer needed to protect ffs_copyonwrite() against endless recursion.
- Add a flag B_MODIFY to bread(), breada() and breadn(). If set the caller intends to modify the buffer returned.
- Always run copy-on-write on buffers returned from ffs_balloc().
- Add new function ffs_getblk() that gets a buffer, assigns a new blkno, may clear the buffer and runs copy-on-write. Process possible errors from getblk() or fscow_run(). Part of PR kern/38664.
Welcome to 4.99.63
Reviewed by: YAMAMOTO Takashi <yamt@netbsd.org>
|
1.21 | 28-Apr-2008 |
martin | branches: 1.21.2; Remove clause 3 and 4 from TNF licenses
|
1.20 | 10-Oct-2007 |
ad | branches: 1.20.8; 1.20.10; Merge from vmlocking:
- Split vnode::v_flag into three fields, depending on field locking. - simple_lock -> kmutex in a few places. - Fix some simple locking problems.
|
1.19 | 08-Oct-2007 |
ad | Give brelse() a second argument so that it matches the kernel. fsck_lfs now compiles again.
|
1.18 | 09-Nov-2006 |
christos | branches: 1.18.8; Fix malloc/realloc/calloc issues: always check and exit, use EEXIT instead of 8.
|
1.17 | 16-Oct-2006 |
christos | comment out/delete impossible code
|
1.16 | 01-Sep-2006 |
perseant | Several fixes to improve the reliability of the roll-forward agent. Also, note "properly orphaned" files as distinct from corrupted files.
|
1.15 | 19-Jul-2006 |
perseant | On-disk inode accounting fix for roll-forward.
|
1.14 | 19-Jul-2006 |
perseant | Don't doubly free an inode remove_ino() during roll-forward.
|
1.13 | 18-Jul-2006 |
perseant | Quell uninitialized-variable warning that appeared when compiling for macppc.
|
1.12 | 18-Jul-2006 |
perseant | Various improvements to fsck_lfs, to wit:
* Add lfs_balloc capability to the lfs library. * Extend the Ifile if we run out of free inodes when creating lost+found. * Don't roll forward if we have allocated a lost+found, to avoid conflicts when adding new files in roll-forward. * Make some messages slightly more verbose (e.g. include inode number, and use pwarn() instead of printf() so the messages include the device name when preening). * Change superblock detection/avoidance to use the offset table in the primary superblock, rather than looking at the contents. * Be more verbose about various operations when passed the -d flag, especially roll-forward. * Be more careful about dirops during roll forward, since the cleaner can sometimes write blocks from dirop vnodes. Detect and avoid this problem. * Always check the free list, even if given -i; if we're going to write it we have to check it first. * Mark inodes dirty when blocks are found during roll forward, so the inodes are written with the new block locations. * Update size of inodes if blocks beyond EOF are found during roll forward. * Fix segment accounting for blocks and inodes found during roll forward. * Report statistics on roll forward: how many new/deleted/moved files and how many updated blocks (or "nothing new"). * Don't care if the device being checked is really a device, if we have been passed the -f flag (to facilitate automated testing). * When writing to the disk, use the current time in the segment headers rathern than time 0. * When passed the -i flag, locate the partial segment containing the Ifile inode and use that to calculate lfs_offset, lfs_curseg, lfs_nextseg. (Again for automated testing.)
|
1.11 | 17-Apr-2006 |
perseant | Remove the free list ordering/disordering code, since the kernel now keeps the list in order (ordering it on mount).
Regularize error messages: these are now all in ALL CAPS, with all hex numbers (not reported in caps) prefixed by 0x. (The non-fsck-specific messages are an exception to this all-caps rule.)
|
1.10 | 13-Sep-2005 |
christos | rename lfs.h to lfs_user.h so that it does not conflict.
|
1.9 | 19-Aug-2005 |
christos | 64 bit inode changes
|
1.8 | 08-Jun-2005 |
perseant | Use the correct method to create a new inode, when we allocate lost+found.
Correct uninitialized variable issues in pass6.c and dir.c (PR#30411 and PR#30394, respectively).
|
1.7 | 23-Apr-2005 |
perseant | Check parts of pass 5 even if only rolling forward. We can't check the true segment holdings against the blocks held by the inodes, but we can still check the cleanerinfo data against the segment table.
|
1.6 | 12-Apr-2005 |
perseant | Take care preserving the integrity of the free list during roll forward. Also, avoid freeing a deleted vnode twice when a file is remove during roll forward.
|
1.5 | 11-Apr-2005 |
perseant | Be more efficient with the hash tables for the buffer and vnode caches.
Note that roll-forward can add more inodes to the filesystem; don't overflow the tables but reallocate them.
|
1.4 | 25-Mar-2005 |
perseant | "#define lfs_devvp lfs_unlockvp" for readability, since that's what we use it for in fsck_lfs/newfs_lfs.
|
1.3 | 02-Apr-2003 |
fvdl | branches: 1.3.6; Add support for UFS2. UFS2 is an enhanced FFS, adding support for 64 bit block pointers, extended attribute storage, and a few other things.
This commit does not yet include the code to manipulate the extended storage (for e.g. ACLs), this will be done later.
Originally written by Kirk McKusick and Network Associates Laboratories for FreeBSD.
|
1.2 | 29-Mar-2003 |
perseant | Fix some accounting problems when preening, since preening skips phases 1-4 entirely. Make preen run phase 0, since the Ifile is so important and the test so quick.
|
1.1 | 28-Mar-2003 |
perseant | Add working writing ability to fsck_lfs, including roll-forward, based on a partial-segment writer ported from the kernel.
|
1.3.6.1 | 07-May-2005 |
tron | Apply patch (requested by perseant in ticket #242): * fsck_lfs buffer cache fixes, including PR #29151 * Change fsck_lfs phase 0 message to reflect reality * fsck_lfs: check phase 5 (cleanerinfo accounting) even on roll-forward * Keep better track of the free list during roll-forward, avoiding a core dump * Improve hash table use for fsck_lfs buffer and vnode cache * Document fsck_lfs flag -f, and implement -q * Add resize_lfs, including kernel support * Add LFS to mountd's list of exportable filesystem types * Make the LFS lkm work again [christos@] * Add MP locking to the LFS kernel subsystem * Fix pager_map deadlock in lfs_putpages() * Avoid incomplete file extension that looks like "partial truncation" to fsck * Use lfs_malloc for cleaner malloc, since the cleaner often runs in low-memory conditions. * Use splay trees, not hash table, to track page allocation for write. * Fix mkdir panic on full fs * Fix page accounting leak by counting differently. * Use rightly named structure for lfs_getattr [skrll@] * Cosmetic changes for readability.
|
1.18.8.1 | 06-Nov-2007 |
matt | sync with HEAD
|
1.20.10.1 | 18-May-2008 |
yamt | sync with head.
|
1.20.8.1 | 02-Jun-2008 |
mjf | Sync with HEAD.
|
1.21.2.1 | 23-Jun-2008 |
wrstuden | Sync w/ -current. 34 merge conflicts to follow.
|
1.23.6.3 | 22-May-2014 |
yamt | sync with head.
for a reference, the tree before this commit was tagged as yamt-pagecache-tag8.
this commit was splitted into small chunks to avoid a limitation of cvs. ("Protocol error: too many arguments")
|
1.23.6.2 | 23-Jan-2013 |
yamt | sync with head
|
1.23.6.1 | 17-Apr-2012 |
yamt | sync with head
|
1.24.6.3 | 20-Aug-2014 |
tls | Rebase to HEAD as of a few days ago.
|
1.24.6.2 | 23-Jun-2013 |
tls | resync from head
|
1.24.6.1 | 25-Feb-2013 |
tls | resync with head
|
1.49.8.1 | 30-Oct-2017 |
snj | Pull up following revision(s) (requested by maya in ticket #330): sbin/fsck_lfs/inode.c: 1.69 sbin/fsck_lfs/lfs.c: 1.73 sbin/fsck_lfs/pass6.c: 1.50 sbin/fsck_lfs/segwrite.c: 1.46 sys/ufs/lfs/lfs.h: 1.202-1.203 sys/ufs/lfs/lfs_accessors.h: 1.48 sys/ufs/lfs/lfs_alloc.c: 1.136-1.137 sys/ufs/lfs/lfs_balloc.c: 1.94 sys/ufs/lfs/lfs_bio.c: 1.141 sys/ufs/lfs/lfs_extern.h: 1.113 sys/ufs/lfs/lfs_inode.c: 1.156-1.157 sys/ufs/lfs/lfs_inode.h: 1.20, 1.21, 1.23 sys/ufs/lfs/lfs_itimes.c: 1.20 sys/ufs/lfs/lfs_pages.c: 1.13-1.15 sys/ufs/lfs/lfs_rename.c: 1.22 sys/ufs/lfs/lfs_segment.c: 1.270-1.275 sys/ufs/lfs/lfs_subr.c: 1.94-1.97 sys/ufs/lfs/lfs_syscalls.c: 1.175 sys/ufs/lfs/lfs_vfsops.c: 1.360 sys/ufs/lfs/lfs_vnops.c: 1.316-1.321 sys/ufs/lfs/ulfs_inode.c: 1.20 sys/ufs/lfs/ulfs_inode.h: 1.24 sys/ufs/lfs/ulfs_lookup.c: 1.41 sys/ufs/lfs/ulfs_quota2.c: 1.31 sys/ufs/lfs/ulfs_readwrite.c: 1.24 sys/ufs/lfs/ulfs_vnops.c: 1.49-1.50 Update inode member i_flag --> i_state to keep up with kernel changes Move definition of IN_ALLMOD near the flag it's a mask for. Now we can see that it doesn't match all the flags, but changing that will require more careful thought. Correct confusion between i_flag and i_flags These will have to be renamed. Spotted by Riastradh, thanks! Add an XXX about the missing flags so it's not buried in a commit message. now the XXX count for LFS is 260 Rename i_flag to i_state. The similarity to i_flags has previously caused errors. Use continue to denote the no-op loop to match netbsd style newline for extra clarity. It isn't safe to drain dirops with seglock held, it'll deadlock if there are any dirops. drain before grabbing seglock. lfs_dirops == 0 is always true (as we already drained dirops), so omit that part of the comparison. Fixes a lot of LFS deadlocks. PR kern/52301 Many thanks to dholland for help analyzing coredumps Ifdef out KDASSERT which fires on my machine. Deduplicate sanity check that seglock is held on segunlock Revert r1.272 fix to PR kern/52301, the performance hit is making things unusable. change lfs_nextsegsleep and lfs_allclean_wakeup to use condvar XXX had to use lfs_lock in lfs_segwait, removed kernel_lock, is this appropriate? fix buffer overflow/KASSERT when cookies are supplied lfs no longer uses the ffs-style struct direct, use the correct minimum size from dholland XXX more wrong Consistently use {,UN}MARK_VNODE macros rather than function calls. Not much point doing anything after a panic call Ask some question about the code in a XXX comment XXX question our double-flushing of dirops Fix typo in comment
|
1.50.6.1 | 08-Apr-2020 |
martin | Merge changes from current as of 20200406
|
1.51.8.2 | 06-Sep-2025 |
perseant | Separate buffer cache code between fsck_lfs and fsck_exfatfs. This may be reunited later, probably as a library.
|
1.51.8.1 | 29-Jun-2024 |
perseant | Implementation of exFAT filesystem, with compilation conditional on MKEXFATFS make variable.
|
1.48 | 14-May-2020 |
msaitoh | branches: 1.48.8; Remove extra semicolon.
|
1.47 | 03-Apr-2020 |
joerg | Avoid common symbols for fsck_lfs.
|
1.46 | 10-Jun-2017 |
pgoyette | branches: 1.46.6; Update inode member i_flag --> i_state to keep up with kernel changes
|
1.45 | 03-Oct-2015 |
dholland | branches: 1.45.8; Use IINFO in lfs_writeinode(). (both the kernel and the userland copies)
|
1.44 | 01-Sep-2015 |
dholland | Use daddr_t, not ulfs_daddr_t, as the latter's 32 bits wide. Don't use either for on-disk items. Declare external data in header files. Part 3 of 3.
|
1.43 | 01-Sep-2015 |
dholland | Use the lfs dinode accessors in place of the ufs-derived ones. (Mostly.)
The ufs-derived ones are fake structure member macros, which are gross and not very safe. Also, it seems that a lot of places in the lfs code were using the ffsv1 branch of them unconditionally, and this way it's guaranteed all those places have been updated.
Found while doing this: for non-devices, have getattr produce NODEV in the rdev field instead of leaking the address of the first direct block.
|
1.42 | 19-Aug-2015 |
dholland | Part two of dinodes; use the same union everywhere. (previously the ufs-derived code had things set up slightly different)
Remove a bunch of associated mess.
|
1.41 | 12-Aug-2015 |
dholland | Hack up dinode usage to be 64 vs. 32 as needed. Part 1.
(This part changes the native lfs code; the ufs-derived code already has 64 vs. 32 logic, but as aspects of it are unsafe, and don't entirely interoperate cleanly with the lfs 64/32 stuff, pass 2 will be rehashing that.)
|
1.40 | 12-Aug-2015 |
dholland | Provide 32-bit and 64-bit versions of FINFO.
This also entailed sorting out part of struct segment, as that contains a pointer into the current FINFO data.
|
1.39 | 12-Aug-2015 |
dholland | Make 32-bit and 64-bit versions of SEGSUM. Also fix some of the FINFO handling as it's closely entangled.
|
1.38 | 12-Aug-2015 |
dholland | Add IFILE32 and IFILE64 structures for the on-disk ifile entries. Add and use accessors. There are also a bunch of places that cast and I hope I've found them all...
|
1.37 | 12-Aug-2015 |
dholland | Make 32-bit and 64-bit versions of CLEANERINFO.
XXX: while this is written to disk, it seems like much of it would XXX: be better set up as a commpage shared with the cleaner.
|
1.36 | 02-Aug-2015 |
dholland | Add a (draft) 64-bit superblock. Make things build again.
Add pieces of support for using both superblock types where convenient, and specifically to the superblock accessors, but don't actually enable it anywhere.
First substantive step on PR 50000.
|
1.35 | 02-Aug-2015 |
dholland | Use accessor functions for the version field of the lfs superblock. I thought at first maybe the cases that test the version should be rolled into the accessors, but on the whole I think the conclusion on that is no.
|
1.34 | 28-Jul-2015 |
dholland | Add a new lfs header file: lfs_accessors.h.
This contains all the accessor functions and macros out of lfs.h. Add an include of lfs_accessors.h after all uses of lfs.h... except for code that wants to define its own struct lfs-alike that the accessors are supposed to play along with. For these, set STRUCT_LFS and include lfs_accessors.h after the necessary structure has been defined, so that lfs_accessors.h can emit functions in terms of it.
|
1.33 | 24-Jul-2015 |
dholland | More lfs superblock accessors. (This changes the rest of the code over; all the accessors were already added.)
The difference between this commit and the previous one is arbitrary, but the previous one passed the regression tests on its own so I'm keeping it separate to help with any bisections that might be needed in the future.
|
1.32 | 24-Jul-2015 |
dholland | Switch to accessor functions for elements of the LFS on-disk superblock. This will allow switching between 32/64 bit forms on the fly; it will also allow handling LFS_EI reasonably tidily. (That currently doesn't work on the superblock.)
It also gets rid of cpp abuse in the form of fake structure member macros.
Also, instead of doing sleep/wakeup on &lfs_avail and &lfs_nextseg inside the on-disk superblock, add extra elements to the in-memory struct lfs for this. (XXX: these should be changed to condvars, but not right now)
XXX: this migrates a structure needed by the lfs code in libsa (struct salfs) into lfs.h, where it doesn't belong, but for the time being this is necessary in order to allow the accessors (and the various lfs macros and other goop that relies on them) to compile.
|
1.31 | 17-Jun-2015 |
christos | add missing ;
|
1.30 | 16-Jun-2015 |
christos | fix error messages containing \n
|
1.29 | 31-May-2015 |
hannken | Use VFS_PROTOS() for lfs. Rename conflicting struct lfs field "lfs_start" to "lfs_s0addr".
No functional change.
|
1.28 | 29-Mar-2015 |
chopps | - Fix fallout for recent bread() change (removing cred arg).
|
1.27 | 19-Oct-2013 |
christos | fix unused variable warnings.
|
1.26 | 18-Jun-2013 |
christos | Prefix most of the cpp macros with lfs_ and LFS_ to avoid conflicts with ffs. This was done so that boot blocks that want to compile both FFS and LFS in the same file work.
|
1.25 | 08-Jun-2013 |
dholland | Tidy up the LFS userland build hacks. Don't use -I${NETBSDSRCDIR}/sys; don't include files other than the exported LFS headers, which are lfs.h, lfs_inode.h, and (for now) lfs_extern.h.
|
1.24 | 08-Jun-2013 |
dholland | Move the dinode (on-disk inode) structures to lfs.h, since they are and will be obviously required by userland tools that need to read the on-disk structures.
Also, DINODE{1,2}_SIZE -> LFS_DINODE{1,2}_SIZE.
|
1.23 | 06-Jun-2013 |
dholland | Cleanups and hacks to make lfs userland stuff build: - lfs_cksum.c doesn't actually need ulfs_inode.h any more. - neither does lfs_itimes.c. - add hacks to fsck_lfs to make it compile. - add hacks to newfs_lfs to make it compile. - fix warning in ulfs_quota.c when quotas are fully disabled (as I guess is happening with the rumpity version)
XXX: This commit adds -I${NETBSDSRCDIR}/sys to the Makefiles for XXX: fsck_lfs, newfs_lfs, and lfs_cleanerd. This needs to be cleaned XXX: up ASAP; but I consider this less problematic in the short term XXX: than spewing ulfs_*.h into /usr/include.
|
1.22 | 06-Jun-2013 |
dholland | ufs -> ulfs for fsck_lfs.
|
1.21 | 22-Jan-2013 |
dholland | Stuff UFS_ in front of a few of ufs's symbols to reduce namespace pollution. Specifically: ROOTINO -> UFS_ROOTINO WINO -> UFS_WINO NXADDR -> UFS_NXADDR NDADDR -> UFS_NDADDR NIADDR -> UFS_NIADDR MAXSYMLINKLEN -> UFS_MAXSYMLINKLEN MAXSYMLINKLEN_UFS[12] -> UFS[12]_MAXSYMLINKLEN (for consistency)
Sort out ext2fs's misuse of NDADDR and NIADDR; fortunately, these have the same values in ext2fs and ffs.
No functional change intended.
|
1.20 | 16-Feb-2010 |
mlelstv | branches: 1.20.6; 1.20.12; Three changes in a single commit.
- drop the notion of frags (LFS fragments) vs fsb (FFS fragments) The code uses a complicated unity function that just makes the code difficult to understand.
- support larger sector sizes. Fix disk address computations to use DEV_BSIZE in the kernel as required by device drivers and to use sector sizes in userland.
- Fix several locking bugs in lfs_bio.c and lfs_subr.c.
|
1.19 | 16-May-2008 |
hannken | Make sure all cached buffers with valid, not yet written data have been run through copy-on-write. Call fscow_run() with valid data where possible.
The LP_UFSCOW hack is no longer needed to protect ffs_copyonwrite() against endless recursion.
- Add a flag B_MODIFY to bread(), breada() and breadn(). If set the caller intends to modify the buffer returned.
- Always run copy-on-write on buffers returned from ffs_balloc().
- Add new function ffs_getblk() that gets a buffer, assigns a new blkno, may clear the buffer and runs copy-on-write. Process possible errors from getblk() or fscow_run(). Part of PR kern/38664.
Welcome to 4.99.63
Reviewed by: YAMAMOTO Takashi <yamt@netbsd.org>
|
1.18 | 28-Apr-2008 |
martin | branches: 1.18.2; Remove clause 3 and 4 from TNF licenses
|
1.17 | 10-Oct-2007 |
ad | branches: 1.17.8; 1.17.10; Merge from vmlocking:
- Split vnode::v_flag into three fields, depending on field locking. - simple_lock -> kmutex in a few places. - Fix some simple locking problems.
|
1.16 | 08-Oct-2007 |
ad | Give brelse() a second argument so that it matches the kernel. fsck_lfs now compiles again.
|
1.15 | 09-Nov-2006 |
christos | branches: 1.15.8; Fix malloc/realloc/calloc issues: always check and exit, use EEXIT instead of 8.
|
1.14 | 01-Sep-2006 |
perseant | Several fixes to improve the reliability of the roll-forward agent. Also, note "properly orphaned" files as distinct from corrupted files.
|
1.13 | 18-Jul-2006 |
perseant | Various improvements to fsck_lfs, to wit:
* Add lfs_balloc capability to the lfs library. * Extend the Ifile if we run out of free inodes when creating lost+found. * Don't roll forward if we have allocated a lost+found, to avoid conflicts when adding new files in roll-forward. * Make some messages slightly more verbose (e.g. include inode number, and use pwarn() instead of printf() so the messages include the device name when preening). * Change superblock detection/avoidance to use the offset table in the primary superblock, rather than looking at the contents. * Be more verbose about various operations when passed the -d flag, especially roll-forward. * Be more careful about dirops during roll forward, since the cleaner can sometimes write blocks from dirop vnodes. Detect and avoid this problem. * Always check the free list, even if given -i; if we're going to write it we have to check it first. * Mark inodes dirty when blocks are found during roll forward, so the inodes are written with the new block locations. * Update size of inodes if blocks beyond EOF are found during roll forward. * Fix segment accounting for blocks and inodes found during roll forward. * Report statistics on roll forward: how many new/deleted/moved files and how many updated blocks (or "nothing new"). * Don't care if the device being checked is really a device, if we have been passed the -f flag (to facilitate automated testing). * When writing to the disk, use the current time in the segment headers rathern than time 0. * When passed the -i flag, locate the partial segment containing the Ifile inode and use that to calculate lfs_offset, lfs_curseg, lfs_nextseg. (Again for automated testing.)
|
1.12 | 23-May-2006 |
jnemeth | Coverity CID 3447: Add extraneous checks to shut up Coverity.
|
1.11 | 17-Mar-2006 |
rumble | Check for allocation failures in malloc, calloc, realloc, asprintf, and vasprintf and try to handle them.
|
1.10 | 13-Sep-2005 |
christos | rename lfs.h to lfs_user.h so that it does not conflict.
|
1.9 | 01-Apr-2005 |
he | Move the definition of simple_lock() and simple_unlock() to a common header, since more of the LFS macros now use these functions. Since we're outside of the kernel, these are defined to be empty.
|
1.8 | 25-Mar-2005 |
perseant | "#define lfs_devvp lfs_unlockvp" for readability, since that's what we use it for in fsck_lfs/newfs_lfs.
|
1.7 | 26-Feb-2005 |
perseant | branches: 1.7.2; Various minor LFS improvements:
* Extend the lfs library from fsck_lfs(8) so that it can be used with a not-yet-existent LFS. Make newfs_lfs(8) use this library, so it can create LFSs whose Ifile is larger than one segment. * Make newfs_lfs(8) use strsuftoi64() for its arguments, a la newfs(8). * Make fsck_lfs(8) respect the "file system is clean" flag. * Don't let fsck_lfs(8) think it has dirty blocks when invoked with the -n flag.
|
1.6 | 24-Dec-2003 |
heas | branches: 1.6.4; Check result of malloc(). reviewed by Martin.
|
1.5 | 07-Aug-2003 |
agc | Move UCB-licensed code from 4-clause to 3-clause licence.
Patches provided by Joel Baker in PR 22308, verified by myself.
|
1.4 | 12-Jul-2003 |
yamt | don't use uninitialized variables. PR/22123 (Izumi Tsutsui)
|
1.3 | 02-Apr-2003 |
fvdl | Add support for UFS2. UFS2 is an enhanced FFS, adding support for 64 bit block pointers, extended attribute storage, and a few other things.
This commit does not yet include the code to manipulate the extended storage (for e.g. ACLs), this will be done later.
Originally written by Kirk McKusick and Network Associates Laboratories for FreeBSD.
|
1.2 | 31-Mar-2003 |
perseant | Check inode free list tail pointer as well as head pointer, and write both into the CLEANERINFO block of the Ifile as well as into the superblock. Make preen update both superblocks.
|
1.1 | 28-Mar-2003 |
perseant | Add working writing ability to fsck_lfs, including roll-forward, based on a partial-segment writer ported from the kernel.
|
1.6.4.1 | 10-May-2005 |
riz | Pull up the following revisions (requested by perseant in ticket #1281):
1.8 sys/ufs/lfs/TODO 1.75 sys/ufs/lfs/lfs.h (via patch) 1.74 sys/ufs/lfs/lfs_alloc.c (via patch) 1.49, 1.51 sys/ufs/lfs/lfs_balloc.c (1.51 via patch) 1.78 sys/ufs/lfs/lfs_bio.c 1.62 sys/ufs/lfs/lfs_extern.h (via patch) 1.156 sys/ufs/lfs/lfs_segment.c (via patch) 1.48 sys/ufs/lfs/lfs_subr.c 1.101 sys/ufs/lfs/lfs_syscalls.c 1.163 sys/ufs/lfs/lfs_vfsops.c (via patch) 1.134 sys/ufs/lfs/lfs_vnops.c (via patch) 1.61 sys/ufs/ufs/ufs_readwrite.c (via patch)
1.20 libexec/lfs_cleanerd/clean.h (via patch) 1.52 libexec/lfs_cleanerd/cleanerd.c (via patch) 1.41 libexec/lfs_cleanerd/library.c (via patch)
1.4 regress/sys/fs/lfs/newfs_fsck/Makefile 1.2 regress/sys/fs/lfs/newfs_fsck/mkfs_mount 1.2 regress/sys/fs/lfs/newfs_fsck/smallfiles 1.3 sbin/fsck_lfs/bufcache.c 1.3 sbin/fsck_lfs/bufcache.h 1.3 sbin/fsck_lfs/lfs.h 1.8 sbin/fsck_lfs/lfs.c (via patch) 1.8 sbin/fsck_lfs/pass3.c (via patch) 1.18 sbin/fsck_lfs/pass0.c (via patch) 1.18 sbin/fsck_lfs/utilities.c (via patch) 1.7 sbin/fsck_lfs/segwrite.c 1.19 sbin/fsck_lfs/setup.c (via patch) 1.3 sbin/newfs_lfs/Makefile 0 sbin/newfs_lfs/lfs.c (yes, remove it) 1.1 sbin/newfs_lfs/make_lfs.c 1.15 sbin/newfs_lfs/newfs.c (via patch)
Various minor LFS improvements.
Kernel:
* Note when lfs_putpages(9) thinks it is not going to be writing any pages before calling genfs_putpages(9). This prevents a situation in which blocks can be queued for writing without a segment header. * Correct computation of NRESERVE(), though it is still a gross overestimate in most cases. Note that if NRESERVE() is too high, it may be impossible to create files on the filesystem. We catch this case on filesystem mount and refuse to mount r/w. * Allow filesystems to be mounted whose block size is == MAXBSIZE. * Somewhere along the line, ufs_bmaparray(9) started mangling UNWRITTEN entries in indirect blocks again, triggering a failed assertion "daddr <= LFS_MAX_DADDR". Explicitly convert to and from int32_t to correct this. Should fix PR #29045. * Add a high-water mark for the number of dirty pages any given LFS can hold before triggering a flush. This is settable by sysctl, but off (zero) by default. * Be more careful about the MAX_BYTES and MAX_BUFS computations so we shouldn't see "please increase to at least zero" messages. * Note that VBLK and VCHR vnodes can have nonzero values in di_db[0] even though their v_size == 0. Don't panic when we see this. Fixes PR #26680. * Change lfs_bfree to a signed quantity. The manner in which it is processed before being passed to the cleaner means that sometimes it may drop below zero, and the cleaner must be aware of this. * Never report bfree < 0 (or higher than lfs_dsize) through lfs_statfs(9). This prevents df(1) from ever telling us that our full filesystems have 16TB free. * Account space allocated through lfs_balloc(9) that does not have associated buffer headers, so that the pagedaemon doesn't run us out of segments. * Return ENOSPC from lfs_balloc(9) when bfree drops to zero. * Address a deadlock in lfs_bmapv/lfs_markv when the filesystem is being unmounted. Because vfs_busy() is a shared lock, and lfs_bmapv/lfs_markv mark the filesystem vfs_busy(), the cleaner can be holding the lock that umount() is blocking on, then try to vfs_busy() again in getnewvnode().
cleaner:
* Adapt lfs_cleanerd to use the fcntl call to get the Ifile filehandle, so it need not be in the namespace. * Make lfs_cleanerd be more careful when there are very few available segments. * Make lfs_cleanerd less verbose when the filesystem is unmounted.
newfs_lfs, fsck_lfs, and regression:
* Extend the lfs library from fsck_lfs(8) so that it can be used with a not-yet-existent LFS. Make newfs_lfs(8) use this library, so it can create LFSs whose Ifile is larger than one segment. Addresses PR #11110. * Make newfs_lfs(8) use strsuftoi64() for its arguments, a la newfs(8). * Make fsck_lfs(8) respect the "file system is clean" flag. * Don't let fsck_lfs(8) think it has dirty blocks when invoked with the -n flag. * Remove the Ifile from the filesystem namespace. The cleaner now uses a fcntl call on the root inode to find the Ifile filehandle. (As a side-effect, addresses PR #29144.)
|
1.7.2.1 | 07-May-2005 |
tron | Apply patch (requested by perseant in ticket #242): * fsck_lfs buffer cache fixes, including PR #29151 * Change fsck_lfs phase 0 message to reflect reality * fsck_lfs: check phase 5 (cleanerinfo accounting) even on roll-forward * Keep better track of the free list during roll-forward, avoiding a core dump * Improve hash table use for fsck_lfs buffer and vnode cache * Document fsck_lfs flag -f, and implement -q * Add resize_lfs, including kernel support * Add LFS to mountd's list of exportable filesystem types * Make the LFS lkm work again [christos@] * Add MP locking to the LFS kernel subsystem * Fix pager_map deadlock in lfs_putpages() * Avoid incomplete file extension that looks like "partial truncation" to fsck * Use lfs_malloc for cleaner malloc, since the cleaner often runs in low-memory conditions. * Use splay trees, not hash table, to track page allocation for write. * Fix mkdir panic on full fs * Fix page accounting leak by counting differently. * Use rightly named structure for lfs_getattr [skrll@] * Cosmetic changes for readability.
|
1.15.8.1 | 06-Nov-2007 |
matt | sync with HEAD
|
1.17.10.1 | 18-May-2008 |
yamt | sync with head.
|
1.17.8.1 | 02-Jun-2008 |
mjf | Sync with HEAD.
|
1.18.2.1 | 23-Jun-2008 |
wrstuden | Sync w/ -current. 34 merge conflicts to follow.
|
1.20.12.3 | 20-Aug-2014 |
tls | Rebase to HEAD as of a few days ago.
|
1.20.12.2 | 23-Jun-2013 |
tls | resync from head
|
1.20.12.1 | 25-Feb-2013 |
tls | resync with head
|
1.20.6.2 | 22-May-2014 |
yamt | sync with head.
for a reference, the tree before this commit was tagged as yamt-pagecache-tag8.
this commit was splitted into small chunks to avoid a limitation of cvs. ("Protocol error: too many arguments")
|
1.20.6.1 | 23-Jan-2013 |
yamt | sync with head
|
1.45.8.1 | 30-Oct-2017 |
snj | Pull up following revision(s) (requested by maya in ticket #330): sbin/fsck_lfs/inode.c: 1.69 sbin/fsck_lfs/lfs.c: 1.73 sbin/fsck_lfs/pass6.c: 1.50 sbin/fsck_lfs/segwrite.c: 1.46 sys/ufs/lfs/lfs.h: 1.202-1.203 sys/ufs/lfs/lfs_accessors.h: 1.48 sys/ufs/lfs/lfs_alloc.c: 1.136-1.137 sys/ufs/lfs/lfs_balloc.c: 1.94 sys/ufs/lfs/lfs_bio.c: 1.141 sys/ufs/lfs/lfs_extern.h: 1.113 sys/ufs/lfs/lfs_inode.c: 1.156-1.157 sys/ufs/lfs/lfs_inode.h: 1.20, 1.21, 1.23 sys/ufs/lfs/lfs_itimes.c: 1.20 sys/ufs/lfs/lfs_pages.c: 1.13-1.15 sys/ufs/lfs/lfs_rename.c: 1.22 sys/ufs/lfs/lfs_segment.c: 1.270-1.275 sys/ufs/lfs/lfs_subr.c: 1.94-1.97 sys/ufs/lfs/lfs_syscalls.c: 1.175 sys/ufs/lfs/lfs_vfsops.c: 1.360 sys/ufs/lfs/lfs_vnops.c: 1.316-1.321 sys/ufs/lfs/ulfs_inode.c: 1.20 sys/ufs/lfs/ulfs_inode.h: 1.24 sys/ufs/lfs/ulfs_lookup.c: 1.41 sys/ufs/lfs/ulfs_quota2.c: 1.31 sys/ufs/lfs/ulfs_readwrite.c: 1.24 sys/ufs/lfs/ulfs_vnops.c: 1.49-1.50 Update inode member i_flag --> i_state to keep up with kernel changes Move definition of IN_ALLMOD near the flag it's a mask for. Now we can see that it doesn't match all the flags, but changing that will require more careful thought. Correct confusion between i_flag and i_flags These will have to be renamed. Spotted by Riastradh, thanks! Add an XXX about the missing flags so it's not buried in a commit message. now the XXX count for LFS is 260 Rename i_flag to i_state. The similarity to i_flags has previously caused errors. Use continue to denote the no-op loop to match netbsd style newline for extra clarity. It isn't safe to drain dirops with seglock held, it'll deadlock if there are any dirops. drain before grabbing seglock. lfs_dirops == 0 is always true (as we already drained dirops), so omit that part of the comparison. Fixes a lot of LFS deadlocks. PR kern/52301 Many thanks to dholland for help analyzing coredumps Ifdef out KDASSERT which fires on my machine. Deduplicate sanity check that seglock is held on segunlock Revert r1.272 fix to PR kern/52301, the performance hit is making things unusable. change lfs_nextsegsleep and lfs_allclean_wakeup to use condvar XXX had to use lfs_lock in lfs_segwait, removed kernel_lock, is this appropriate? fix buffer overflow/KASSERT when cookies are supplied lfs no longer uses the ffs-style struct direct, use the correct minimum size from dholland XXX more wrong Consistently use {,UN}MARK_VNODE macros rather than function calls. Not much point doing anything after a panic call Ask some question about the code in a XXX comment XXX question our double-flushing of dirops Fix typo in comment
|
1.46.6.1 | 08-Apr-2020 |
martin | Merge changes from current as of 20200406
|
1.48.8.2 | 06-Sep-2025 |
perseant | Separate buffer cache code between fsck_lfs and fsck_exfatfs. This may be reunited later, probably as a library.
|
1.48.8.1 | 29-Jun-2024 |
perseant | Implementation of exFAT filesystem, with compilation conditional on MKEXFATFS make variable.
|
1.7 | 01-Sep-2015 |
dholland | Use daddr_t, not ulfs_daddr_t, as the latter's 32 bits wide. Don't use either for on-disk items. Declare external data in header files. Part 3 of 3.
|
1.6 | 12-Aug-2015 |
dholland | Provide 32-bit and 64-bit versions of FINFO.
This also entailed sorting out part of struct segment, as that contains a pointer into the current FINFO data.
|
1.5 | 24-Jul-2015 |
dholland | Switch to accessor functions for elements of the LFS on-disk superblock. This will allow switching between 32/64 bit forms on the fly; it will also allow handling LFS_EI reasonably tidily. (That currently doesn't work on the superblock.)
It also gets rid of cpp abuse in the form of fake structure member macros.
Also, instead of doing sleep/wakeup on &lfs_avail and &lfs_nextseg inside the on-disk superblock, add extra elements to the in-memory struct lfs for this. (XXX: these should be changed to condvars, but not right now)
XXX: this migrates a structure needed by the lfs code in libsa (struct salfs) into lfs.h, where it doesn't belong, but for the time being this is necessary in order to allow the accessors (and the various lfs macros and other goop that relies on them) to compile.
|
1.4 | 06-Jun-2013 |
dholland | ufs -> ulfs for fsck_lfs.
|
1.3 | 16-Feb-2010 |
mlelstv | branches: 1.3.6; 1.3.12; Three changes in a single commit.
- drop the notion of frags (LFS fragments) vs fsb (FFS fragments) The code uses a complicated unity function that just makes the code difficult to understand.
- support larger sector sizes. Fix disk address computations to use DEV_BSIZE in the kernel as required by device drivers and to use sector sizes in userland.
- Fix several locking bugs in lfs_bio.c and lfs_subr.c.
|
1.2 | 28-Apr-2008 |
martin | Remove clause 3 and 4 from TNF licenses
|
1.1 | 28-Mar-2003 |
perseant | branches: 1.1.32; 1.1.34; Add working writing ability to fsck_lfs, including roll-forward, based on a partial-segment writer ported from the kernel.
|
1.1.34.1 | 18-May-2008 |
yamt | sync with head.
|
1.1.32.1 | 02-Jun-2008 |
mjf | Sync with HEAD.
|
1.3.12.1 | 23-Jun-2013 |
tls | resync from head
|
1.3.6.1 | 22-May-2014 |
yamt | sync with head.
for a reference, the tree before this commit was tagged as yamt-pagecache-tag8.
this commit was splitted into small chunks to avoid a limitation of cvs. ("Protocol error: too many arguments")
|
1.62 | 03-Apr-2020 |
joerg | Avoid common symbols for fsck_lfs.
|
1.61 | 17-Mar-2016 |
christos | branches: 1.61.16; PR/50974: David Binderman: Remove unused code.
|
1.60 | 03-Oct-2015 |
dholland | Fix hardwired 32-bit stuff in fsck: - compute the maximum file size using LFS_BLKPTRSIZE() - use the new IINFO in pass 6 instead of uint32_t pointers - use accessors to read and write indirect blocks
|
1.59 | 01-Sep-2015 |
dholland | Use daddr_t, not ulfs_daddr_t, as the latter's 32 bits wide. Don't use either for on-disk items. Declare external data in header files. Part 3 of 3.
|
1.58 | 01-Sep-2015 |
dholland | Tidy the MAXSYMLINKLEN macros.
|
1.57 | 01-Sep-2015 |
dholland | The ifile's inode number is constant. (it is always 1)
Therefore, storing the value in the superblock and reading it out again is silly and offers the opportunity for it to become corrupted. So, don't do that (most of the code already didn't) and use the existing constant instead. Initialize new 32-bit superblocks with the value for the sake of old userland programs, but don't keep the value in the 64-bit superblock at all.
(approved by Margo Seltzer)
|
1.56 | 01-Sep-2015 |
dholland | Use the lfs dinode accessors in place of the ufs-derived ones. (Mostly.)
The ufs-derived ones are fake structure member macros, which are gross and not very safe. Also, it seems that a lot of places in the lfs code were using the ffsv1 branch of them unconditionally, and this way it's guaranteed all those places have been updated.
Found while doing this: for non-devices, have getattr produce NODEV in the rdev field instead of leaking the address of the first direct block.
|
1.55 | 12-Aug-2015 |
dholland | Hack up dinode usage to be 64 vs. 32 as needed. Part 1.
(This part changes the native lfs code; the ufs-derived code already has 64 vs. 32 logic, but as aspects of it are unsafe, and don't entirely interoperate cleanly with the lfs 64/32 stuff, pass 2 will be rehashing that.)
|
1.54 | 12-Aug-2015 |
dholland | Provide 32-bit and 64-bit versions of FINFO.
This also entailed sorting out part of struct segment, as that contains a pointer into the current FINFO data.
|
1.53 | 12-Aug-2015 |
dholland | Make 32-bit and 64-bit versions of SEGSUM. Also fix some of the FINFO handling as it's closely entangled.
|
1.52 | 02-Aug-2015 |
dholland | Use accessor functions for the version field of the lfs superblock. I thought at first maybe the cases that test the version should be rolled into the accessors, but on the whole I think the conclusion on that is no.
|
1.51 | 02-Aug-2015 |
dholland | Second batch of 64 -> 32 truncations in lfs, along with more minor tidyups and corrections in passing.
|
1.50 | 02-Aug-2015 |
dholland | Fix bug: for format version 1, the superblock "size" field is measured in blocks instead of frags, so use lfs_blkstofrags to correct it.
This code was instead multiplying by the block size divided by DEV_BSIZE to get the number of disk blocks rather than the number of frags. (I gather that originally these were the same, but they're not necessarily any more.)
|
1.49 | 28-Jul-2015 |
dholland | Add a new lfs header file: lfs_accessors.h.
This contains all the accessor functions and macros out of lfs.h. Add an include of lfs_accessors.h after all uses of lfs.h... except for code that wants to define its own struct lfs-alike that the accessors are supposed to play along with. For these, set STRUCT_LFS and include lfs_accessors.h after the necessary structure has been defined, so that lfs_accessors.h can emit functions in terms of it.
|
1.48 | 24-Jul-2015 |
dholland | More lfs superblock accessors. (This changes the rest of the code over; all the accessors were already added.)
The difference between this commit and the previous one is arbitrary, but the previous one passed the regression tests on its own so I'm keeping it separate to help with any bisections that might be needed in the future.
|
1.47 | 24-Jul-2015 |
dholland | Switch to accessor functions for elements of the LFS on-disk superblock. This will allow switching between 32/64 bit forms on the fly; it will also allow handling LFS_EI reasonably tidily. (That currently doesn't work on the superblock.)
It also gets rid of cpp abuse in the form of fake structure member macros.
Also, instead of doing sleep/wakeup on &lfs_avail and &lfs_nextseg inside the on-disk superblock, add extra elements to the in-memory struct lfs for this. (XXX: these should be changed to condvars, but not right now)
XXX: this migrates a structure needed by the lfs code in libsa (struct salfs) into lfs.h, where it doesn't belong, but for the time being this is necessary in order to allow the accessors (and the various lfs macros and other goop that relies on them) to compile.
|
1.46 | 31-May-2015 |
hannken | Use VFS_PROTOS() for lfs. Rename conflicting struct lfs field "lfs_start" to "lfs_s0addr".
No functional change.
|
1.45 | 29-Mar-2015 |
chopps | - Fix fallout for recent bread() change (removing cred arg).
|
1.44 | 18-Jun-2013 |
christos | Prefix most of the cpp macros with lfs_ and LFS_ to avoid conflicts with ffs. This was done so that boot blocks that want to compile both FFS and LFS in the same file work.
|
1.43 | 08-Jun-2013 |
dholland | Tidy up the LFS userland build hacks. Don't use -I${NETBSDSRCDIR}/sys; don't include files other than the exported LFS headers, which are lfs.h, lfs_inode.h, and (for now) lfs_extern.h.
|
1.42 | 08-Jun-2013 |
dholland | Move the dinode (on-disk inode) structures to lfs.h, since they are and will be obviously required by userland tools that need to read the on-disk structures.
Also, DINODE{1,2}_SIZE -> LFS_DINODE{1,2}_SIZE.
|
1.41 | 06-Jun-2013 |
dholland | Cleanups and hacks to make lfs userland stuff build: - lfs_cksum.c doesn't actually need ulfs_inode.h any more. - neither does lfs_itimes.c. - add hacks to fsck_lfs to make it compile. - add hacks to newfs_lfs to make it compile. - fix warning in ulfs_quota.c when quotas are fully disabled (as I guess is happening with the rumpity version)
XXX: This commit adds -I${NETBSDSRCDIR}/sys to the Makefiles for XXX: fsck_lfs, newfs_lfs, and lfs_cleanerd. This needs to be cleaned XXX: up ASAP; but I consider this less problematic in the short term XXX: than spewing ulfs_*.h into /usr/include.
|
1.40 | 06-Jun-2013 |
dholland | ufs -> ulfs for fsck_lfs.
|
1.39 | 22-Jan-2013 |
dholland | Stuff UFS_ in front of a few of ufs's symbols to reduce namespace pollution. Specifically: ROOTINO -> UFS_ROOTINO WINO -> UFS_WINO NXADDR -> UFS_NXADDR NDADDR -> UFS_NDADDR NIADDR -> UFS_NIADDR MAXSYMLINKLEN -> UFS_MAXSYMLINKLEN MAXSYMLINKLEN_UFS[12] -> UFS[12]_MAXSYMLINKLEN (for consistency)
Sort out ext2fs's misuse of NDADDR and NIADDR; fortunately, these have the same values in ext2fs and ffs.
No functional change intended.
|
1.38 | 29-Aug-2011 |
bouyer | branches: 1.38.2; 1.38.8; PR bin/45299: print FBMASK not FFMASK when lfs_fbmask is incorrect.
|
1.37 | 16-Feb-2010 |
mlelstv | Three changes in a single commit.
- drop the notion of frags (LFS fragments) vs fsb (FFS fragments) The code uses a complicated unity function that just makes the code difficult to understand.
- support larger sector sizes. Fix disk address computations to use DEV_BSIZE in the kernel as required by device drivers and to use sector sizes in userland.
- Fix several locking bugs in lfs_bio.c and lfs_subr.c.
|
1.36 | 16-May-2008 |
hannken | Make sure all cached buffers with valid, not yet written data have been run through copy-on-write. Call fscow_run() with valid data where possible.
The LP_UFSCOW hack is no longer needed to protect ffs_copyonwrite() against endless recursion.
- Add a flag B_MODIFY to bread(), breada() and breadn(). If set the caller intends to modify the buffer returned.
- Always run copy-on-write on buffers returned from ffs_balloc().
- Add new function ffs_getblk() that gets a buffer, assigns a new blkno, may clear the buffer and runs copy-on-write. Process possible errors from getblk() or fscow_run(). Part of PR kern/38664.
Welcome to 4.99.63
Reviewed by: YAMAMOTO Takashi <yamt@netbsd.org>
|
1.35 | 28-Apr-2008 |
martin | branches: 1.35.2; Remove clause 3 and 4 from TNF licenses
|
1.34 | 16-Mar-2008 |
lukem | branches: 1.34.2; errexit() now provides the trailing \n (since fsck_ffs assumed that from a conversion from err(3)), so "make it so".
|
1.33 | 08-Oct-2007 |
ad | branches: 1.33.6; 1.33.8; Give brelse() a second argument so that it matches the kernel. fsck_lfs now compiles again.
|
1.32 | 09-Nov-2006 |
christos | branches: 1.32.8; Fix malloc/realloc/calloc issues: always check and exit, use EEXIT instead of 8.
|
1.31 | 16-Oct-2006 |
christos | comment out/delete impossible code
|
1.30 | 01-Sep-2006 |
perseant | Several fixes to improve the reliability of the roll-forward agent. Also, note "properly orphaned" files as distinct from corrupted files.
|
1.29 | 18-Jul-2006 |
perseant | Various improvements to fsck_lfs, to wit:
* Add lfs_balloc capability to the lfs library. * Extend the Ifile if we run out of free inodes when creating lost+found. * Don't roll forward if we have allocated a lost+found, to avoid conflicts when adding new files in roll-forward. * Make some messages slightly more verbose (e.g. include inode number, and use pwarn() instead of printf() so the messages include the device name when preening). * Change superblock detection/avoidance to use the offset table in the primary superblock, rather than looking at the contents. * Be more verbose about various operations when passed the -d flag, especially roll-forward. * Be more careful about dirops during roll forward, since the cleaner can sometimes write blocks from dirop vnodes. Detect and avoid this problem. * Always check the free list, even if given -i; if we're going to write it we have to check it first. * Mark inodes dirty when blocks are found during roll forward, so the inodes are written with the new block locations. * Update size of inodes if blocks beyond EOF are found during roll forward. * Fix segment accounting for blocks and inodes found during roll forward. * Report statistics on roll forward: how many new/deleted/moved files and how many updated blocks (or "nothing new"). * Don't care if the device being checked is really a device, if we have been passed the -f flag (to facilitate automated testing). * When writing to the disk, use the current time in the segment headers rathern than time 0. * When passed the -i flag, locate the partial segment containing the Ifile inode and use that to calculate lfs_offset, lfs_curseg, lfs_nextseg. (Again for automated testing.)
|
1.28 | 28-Apr-2006 |
perseant | Avoid a core dump if ginode() returns NULL. Correct an error message while we're here.
|
1.27 | 17-Apr-2006 |
perseant | Remove the free list ordering/disordering code, since the kernel now keeps the list in order (ordering it on mount).
Regularize error messages: these are now all in ALL CAPS, with all hex numbers (not reported in caps) prefixed by 0x. (The non-fsck-specific messages are an exception to this all-caps rule.)
|
1.26 | 13-Sep-2005 |
christos | rename lfs.h to lfs_user.h so that it does not conflict.
|
1.25 | 19-Aug-2005 |
christos | 64 bit inode changes
|
1.24 | 08-Jun-2005 |
perseant | Use the correct method to create a new inode, when we allocate lost+found.
Correct uninitialized variable issues in pass6.c and dir.c (PR#30411 and PR#30394, respectively).
|
1.23 | 24-May-2005 |
agc | Make this build on arm platforms by using the correct printf formats.
|
1.22 | 23-May-2005 |
perseant | Check some error conditions that would otherwise cause fsck_lfs to dump core. Pointed out by Pavel Cahyna in a follow-on to PR #29151.
|
1.21 | 14-Apr-2005 |
perseant | Document "-f" (force check) flag. Implement and document "-q" (quiet).
|
1.20 | 11-Apr-2005 |
perseant | Be more efficient with the hash tables for the buffer and vnode caches.
Note that roll-forward can add more inodes to the filesystem; don't overflow the tables but reallocate them.
|
1.19 | 26-Feb-2005 |
perseant | branches: 1.19.2; Various minor LFS improvements:
* Extend the lfs library from fsck_lfs(8) so that it can be used with a not-yet-existent LFS. Make newfs_lfs(8) use this library, so it can create LFSs whose Ifile is larger than one segment. * Make newfs_lfs(8) use strsuftoi64() for its arguments, a la newfs(8). * Make fsck_lfs(8) respect the "file system is clean" flag. * Don't let fsck_lfs(8) think it has dirty blocks when invoked with the -n flag.
|
1.18 | 15-Sep-2004 |
minoura | Changes from rev 1.34 and 1.35 of sbin/newfs_lfs/lfs.c.
|
1.17 | 07-Aug-2003 |
agc | branches: 1.17.4; Move UCB-licensed code from 4-clause to 3-clause licence.
Patches provided by Joel Baker in PR 22308, verified by myself.
|
1.16 | 02-Apr-2003 |
fvdl | Add support for UFS2. UFS2 is an enhanced FFS, adding support for 64 bit block pointers, extended attribute storage, and a few other things.
This commit does not yet include the code to manipulate the extended storage (for e.g. ACLs), this will be done later.
Originally written by Kirk McKusick and Network Associates Laboratories for FreeBSD.
|
1.15 | 31-Mar-2003 |
perseant | Check inode free list tail pointer as well as head pointer, and write both into the CLEANERINFO block of the Ifile as well as into the superblock. Make preen update both superblocks.
|
1.14 | 29-Mar-2003 |
perseant | Fix some accounting problems when preening, since preening skips phases 1-4 entirely. Make preen run phase 0, since the Ifile is so important and the test so quick.
|
1.13 | 28-Mar-2003 |
perseant | Add working writing ability to fsck_lfs, including roll-forward, based on a partial-segment writer ported from the kernel.
|
1.12 | 24-Jan-2003 |
fvdl | Bump daddr_t to 64 bits. Replace it with int32_t in all places where it was used on-disk, so that on-disk formats remain the same. Remove ufs_daddr_t and ufs_lbn_t for the time being.
|
1.11 | 04-Feb-2002 |
perseant | Walk the segment list correctly when rolling forward between the two primary superblocks. This prevents spurious "block could not be read" messages that might otherwise be seen if the filesystem had not been properly unmounted.
|
1.10 | 25-Sep-2001 |
wiz | Fix a typo and two white space nits.
|
1.9 | 13-Jul-2001 |
perseant | Merge the short-lived perseant-lfsv2 branch into the trunk.
Kernels and tools understand both v1 and v2 filesystems; newfs_lfs generates v2 by default. Changes for the v2 layout include:
- Segments of non-PO2 size and arbitrary block offset, so these can be matched to convenient physical characteristics of the partition (e.g., stripe or track size and offset).
- Address by fragment instead of by disk sector, paving the way for non-512-byte-sector devices. In theory fragments can be as large as you like, though in reality they must be smaller than MAXBSIZE in size.
- Use serial number and filesystem identifier to ensure that roll-forward doesn't get old data and think it's new. Roll-forward is enabled for v2 filesystems, though not for v1 filesystems by default.
- The inode free list is now a tailq, paving the way for undelete (undelete is not yet implemented, but can be without further non-backwards-compatible changes to disk structures).
- Inode atime information is kept in the Ifile, instead of on the inode; that is, the inode is never written *just* because atime was changed. Because of this the inodes remain near the file data on the disk, rather than wandering all over as the disk is read repeatedly. This speeds up repeated reads by a small but noticeable amount.
Other changes of note include:
- The ifile written by newfs_lfs can now be of arbitrary length, it is no longer restricted to a single indirect block.
- Fixed an old bug where ctime was changed every time a vnode was created. I need to look more closely to make sure that the times are only updated during write(2) and friends, not after-the-fact during a segment write, and certainly not by the cleaner.
|
1.8 | 05-Jan-2001 |
lukem | branches: 1.8.2; use %ll_ instead of the less standard %q_
|
1.7 | 04-Oct-2000 |
jdolecek | setup(): use calloc() for blockmap allocation, instead of malloc() followed by bzero(); the net result is that the test for allocation failure is actually sensible now
|
1.6 | 14-Jun-2000 |
perseant | Add "-i" flag to specify the location of the index file inode, to examine alternate checkpoints. Regularize usage of maxino. Remove olf debugging cruft.
|
1.5 | 23-May-2000 |
perseant | branches: 1.5.2; Convert to NetBSD source code style
|
1.4 | 16-May-2000 |
perseant | fsck_lfs can now write to the filesystem, allowing it to correct most (though still not all) errors in a damaged lfs. Segment byte accounting is corrected in pass 5. "fsck_lfs -p" will do a partial roll-forward, verifying the checkpoint from the newer superblock. fscknames[] is updated so that fsck knows about fsck_lfs.
|
1.3 | 03-Jul-1999 |
kleink | RCS Id police.
|
1.2 | 24-Mar-1999 |
nathanw | printf format fixes for Alpha.
|
1.1 | 18-Mar-1999 |
perseant | Initial checkin of fsck_lfs. This version cannot do any repair (-p flag does nothing, and one of -p or -n is required) but can be useful as a diagnostic tool.
|
1.5.2.1 | 22-Jun-2000 |
minoura | Sync w/ netbsd-1-5-base.
|
1.8.2.3 | 02-Jul-2001 |
perseant | Change disk addressing unit to be the fragment, instead of the disk sector. All quantities in the superblock, inodes, indirect blocks, etc. refer now to this abstract unit (called "fsb" as it is in FFS) instead of disk sectors; as a consequence segment summary blocks have to be multiples of a fragment in size. In v1 filesystems, compatibility code ensures that 1 fsb == 1 sector, regardless of fragment size.
Fragments can now range in size between 512 and 32k; in the event that LFS_LABELPAD (8k) is smaller than the disk address unit size, an extra proto-superblock is kept at 8k from the beginning of the disk, to be used *only* to locate the real superblocks. (Not all of the userland knows about this yet.)
Almost all of this was done not by me, but by joff.
|
1.8.2.2 | 30-Jun-2001 |
perseant | Fixes, from joff, for correct compatibility operation of fsck_lfs, dumplfs, lfs_cleanerd; correct usage message from dumplfs.
|
1.8.2.1 | 27-Jun-2001 |
perseant | Import of what I've been calling "LFSv2", that is, LFS with some features added that require changes to the on-disk data structures. These include:
- 64-bit time in everything but inodes - User-specified segment offset, and segment size no longer restricted to PO2. - Serial number on segment summaries in addition to timestamp, and a new volume identifier, to make roll-forward feasible without fear of finding old data and thinking it was new.
Although I think this version works at least as well as what's on the trunk, we're not done yet; hence this commit is going in on a branch and not on the trunk. Enhancements that are not here yet include fragment addressing, like FFS does, instead of block addressing.
|
1.17.4.1 | 10-May-2005 |
riz | Pull up the following revisions (requested by perseant in ticket #1281):
1.8 sys/ufs/lfs/TODO 1.75 sys/ufs/lfs/lfs.h (via patch) 1.74 sys/ufs/lfs/lfs_alloc.c (via patch) 1.49, 1.51 sys/ufs/lfs/lfs_balloc.c (1.51 via patch) 1.78 sys/ufs/lfs/lfs_bio.c 1.62 sys/ufs/lfs/lfs_extern.h (via patch) 1.156 sys/ufs/lfs/lfs_segment.c (via patch) 1.48 sys/ufs/lfs/lfs_subr.c 1.101 sys/ufs/lfs/lfs_syscalls.c 1.163 sys/ufs/lfs/lfs_vfsops.c (via patch) 1.134 sys/ufs/lfs/lfs_vnops.c (via patch) 1.61 sys/ufs/ufs/ufs_readwrite.c (via patch)
1.20 libexec/lfs_cleanerd/clean.h (via patch) 1.52 libexec/lfs_cleanerd/cleanerd.c (via patch) 1.41 libexec/lfs_cleanerd/library.c (via patch)
1.4 regress/sys/fs/lfs/newfs_fsck/Makefile 1.2 regress/sys/fs/lfs/newfs_fsck/mkfs_mount 1.2 regress/sys/fs/lfs/newfs_fsck/smallfiles 1.3 sbin/fsck_lfs/bufcache.c 1.3 sbin/fsck_lfs/bufcache.h 1.3 sbin/fsck_lfs/lfs.h 1.8 sbin/fsck_lfs/lfs.c (via patch) 1.8 sbin/fsck_lfs/pass3.c (via patch) 1.18 sbin/fsck_lfs/pass0.c (via patch) 1.18 sbin/fsck_lfs/utilities.c (via patch) 1.7 sbin/fsck_lfs/segwrite.c 1.19 sbin/fsck_lfs/setup.c (via patch) 1.3 sbin/newfs_lfs/Makefile 0 sbin/newfs_lfs/lfs.c (yes, remove it) 1.1 sbin/newfs_lfs/make_lfs.c 1.15 sbin/newfs_lfs/newfs.c (via patch)
Various minor LFS improvements.
Kernel:
* Note when lfs_putpages(9) thinks it is not going to be writing any pages before calling genfs_putpages(9). This prevents a situation in which blocks can be queued for writing without a segment header. * Correct computation of NRESERVE(), though it is still a gross overestimate in most cases. Note that if NRESERVE() is too high, it may be impossible to create files on the filesystem. We catch this case on filesystem mount and refuse to mount r/w. * Allow filesystems to be mounted whose block size is == MAXBSIZE. * Somewhere along the line, ufs_bmaparray(9) started mangling UNWRITTEN entries in indirect blocks again, triggering a failed assertion "daddr <= LFS_MAX_DADDR". Explicitly convert to and from int32_t to correct this. Should fix PR #29045. * Add a high-water mark for the number of dirty pages any given LFS can hold before triggering a flush. This is settable by sysctl, but off (zero) by default. * Be more careful about the MAX_BYTES and MAX_BUFS computations so we shouldn't see "please increase to at least zero" messages. * Note that VBLK and VCHR vnodes can have nonzero values in di_db[0] even though their v_size == 0. Don't panic when we see this. Fixes PR #26680. * Change lfs_bfree to a signed quantity. The manner in which it is processed before being passed to the cleaner means that sometimes it may drop below zero, and the cleaner must be aware of this. * Never report bfree < 0 (or higher than lfs_dsize) through lfs_statfs(9). This prevents df(1) from ever telling us that our full filesystems have 16TB free. * Account space allocated through lfs_balloc(9) that does not have associated buffer headers, so that the pagedaemon doesn't run us out of segments. * Return ENOSPC from lfs_balloc(9) when bfree drops to zero. * Address a deadlock in lfs_bmapv/lfs_markv when the filesystem is being unmounted. Because vfs_busy() is a shared lock, and lfs_bmapv/lfs_markv mark the filesystem vfs_busy(), the cleaner can be holding the lock that umount() is blocking on, then try to vfs_busy() again in getnewvnode().
cleaner:
* Adapt lfs_cleanerd to use the fcntl call to get the Ifile filehandle, so it need not be in the namespace. * Make lfs_cleanerd be more careful when there are very few available segments. * Make lfs_cleanerd less verbose when the filesystem is unmounted.
newfs_lfs, fsck_lfs, and regression:
* Extend the lfs library from fsck_lfs(8) so that it can be used with a not-yet-existent LFS. Make newfs_lfs(8) use this library, so it can create LFSs whose Ifile is larger than one segment. Addresses PR #11110. * Make newfs_lfs(8) use strsuftoi64() for its arguments, a la newfs(8). * Make fsck_lfs(8) respect the "file system is clean" flag. * Don't let fsck_lfs(8) think it has dirty blocks when invoked with the -n flag. * Remove the Ifile from the filesystem namespace. The cleaner now uses a fcntl call on the root inode to find the Ifile filehandle. (As a side-effect, addresses PR #29144.)
|
1.19.2.1 | 07-May-2005 |
tron | Apply patch (requested by perseant in ticket #242): * fsck_lfs buffer cache fixes, including PR #29151 * Change fsck_lfs phase 0 message to reflect reality * fsck_lfs: check phase 5 (cleanerinfo accounting) even on roll-forward * Keep better track of the free list during roll-forward, avoiding a core dump * Improve hash table use for fsck_lfs buffer and vnode cache * Document fsck_lfs flag -f, and implement -q * Add resize_lfs, including kernel support * Add LFS to mountd's list of exportable filesystem types * Make the LFS lkm work again [christos@] * Add MP locking to the LFS kernel subsystem * Fix pager_map deadlock in lfs_putpages() * Avoid incomplete file extension that looks like "partial truncation" to fsck * Use lfs_malloc for cleaner malloc, since the cleaner often runs in low-memory conditions. * Use splay trees, not hash table, to track page allocation for write. * Fix mkdir panic on full fs * Fix page accounting leak by counting differently. * Use rightly named structure for lfs_getattr [skrll@] * Cosmetic changes for readability.
|
1.32.8.2 | 23-Mar-2008 |
matt | sync with HEAD
|
1.32.8.1 | 06-Nov-2007 |
matt | sync with HEAD
|
1.33.8.2 | 02-Jun-2008 |
mjf | Sync with HEAD.
|
1.33.8.1 | 03-Apr-2008 |
mjf | Sync with HEAD.
|
1.33.6.1 | 24-Mar-2008 |
keiichi | sync with head.
|
1.34.2.1 | 18-May-2008 |
yamt | sync with head.
|
1.35.2.1 | 23-Jun-2008 |
wrstuden | Sync w/ -current. 34 merge conflicts to follow.
|
1.38.8.2 | 23-Jun-2013 |
tls | resync from head
|
1.38.8.1 | 25-Feb-2013 |
tls | resync with head
|
1.38.2.2 | 22-May-2014 |
yamt | sync with head.
for a reference, the tree before this commit was tagged as yamt-pagecache-tag8.
this commit was splitted into small chunks to avoid a limitation of cvs. ("Protocol error: too many arguments")
|
1.38.2.1 | 23-Jan-2013 |
yamt | sync with head
|
1.61.16.1 | 08-Apr-2020 |
martin | Merge changes from current as of 20200406
|
1.43 | 14-Sep-2025 |
perseant | Add -a flag to suppress warnings about discrepancies in avail accounting, which is common with the -i flag.
Expand the computation of avail if the -d flag is given. The computation itself is not changed.
Do not offer to roll forward if the -n flag was given.
Exit with FSCK_EXIT_UNRESOLVED if the -n flag was given and any questions were asked. This is helpful when using fsck_lfs as a diagnostic in scripts.
|
1.42 | 03-Apr-2020 |
joerg | Avoid common symbols for fsck_lfs.
|
1.41 | 12-Aug-2015 |
dholland | branches: 1.41.16; Hack up dinode usage to be 64 vs. 32 as needed. Part 1.
(This part changes the native lfs code; the ufs-derived code already has 64 vs. 32 logic, but as aspects of it are unsafe, and don't entirely interoperate cleanly with the lfs 64/32 stuff, pass 2 will be rehashing that.)
|
1.40 | 28-Jul-2015 |
dholland | Add a new lfs header file: lfs_accessors.h.
This contains all the accessor functions and macros out of lfs.h. Add an include of lfs_accessors.h after all uses of lfs.h... except for code that wants to define its own struct lfs-alike that the accessors are supposed to play along with. For these, set STRUCT_LFS and include lfs_accessors.h after the necessary structure has been defined, so that lfs_accessors.h can emit functions in terms of it.
|
1.39 | 24-Jul-2015 |
dholland | More lfs superblock accessors. (This changes the rest of the code over; all the accessors were already added.)
The difference between this commit and the previous one is arbitrary, but the previous one passed the regression tests on its own so I'm keeping it separate to help with any bisections that might be needed in the future.
|
1.38 | 24-Jul-2015 |
dholland | Switch to accessor functions for elements of the LFS on-disk superblock. This will allow switching between 32/64 bit forms on the fly; it will also allow handling LFS_EI reasonably tidily. (That currently doesn't work on the superblock.)
It also gets rid of cpp abuse in the form of fake structure member macros.
Also, instead of doing sleep/wakeup on &lfs_avail and &lfs_nextseg inside the on-disk superblock, add extra elements to the in-memory struct lfs for this. (XXX: these should be changed to condvars, but not right now)
XXX: this migrates a structure needed by the lfs code in libsa (struct salfs) into lfs.h, where it doesn't belong, but for the time being this is necessary in order to allow the accessors (and the various lfs macros and other goop that relies on them) to compile.
|
1.37 | 16-Jun-2015 |
christos | a few more \n's in errors
|
1.36 | 16-Jun-2015 |
christos | fix error messages containing \n
|
1.35 | 08-Jun-2013 |
dholland | Tidy up the LFS userland build hacks. Don't use -I${NETBSDSRCDIR}/sys; don't include files other than the exported LFS headers, which are lfs.h, lfs_inode.h, and (for now) lfs_extern.h.
|
1.34 | 08-Jun-2013 |
dholland | Stick LFS_ in front of IFMT, IFIFO, IFREG, etc. so as not to conflict with the UFS copies of these symbols. (Which themselves ought to have UFS_ stuck on.)
|
1.33 | 06-Jun-2013 |
dholland | ufs -> ulfs for fsck_lfs.
|
1.32 | 22-Jan-2013 |
dholland | Stuff UFS_ in front of a few of ufs's symbols to reduce namespace pollution. Specifically: ROOTINO -> UFS_ROOTINO WINO -> UFS_WINO NXADDR -> UFS_NXADDR NDADDR -> UFS_NDADDR NIADDR -> UFS_NIADDR MAXSYMLINKLEN -> UFS_MAXSYMLINKLEN MAXSYMLINKLEN_UFS[12] -> UFS[12]_MAXSYMLINKLEN (for consistency)
Sort out ext2fs's misuse of NDADDR and NIADDR; fortunately, these have the same values in ext2fs and ffs.
No functional change intended.
|
1.31 | 09-Jun-2011 |
christos | branches: 1.31.2; 1.31.8; share more code.
|
1.30 | 07-Jan-2010 |
christos | branches: 1.30.4; missing errno.h
|
1.29 | 07-Jan-2010 |
christos | make this compile again.
|
1.28 | 06-Jan-2010 |
christos | PR/42568: Pedro F. Giffuni: Better signal handling from OpenBSD, but simplified.
|
1.27 | 23-Feb-2008 |
christos | Make sure that the exit values are always sane, and use symbolic instead of magic constants. Reviewed by go@
|
1.26 | 09-Nov-2006 |
christos | branches: 1.26.8; 1.26.16; 1.26.18; Fix malloc/realloc/calloc issues: always check and exit, use EEXIT instead of 8.
|
1.25 | 18-Jul-2006 |
perseant | Various improvements to fsck_lfs, to wit:
* Add lfs_balloc capability to the lfs library. * Extend the Ifile if we run out of free inodes when creating lost+found. * Don't roll forward if we have allocated a lost+found, to avoid conflicts when adding new files in roll-forward. * Make some messages slightly more verbose (e.g. include inode number, and use pwarn() instead of printf() so the messages include the device name when preening). * Change superblock detection/avoidance to use the offset table in the primary superblock, rather than looking at the contents. * Be more verbose about various operations when passed the -d flag, especially roll-forward. * Be more careful about dirops during roll forward, since the cleaner can sometimes write blocks from dirop vnodes. Detect and avoid this problem. * Always check the free list, even if given -i; if we're going to write it we have to check it first. * Mark inodes dirty when blocks are found during roll forward, so the inodes are written with the new block locations. * Update size of inodes if blocks beyond EOF are found during roll forward. * Fix segment accounting for blocks and inodes found during roll forward. * Report statistics on roll forward: how many new/deleted/moved files and how many updated blocks (or "nothing new"). * Don't care if the device being checked is really a device, if we have been passed the -f flag (to facilitate automated testing). * When writing to the disk, use the current time in the segment headers rathern than time 0. * When passed the -i flag, locate the partial segment containing the Ifile inode and use that to calculate lfs_offset, lfs_curseg, lfs_nextseg. (Again for automated testing.)
|
1.24 | 28-Apr-2006 |
perseant | Avoid a core dump if ginode() returns NULL. Correct an error message while we're here.
|
1.23 | 13-Apr-2006 |
perseant | Don't update the superblock if we were run with -n, regardless of whether the "clean" bit is set.
|
1.22 | 13-Sep-2005 |
christos | rename lfs.h to lfs_user.h so that it does not conflict.
|
1.21 | 23-Aug-2005 |
christos | This should be LFS_MAXNAMLEN
|
1.20 | 23-Aug-2005 |
tron | Use FFS_MAXNAMLEN instead of MAXNAMLEN.
|
1.19 | 27-Jun-2005 |
christos | constify
|
1.18 | 26-Feb-2005 |
perseant | Various minor LFS improvements:
* Extend the lfs library from fsck_lfs(8) so that it can be used with a not-yet-existent LFS. Make newfs_lfs(8) use this library, so it can create LFSs whose Ifile is larger than one segment. * Make newfs_lfs(8) use strsuftoi64() for its arguments, a la newfs(8). * Make fsck_lfs(8) respect the "file system is clean" flag. * Don't let fsck_lfs(8) think it has dirty blocks when invoked with the -n flag.
|
1.17 | 06-Feb-2005 |
perry | remove obsolete "register" declarations.
|
1.16 | 20-Oct-2003 |
dsl | branches: 1.16.4; Add a -q (quiet) option to print nothing for clean filesystems. Support in fsck_ffs and stub in fsck_xxx. Push a few more messages through pwarn() instead of printf() to ensure disk name is shown.
|
1.15 | 07-Aug-2003 |
agc | Move UCB-licensed code from 4-clause to 3-clause licence.
Patches provided by Joel Baker in PR 22308, verified by myself.
|
1.14 | 13-Jul-2003 |
itojun | use bounded string op
|
1.13 | 02-Apr-2003 |
fvdl | Add support for UFS2. UFS2 is an enhanced FFS, adding support for 64 bit block pointers, extended attribute storage, and a few other things.
This commit does not yet include the code to manipulate the extended storage (for e.g. ACLs), this will be done later.
Originally written by Kirk McKusick and Network Associates Laboratories for FreeBSD.
|
1.12 | 31-Mar-2003 |
perseant | Check inode free list tail pointer as well as head pointer, and write both into the CLEANERINFO block of the Ifile as well as into the superblock. Make preen update both superblocks.
|
1.11 | 28-Mar-2003 |
perseant | Add working writing ability to fsck_lfs, including roll-forward, based on a partial-segment writer ported from the kernel.
|
1.10 | 24-Jan-2003 |
fvdl | Bump daddr_t to 64 bits. Replace it with int32_t in all places where it was used on-disk, so that on-disk formats remain the same. Remove ufs_daddr_t and ufs_lbn_t for the time being.
|
1.9 | 23-May-2002 |
perseant | Re-checksum the superblock whenever it is marked dirty.
Tested on alpha.
|
1.8 | 13-Jul-2001 |
perseant | branches: 1.8.2; Merge the short-lived perseant-lfsv2 branch into the trunk.
Kernels and tools understand both v1 and v2 filesystems; newfs_lfs generates v2 by default. Changes for the v2 layout include:
- Segments of non-PO2 size and arbitrary block offset, so these can be matched to convenient physical characteristics of the partition (e.g., stripe or track size and offset).
- Address by fragment instead of by disk sector, paving the way for non-512-byte-sector devices. In theory fragments can be as large as you like, though in reality they must be smaller than MAXBSIZE in size.
- Use serial number and filesystem identifier to ensure that roll-forward doesn't get old data and think it's new. Roll-forward is enabled for v2 filesystems, though not for v1 filesystems by default.
- The inode free list is now a tailq, paving the way for undelete (undelete is not yet implemented, but can be without further non-backwards-compatible changes to disk structures).
- Inode atime information is kept in the Ifile, instead of on the inode; that is, the inode is never written *just* because atime was changed. Because of this the inodes remain near the file data on the disk, rather than wandering all over as the disk is read repeatedly. This speeds up repeated reads by a small but noticeable amount.
Other changes of note include:
- The ifile written by newfs_lfs can now be of arbitrary length, it is no longer restricted to a single indirect block.
- Fixed an old bug where ctime was changed every time a vnode was created. I need to look more closely to make sure that the times are only updated during write(2) and friends, not after-the-fact during a segment write, and certainly not by the cleaner.
|
1.7 | 04-Feb-2001 |
christos | branches: 1.7.2; fix redundant decls
|
1.6 | 10-Oct-2000 |
is | Format string cleanups by Bill Sommerfeld.
|
1.5 | 14-Jun-2000 |
perseant | branches: 1.5.2; Add "-i" flag to specify the location of the index file inode, to examine alternate checkpoints. Regularize usage of maxino. Remove olf debugging cruft.
|
1.4 | 23-May-2000 |
perseant | branches: 1.4.2; Convert to NetBSD source code style
|
1.3 | 16-May-2000 |
perseant | fsck_lfs can now write to the filesystem, allowing it to correct most (though still not all) errors in a damaged lfs. Segment byte accounting is corrected in pass 5. "fsck_lfs -p" will do a partial roll-forward, verifying the checkpoint from the newer superblock. fscknames[] is updated so that fsck knows about fsck_lfs.
|
1.2 | 03-Jul-1999 |
kleink | RCS Id police.
|
1.1 | 18-Mar-1999 |
perseant | branches: 1.1.2; Initial checkin of fsck_lfs. This version cannot do any repair (-p flag does nothing, and one of -p or -n is required) but can be useful as a diagnostic tool.
|
1.1.2.1 | 10-Oct-2000 |
he | Pull up revision 1.6 (requested by is): Format string cleanup.
|
1.4.2.1 | 22-Jun-2000 |
minoura | Sync w/ netbsd-1-5-base.
|
1.5.2.1 | 18-Oct-2000 |
tv | Pullup sbin string format fixes [is]. See "cvs log" for explicit revision numbers per file, from sommerfeld.
|
1.7.2.2 | 02-Jul-2001 |
perseant | Change disk addressing unit to be the fragment, instead of the disk sector. All quantities in the superblock, inodes, indirect blocks, etc. refer now to this abstract unit (called "fsb" as it is in FFS) instead of disk sectors; as a consequence segment summary blocks have to be multiples of a fragment in size. In v1 filesystems, compatibility code ensures that 1 fsb == 1 sector, regardless of fragment size.
Fragments can now range in size between 512 and 32k; in the event that LFS_LABELPAD (8k) is smaller than the disk address unit size, an extra proto-superblock is kept at 8k from the beginning of the disk, to be used *only* to locate the real superblocks. (Not all of the userland knows about this yet.)
Almost all of this was done not by me, but by joff.
|
1.7.2.1 | 27-Jun-2001 |
perseant | Import of what I've been calling "LFSv2", that is, LFS with some features added that require changes to the on-disk data structures. These include:
- 64-bit time in everything but inodes - User-specified segment offset, and segment size no longer restricted to PO2. - Serial number on segment summaries in addition to timestamp, and a new volume identifier, to make roll-forward feasible without fear of finding old data and thinking it was new.
Although I think this version works at least as well as what's on the trunk, we're not done yet; hence this commit is going in on a branch and not on the trunk. Enhancements that are not here yet include fragment addressing, like FFS does, instead of block addressing.
|
1.8.2.1 | 02-Jun-2002 |
tv | Pull up revision 1.9 (requested by perseant in ticket #131): Re-checksum the superblock whenever it is marked dirty. Tested on alpha.
|
1.16.4.1 | 10-May-2005 |
riz | Pull up the following revisions (requested by perseant in ticket #1281):
1.8 sys/ufs/lfs/TODO 1.75 sys/ufs/lfs/lfs.h (via patch) 1.74 sys/ufs/lfs/lfs_alloc.c (via patch) 1.49, 1.51 sys/ufs/lfs/lfs_balloc.c (1.51 via patch) 1.78 sys/ufs/lfs/lfs_bio.c 1.62 sys/ufs/lfs/lfs_extern.h (via patch) 1.156 sys/ufs/lfs/lfs_segment.c (via patch) 1.48 sys/ufs/lfs/lfs_subr.c 1.101 sys/ufs/lfs/lfs_syscalls.c 1.163 sys/ufs/lfs/lfs_vfsops.c (via patch) 1.134 sys/ufs/lfs/lfs_vnops.c (via patch) 1.61 sys/ufs/ufs/ufs_readwrite.c (via patch)
1.20 libexec/lfs_cleanerd/clean.h (via patch) 1.52 libexec/lfs_cleanerd/cleanerd.c (via patch) 1.41 libexec/lfs_cleanerd/library.c (via patch)
1.4 regress/sys/fs/lfs/newfs_fsck/Makefile 1.2 regress/sys/fs/lfs/newfs_fsck/mkfs_mount 1.2 regress/sys/fs/lfs/newfs_fsck/smallfiles 1.3 sbin/fsck_lfs/bufcache.c 1.3 sbin/fsck_lfs/bufcache.h 1.3 sbin/fsck_lfs/lfs.h 1.8 sbin/fsck_lfs/lfs.c (via patch) 1.8 sbin/fsck_lfs/pass3.c (via patch) 1.18 sbin/fsck_lfs/pass0.c (via patch) 1.18 sbin/fsck_lfs/utilities.c (via patch) 1.7 sbin/fsck_lfs/segwrite.c 1.19 sbin/fsck_lfs/setup.c (via patch) 1.3 sbin/newfs_lfs/Makefile 0 sbin/newfs_lfs/lfs.c (yes, remove it) 1.1 sbin/newfs_lfs/make_lfs.c 1.15 sbin/newfs_lfs/newfs.c (via patch)
Various minor LFS improvements.
Kernel:
* Note when lfs_putpages(9) thinks it is not going to be writing any pages before calling genfs_putpages(9). This prevents a situation in which blocks can be queued for writing without a segment header. * Correct computation of NRESERVE(), though it is still a gross overestimate in most cases. Note that if NRESERVE() is too high, it may be impossible to create files on the filesystem. We catch this case on filesystem mount and refuse to mount r/w. * Allow filesystems to be mounted whose block size is == MAXBSIZE. * Somewhere along the line, ufs_bmaparray(9) started mangling UNWRITTEN entries in indirect blocks again, triggering a failed assertion "daddr <= LFS_MAX_DADDR". Explicitly convert to and from int32_t to correct this. Should fix PR #29045. * Add a high-water mark for the number of dirty pages any given LFS can hold before triggering a flush. This is settable by sysctl, but off (zero) by default. * Be more careful about the MAX_BYTES and MAX_BUFS computations so we shouldn't see "please increase to at least zero" messages. * Note that VBLK and VCHR vnodes can have nonzero values in di_db[0] even though their v_size == 0. Don't panic when we see this. Fixes PR #26680. * Change lfs_bfree to a signed quantity. The manner in which it is processed before being passed to the cleaner means that sometimes it may drop below zero, and the cleaner must be aware of this. * Never report bfree < 0 (or higher than lfs_dsize) through lfs_statfs(9). This prevents df(1) from ever telling us that our full filesystems have 16TB free. * Account space allocated through lfs_balloc(9) that does not have associated buffer headers, so that the pagedaemon doesn't run us out of segments. * Return ENOSPC from lfs_balloc(9) when bfree drops to zero. * Address a deadlock in lfs_bmapv/lfs_markv when the filesystem is being unmounted. Because vfs_busy() is a shared lock, and lfs_bmapv/lfs_markv mark the filesystem vfs_busy(), the cleaner can be holding the lock that umount() is blocking on, then try to vfs_busy() again in getnewvnode().
cleaner:
* Adapt lfs_cleanerd to use the fcntl call to get the Ifile filehandle, so it need not be in the namespace. * Make lfs_cleanerd be more careful when there are very few available segments. * Make lfs_cleanerd less verbose when the filesystem is unmounted.
newfs_lfs, fsck_lfs, and regression:
* Extend the lfs library from fsck_lfs(8) so that it can be used with a not-yet-existent LFS. Make newfs_lfs(8) use this library, so it can create LFSs whose Ifile is larger than one segment. Addresses PR #11110. * Make newfs_lfs(8) use strsuftoi64() for its arguments, a la newfs(8). * Make fsck_lfs(8) respect the "file system is clean" flag. * Don't let fsck_lfs(8) think it has dirty blocks when invoked with the -n flag. * Remove the Ifile from the filesystem namespace. The cleaner now uses a fcntl call on the root inode to find the Ifile filehandle. (As a side-effect, addresses PR #29144.)
|
1.26.18.1 | 03-Apr-2008 |
mjf | Sync with HEAD.
|
1.26.16.1 | 24-Mar-2008 |
keiichi | sync with head.
|
1.26.8.1 | 23-Mar-2008 |
matt | sync with HEAD
|
1.30.4.1 | 23-Jun-2011 |
cherry | Catchup with rmind-uvmplock merge.
|
1.31.8.2 | 23-Jun-2013 |
tls | resync from head
|
1.31.8.1 | 25-Feb-2013 |
tls | resync with head
|
1.31.2.2 | 22-May-2014 |
yamt | sync with head.
for a reference, the tree before this commit was tagged as yamt-pagecache-tag8.
this commit was splitted into small chunks to avoid a limitation of cvs. ("Protocol error: too many arguments")
|
1.31.2.1 | 23-Jan-2013 |
yamt | sync with head
|
1.41.16.1 | 08-Apr-2020 |
martin | Merge changes from current as of 20200406
|
1.20 | 14-Sep-2025 |
perseant | Add -a flag to suppress warnings about discrepancies in avail accounting, which is common with the -i flag.
Expand the computation of avail if the -d flag is given. The computation itself is not changed.
Do not offer to roll forward if the -n flag was given.
Exit with FSCK_EXIT_UNRESOLVED if the -n flag was given and any questions were asked. This is helpful when using fsck_lfs as a diagnostic in scripts.
|
1.19 | 03-Apr-2020 |
joerg | Avoid common symbols for fsck_lfs.
|
1.18 | 12-Aug-2015 |
dholland | branches: 1.18.16; Hack up dinode usage to be 64 vs. 32 as needed. Part 1.
(This part changes the native lfs code; the ufs-derived code already has 64 vs. 32 logic, but as aspects of it are unsafe, and don't entirely interoperate cleanly with the lfs 64/32 stuff, pass 2 will be rehashing that.)
|
1.17 | 08-Jun-2013 |
dholland | Tidy up the LFS userland build hacks. Don't use -I${NETBSDSRCDIR}/sys; don't include files other than the exported LFS headers, which are lfs.h, lfs_inode.h, and (for now) lfs_extern.h.
|
1.16 | 06-Jun-2013 |
dholland | Cleanups and hacks to make lfs userland stuff build: - lfs_cksum.c doesn't actually need ulfs_inode.h any more. - neither does lfs_itimes.c. - add hacks to fsck_lfs to make it compile. - add hacks to newfs_lfs to make it compile. - fix warning in ulfs_quota.c when quotas are fully disabled (as I guess is happening with the rumpity version)
XXX: This commit adds -I${NETBSDSRCDIR}/sys to the Makefiles for XXX: fsck_lfs, newfs_lfs, and lfs_cleanerd. This needs to be cleaned XXX: up ASAP; but I consider this less problematic in the short term XXX: than spewing ulfs_*.h into /usr/include.
|
1.15 | 06-Jun-2013 |
dholland | ufs -> ulfs for fsck_lfs.
|
1.14 | 16-Feb-2010 |
mlelstv | branches: 1.14.6; 1.14.12; Three changes in a single commit.
- drop the notion of frags (LFS fragments) vs fsb (FFS fragments) The code uses a complicated unity function that just makes the code difficult to understand.
- support larger sector sizes. Fix disk address computations to use DEV_BSIZE in the kernel as required by device drivers and to use sector sizes in userland.
- Fix several locking bugs in lfs_bio.c and lfs_subr.c.
|
1.13 | 28-Apr-2008 |
martin | Remove clause 3 and 4 from TNF licenses
|
1.12 | 01-Sep-2006 |
perseant | branches: 1.12.18; 1.12.20; Several fixes to improve the reliability of the roll-forward agent. Also, note "properly orphaned" files as distinct from corrupted files.
|
1.11 | 18-Jul-2006 |
perseant | Various improvements to fsck_lfs, to wit:
* Add lfs_balloc capability to the lfs library. * Extend the Ifile if we run out of free inodes when creating lost+found. * Don't roll forward if we have allocated a lost+found, to avoid conflicts when adding new files in roll-forward. * Make some messages slightly more verbose (e.g. include inode number, and use pwarn() instead of printf() so the messages include the device name when preening). * Change superblock detection/avoidance to use the offset table in the primary superblock, rather than looking at the contents. * Be more verbose about various operations when passed the -d flag, especially roll-forward. * Be more careful about dirops during roll forward, since the cleaner can sometimes write blocks from dirop vnodes. Detect and avoid this problem. * Always check the free list, even if given -i; if we're going to write it we have to check it first. * Mark inodes dirty when blocks are found during roll forward, so the inodes are written with the new block locations. * Update size of inodes if blocks beyond EOF are found during roll forward. * Fix segment accounting for blocks and inodes found during roll forward. * Report statistics on roll forward: how many new/deleted/moved files and how many updated blocks (or "nothing new"). * Don't care if the device being checked is really a device, if we have been passed the -f flag (to facilitate automated testing). * When writing to the disk, use the current time in the segment headers rathern than time 0. * When passed the -i flag, locate the partial segment containing the Ifile inode and use that to calculate lfs_offset, lfs_curseg, lfs_nextseg. (Again for automated testing.)
|
1.10 | 27-Jun-2005 |
christos | constify
|
1.9 | 14-Apr-2005 |
perseant | Document "-f" (force check) flag. Implement and document "-q" (quiet).
|
1.8 | 02-Apr-2003 |
fvdl | branches: 1.8.6; Add support for UFS2. UFS2 is an enhanced FFS, adding support for 64 bit block pointers, extended attribute storage, and a few other things.
This commit does not yet include the code to manipulate the extended storage (for e.g. ACLs), this will be done later.
Originally written by Kirk McKusick and Network Associates Laboratories for FreeBSD.
|
1.7 | 28-Mar-2003 |
perseant | Add working writing ability to fsck_lfs, including roll-forward, based on a partial-segment writer ported from the kernel.
|
1.6 | 24-Jan-2003 |
fvdl | Bump daddr_t to 64 bits. Replace it with int32_t in all places where it was used on-disk, so that on-disk formats remain the same. Remove ufs_daddr_t and ufs_lbn_t for the time being.
|
1.5 | 04-Feb-2001 |
christos | fix redundant decls
|
1.4 | 14-Jun-2000 |
perseant | Add "-i" flag to specify the location of the index file inode, to examine alternate checkpoints. Regularize usage of maxino. Remove olf debugging cruft.
|
1.3 | 23-May-2000 |
perseant | branches: 1.3.2; Convert to NetBSD source code style
|
1.2 | 03-Jul-1999 |
kleink | RCS Id police.
|
1.1 | 18-Mar-1999 |
perseant | Initial checkin of fsck_lfs. This version cannot do any repair (-p flag does nothing, and one of -p or -n is required) but can be useful as a diagnostic tool.
|
1.3.2.1 | 22-Jun-2000 |
minoura | Sync w/ netbsd-1-5-base.
|
1.8.6.1 | 07-May-2005 |
tron | Apply patch (requested by perseant in ticket #242): * fsck_lfs buffer cache fixes, including PR #29151 * Change fsck_lfs phase 0 message to reflect reality * fsck_lfs: check phase 5 (cleanerinfo accounting) even on roll-forward * Keep better track of the free list during roll-forward, avoiding a core dump * Improve hash table use for fsck_lfs buffer and vnode cache * Document fsck_lfs flag -f, and implement -q * Add resize_lfs, including kernel support * Add LFS to mountd's list of exportable filesystem types * Make the LFS lkm work again [christos@] * Add MP locking to the LFS kernel subsystem * Fix pager_map deadlock in lfs_putpages() * Avoid incomplete file extension that looks like "partial truncation" to fsck * Use lfs_malloc for cleaner malloc, since the cleaner often runs in low-memory conditions. * Use splay trees, not hash table, to track page allocation for write. * Fix mkdir panic on full fs * Fix page accounting leak by counting differently. * Use rightly named structure for lfs_getattr [skrll@] * Cosmetic changes for readability.
|
1.12.20.1 | 18-May-2008 |
yamt | sync with head.
|
1.12.18.1 | 02-Jun-2008 |
mjf | Sync with HEAD.
|
1.14.12.1 | 23-Jun-2013 |
tls | resync from head
|
1.14.6.1 | 22-May-2014 |
yamt | sync with head.
for a reference, the tree before this commit was tagged as yamt-pagecache-tag8.
this commit was splitted into small chunks to avoid a limitation of cvs. ("Protocol error: too many arguments")
|
1.18.16.1 | 08-Apr-2020 |
martin | Merge changes from current as of 20200406
|
1.16 | 03-Apr-2020 |
joerg | branches: 1.16.8; Avoid common symbols for fsck_lfs.
|
1.15 | 19-Aug-2015 |
dholland | branches: 1.15.16; Part two of dinodes; use the same union everywhere. (previously the ufs-derived code had things set up slightly different)
Remove a bunch of associated mess.
|
1.14 | 08-Jun-2013 |
dholland | Tidy up the LFS userland build hacks. Don't use -I${NETBSDSRCDIR}/sys; don't include files other than the exported LFS headers, which are lfs.h, lfs_inode.h, and (for now) lfs_extern.h.
|
1.13 | 06-Jun-2013 |
dholland | Cleanups and hacks to make lfs userland stuff build: - lfs_cksum.c doesn't actually need ulfs_inode.h any more. - neither does lfs_itimes.c. - add hacks to fsck_lfs to make it compile. - add hacks to newfs_lfs to make it compile. - fix warning in ulfs_quota.c when quotas are fully disabled (as I guess is happening with the rumpity version)
XXX: This commit adds -I${NETBSDSRCDIR}/sys to the Makefiles for XXX: fsck_lfs, newfs_lfs, and lfs_cleanerd. This needs to be cleaned XXX: up ASAP; but I consider this less problematic in the short term XXX: than spewing ulfs_*.h into /usr/include.
|
1.12 | 06-Jun-2013 |
dholland | ufs -> ulfs for fsck_lfs.
|
1.11 | 16-Feb-2010 |
mlelstv | branches: 1.11.6; 1.11.12; Three changes in a single commit.
- drop the notion of frags (LFS fragments) vs fsb (FFS fragments) The code uses a complicated unity function that just makes the code difficult to understand.
- support larger sector sizes. Fix disk address computations to use DEV_BSIZE in the kernel as required by device drivers and to use sector sizes in userland.
- Fix several locking bugs in lfs_bio.c and lfs_subr.c.
|
1.10 | 06-Aug-2009 |
pooka | Define syscalls of lfs userspace tools (cleaner, mainly) through a struct called kernelops, which contains standard system calls for the normal case and rump system calls for the rump case.
Make it possible to run the lfs cleaner in a library fashion (taking the quick route with the implementation).
|
1.9 | 28-Apr-2008 |
martin | Remove clause 3 and 4 from TNF licenses
|
1.8 | 10-Oct-2007 |
ad | branches: 1.8.8; 1.8.10; Merge from vmlocking:
- Split vnode::v_flag into three fields, depending on field locking. - simple_lock -> kmutex in a few places. - Fix some simple locking problems.
|
1.7 | 08-Oct-2007 |
ad | Give brelse() a second argument so that it matches the kernel. fsck_lfs now compiles again.
|
1.6 | 09-Nov-2006 |
christos | branches: 1.6.8; Fix malloc/realloc/calloc issues: always check and exit, use EEXIT instead of 8.
|
1.5 | 20-Mar-2006 |
christos | Coverity CID 2551: Don't use LIST_FOREACH() if you are going to free the current element (bp) in the body of the loop; the foreach does bp = bp->next;
|
1.4 | 17-Mar-2006 |
rumble | Check for allocation failures in malloc, calloc, realloc, asprintf, and vasprintf and try to handle them.
|
1.3 | 11-Apr-2005 |
perseant | Be more efficient with the hash tables for the buffer and vnode caches.
Note that roll-forward can add more inodes to the filesystem; don't overflow the tables but reallocate them.
|
1.2 | 02-Apr-2003 |
fvdl | branches: 1.2.6; Add support for UFS2. UFS2 is an enhanced FFS, adding support for 64 bit block pointers, extended attribute storage, and a few other things.
This commit does not yet include the code to manipulate the extended storage (for e.g. ACLs), this will be done later.
Originally written by Kirk McKusick and Network Associates Laboratories for FreeBSD.
|
1.1 | 28-Mar-2003 |
perseant | Add working writing ability to fsck_lfs, including roll-forward, based on a partial-segment writer ported from the kernel.
|
1.2.6.1 | 07-May-2005 |
tron | Apply patch (requested by perseant in ticket #242): * fsck_lfs buffer cache fixes, including PR #29151 * Change fsck_lfs phase 0 message to reflect reality * fsck_lfs: check phase 5 (cleanerinfo accounting) even on roll-forward * Keep better track of the free list during roll-forward, avoiding a core dump * Improve hash table use for fsck_lfs buffer and vnode cache * Document fsck_lfs flag -f, and implement -q * Add resize_lfs, including kernel support * Add LFS to mountd's list of exportable filesystem types * Make the LFS lkm work again [christos@] * Add MP locking to the LFS kernel subsystem * Fix pager_map deadlock in lfs_putpages() * Avoid incomplete file extension that looks like "partial truncation" to fsck * Use lfs_malloc for cleaner malloc, since the cleaner often runs in low-memory conditions. * Use splay trees, not hash table, to track page allocation for write. * Fix mkdir panic on full fs * Fix page accounting leak by counting differently. * Use rightly named structure for lfs_getattr [skrll@] * Cosmetic changes for readability.
|
1.6.8.1 | 06-Nov-2007 |
matt | sync with HEAD
|
1.8.10.1 | 18-May-2008 |
yamt | sync with head.
|
1.8.8.1 | 02-Jun-2008 |
mjf | Sync with HEAD.
|
1.11.12.1 | 23-Jun-2013 |
tls | resync from head
|
1.11.6.1 | 22-May-2014 |
yamt | sync with head.
for a reference, the tree before this commit was tagged as yamt-pagecache-tag8.
this commit was splitted into small chunks to avoid a limitation of cvs. ("Protocol error: too many arguments")
|
1.15.16.1 | 08-Apr-2020 |
martin | Merge changes from current as of 20200406
|
1.16.8.2 | 06-Sep-2025 |
perseant | Separate buffer cache code between fsck_lfs and fsck_exfatfs. This may be reunited later, probably as a library.
|
1.16.8.1 | 29-Jun-2024 |
perseant | Implementation of exFAT filesystem, with compilation conditional on MKEXFATFS make variable.
|
1.6 | 17-Sep-2021 |
christos | branches: 1.6.4; Fix the function pointer declaration to something lint likes.
|
1.5 | 09-Jun-2017 |
chs | this file uses the <sys/queue.h> macros so it should include that header itself, rather than relying on getting it indirectly by including some other header.
|
1.4 | 28-Apr-2008 |
martin | Remove clause 3 and 4 from TNF licenses
|
1.3 | 10-Oct-2007 |
ad | branches: 1.3.8; 1.3.10; Merge from vmlocking:
- Split vnode::v_flag into three fields, depending on field locking. - simple_lock -> kmutex in a few places. - Fix some simple locking problems.
|
1.2 | 11-Apr-2005 |
perseant | branches: 1.2.10; Be more efficient with the hash tables for the buffer and vnode caches.
Note that roll-forward can add more inodes to the filesystem; don't overflow the tables but reallocate them.
|
1.1 | 28-Mar-2003 |
perseant | branches: 1.1.6; Add working writing ability to fsck_lfs, including roll-forward, based on a partial-segment writer ported from the kernel.
|
1.1.6.1 | 07-May-2005 |
tron | Apply patch (requested by perseant in ticket #242): * fsck_lfs buffer cache fixes, including PR #29151 * Change fsck_lfs phase 0 message to reflect reality * fsck_lfs: check phase 5 (cleanerinfo accounting) even on roll-forward * Keep better track of the free list during roll-forward, avoiding a core dump * Improve hash table use for fsck_lfs buffer and vnode cache * Document fsck_lfs flag -f, and implement -q * Add resize_lfs, including kernel support * Add LFS to mountd's list of exportable filesystem types * Make the LFS lkm work again [christos@] * Add MP locking to the LFS kernel subsystem * Fix pager_map deadlock in lfs_putpages() * Avoid incomplete file extension that looks like "partial truncation" to fsck * Use lfs_malloc for cleaner malloc, since the cleaner often runs in low-memory conditions. * Use splay trees, not hash table, to track page allocation for write. * Fix mkdir panic on full fs * Fix page accounting leak by counting differently. * Use rightly named structure for lfs_getattr [skrll@] * Cosmetic changes for readability.
|
1.2.10.1 | 06-Nov-2007 |
matt | sync with HEAD
|
1.3.10.1 | 18-May-2008 |
yamt | sync with head.
|
1.3.8.1 | 02-Jun-2008 |
mjf | Sync with HEAD.
|
1.6.4.2 | 06-Sep-2025 |
perseant | Separate buffer cache code between fsck_lfs and fsck_exfatfs. This may be reunited later, probably as a library.
|
1.6.4.1 | 29-Jun-2024 |
perseant | Implementation of exFAT filesystem, with compilation conditional on MKEXFATFS make variable.
|