History log of /src/libexec/lfs_cleanerd |
Revision | Date | Author | Comments |
1.21 | 07-Sep-2020 |
mrg | remove GCC_NO_ADDR_OF_PACKED_MEMBER for several subdir builds that are now handled by lfs_accessors.h internally.
|
1.20 | 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.19 | 10-Oct-2015 |
dholland | Use llabs(), not abs(), on the difference of daddr_t's. Caught by clang, reported by joerg.
Turn off the clang-specific compiler flags that were making the report nonfatal.
|
1.18 | 04-Mar-2014 |
joerg | Make the abs() use check non-fatal for a bogus use in the LFS cleanerd.
|
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-Aug-2009 |
pooka | branches: 1.15.6; 1.15.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.14 | 21-Jun-2009 |
christos | PR/40965: NAKAJIMA Yoshihiro: lfs_cleanerd isn't adapted to !MKDYNAMICROOT
|
1.13 | 16-Mar-2009 |
lukem | Default to WARNS=4 Exceptions that need a lower level are: getty ld.elf_so lfs_cleanerd makewhatis telnetd tftpd hpropd ipropd-master ipropd-slave kadmind kpasswdd
|
1.12 | 28-Dec-2007 |
ad | branches: 1.12.12; Make it build with src/sys from the vmlocking2 branch.
|
1.11 | 11-Nov-2006 |
jmmv | branches: 1.11.8; Move lfs_cleanerd from /usr/libexec to /libexec. This is to allow putting the root file system on a LFS volume.
Addresses PR bin/30407. No objections in tech-userlevel@.
|
1.10 | 30-Mar-2006 |
perseant | A new version of the cleaner. In general, works about as well as the old cleaner, but with more legible code.
Includes code for reading and writing to the raw disk device (so that an unmounted fs could be cleaned), for the use of a single daemon to clean multiple filesystems to save on resources, and for recording the old contents of cleaned segments to offline storage for regression testing of the LFS system as a whole; though these new features are not properly tested at this point.
|
1.9 | 19-Aug-2002 |
lukem | Use ${NETBSDSRCDIR}/some/path instead of ${.CURDIR}/../../some/path
|
1.8 | 06-Jun-2002 |
perseant | First stab at file coalescing. When the cleaner detects that it might be digging itself deeper into a hole, it forks off a subprocess that locates files with too many discontinuities and rewrites them, if there is enough room.
Optionally the user can manually coaleasce files by running with "-c".
The recent change to lfs_markv is required for the coalescer to do anything.
All of "digging itself deeper", "too many discontinuities", and "enough room" need to be better defined.
|
1.7 | 13-Nov-2000 |
perseant | Try to prevent running more than one active cleaner on a filesystem at a time.
Let lfs_cleanerd record its pid in /var/run like other daemons. Make mount_lfs not start another cleaner when updating the mount, unless it is being upgraded from read-only to read-write; when downgrading to read-only, kill the cleaner using the recorded pids.
|
1.6 | 22-Oct-1997 |
lukem | branches: 1.6.10; use CPPFLAGS instead of CFLAGS
|
1.5 | 08-Oct-1997 |
mrg | branches: 1.5.2; merge lite-2 Makefiles (rcsids), and turn on WARNS for all of libexec.
|
1.4 | 07-Oct-1997 |
mrg | WARNS?=1. RCS ids.
|
1.3 | 22-Dec-1994 |
cgd | specify man pages the new way.
|
1.2 | 03-Aug-1994 |
deraadt | do not need -I/sys
|
1.1 | 08-Jun-1994 |
mycroft | branches: 1.1.1; From 4.4-Lite, with local changes.
|
1.1.1.1 | 24-Sep-1994 |
mycroft | Import original 4.4-Lite version.
|
1.5.2.1 | 08-Nov-1997 |
lukem | sync with trunk (approved by thorpej)
|
1.6.10.1 | 03-Feb-2001 |
he | Pull up revision 1.7 (requested by perseant): Link in libutil, for pidfile().
|
1.11.8.1 | 09-Jan-2008 |
matt | sync with HEAD
|
1.12.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.15.12.1 | 20-Aug-2014 |
tls | Rebase to HEAD as of a few days ago.
|
1.15.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.8 | 03-Jun-2023 |
lukem | bsd.own.mk: rename GCC_NO_* to CC_WNO_*
Rename compiler-warning-disable variables from GCC_NO_warning to CC_WNO_warning where warning is the full warning name as used by the compiler.
GCC_NO_IMPLICIT_FALLTHRU is CC_WNO_IMPLICIT_FALLTHROUGH
Using the convention CC_compilerflag, where compilerflag is based on the full compiler flag name.
|
1.7 | 07-Jun-2020 |
fox | libexec/lfs_cleanerd: Suppress -Werror=stringop-truncation error
This logic correctly uses strncpy(3) to fully initialize a fixed-width field, and also ensures NUL-termination on the next line as other users of the field expect.
Add -Werror=stringop-truncation to prevent build failure, when run with MKSANITIZER=yes.
Error was reported when build.sh was run with MKSANITIZER=yes flag.
Reviewed by: kamil@, riastradh@
|
1.6 | 08-Jun-2013 |
dholland | Missed one of the -I${NETBSDSRCDIR}/sys hacks yesterday; remove it now.
|
1.5 | 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.4 | 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.3 | 28-Jul-2010 |
pooka | branches: 1.3.6; 1.3.12; always add to SRCS
|
1.2 | 09-Oct-2009 |
pooka | LDADD+= instead of LDADD=
|
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.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.22 | 30-Mar-2006 |
perseant | A new version of the cleaner. In general, works about as well as the old cleaner, but with more legible code.
Includes code for reading and writing to the raw disk device (so that an unmounted fs could be cleaned), for the use of a single daemon to clean multiple filesystems to save on resources, and for recording the old contents of cleaned segments to offline storage for regression testing of the LFS system as a whole; though these new features are not properly tested at this point.
|
1.21 | 19-Aug-2005 |
christos | 64 bit inode changes.
|
1.20 | 26-Feb-2005 |
perseant | Various minor LFS improvements:
* 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. * Remove the Ifile from the filesystem namespace. The cleaner now uses a fcntl call on the root inode to find the Ifile filehandle. * Make lfs_cleanerd less verbose when the filesystem is unmounted.
|
1.19 | 21-Apr-2004 |
christos | Replace the statfs() family of system calls with statvfs(). Retain binary compatibility.
|
1.18 | 07-Aug-2003 |
agc | branches: 1.18.4; Move UCB-licensed code from 4-clause to 3-clause licence.
Patches provided by Joel Baker in PR 22284, verified by myself.
|
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 | 24-Feb-2003 |
perseant | Convert lfs_cleanerd over to use the new ioctl calls instead of the lfs syscalls.
|
1.15 | 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.14 | 14-Jun-2002 |
perseant | Don't try to coalesce files that have fewer than NDADDR blocks, due to a potential problem with cleaning fragments at all.
Better sanity checks when selecting files to coalesce; in particular don't shift too far left when comparing the number of discontinuities to the log2 of the number of total blocks.
Better log messages: note beginning of coalescing correctly; also take the log message from add_segment out of "if (debug)" for symmetry with the "finished segment" message.
Use lfs_bmapv to find the inode, rather than looking it up manually in the ifile; this should give more up-to-date information, since trolling through every inode in the fs could take some time.
|
1.13 | 06-Jun-2002 |
perseant | First stab at file coalescing. When the cleaner detects that it might be digging itself deeper into a hole, it forks off a subprocess that locates files with too many discontinuities and rewrites them, if there is enough room.
Optionally the user can manually coaleasce files by running with "-c".
The recent change to lfs_markv is required for the coalescer to do anything.
All of "digging itself deeper", "too many discontinuities", and "enough room" need to be better defined.
|
1.12 | 18-Jul-2001 |
perseant | Handle segment 0 properly, if its offset is different from other segments because of the disklabel.
Fix a problem with inode block handling that sometimes caused the wrong blocks to be read, causing either cleaning failures or panics with v2 file systems.
|
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; remove redundant declarations.
|
1.9 | 09-Nov-1999 |
perseant | If the child cleaner dies repeatedly without doing anything, give up. Uses similar logic to inetd to identify such looping.
|
1.8 | 09-Nov-1999 |
perseant | Make datobyte do its arithmetic explicitly in 64 bits, so that segments beyond the first 2G of disk can be cleaned.
|
1.7 | 10-Mar-1999 |
perseant | branches: 1.7.2; 1.7.6; Cleaner changes corresponding to in-kernel LFS changes. In particular, the cleaner understands fragments; and it knows to change bi_bp to reflect a change in bi_daddr, if lfs_bmapv says that there is one.
|
1.6 | 07-Oct-1998 |
christos | PR/6248: Konrad Schroder: lfs_cleanerd could use syslog() for notices, instead of err()/warn()
|
1.5 | 11-Sep-1998 |
pk | type fixes, in part from PR#6032
|
1.4 | 01-Mar-1998 |
fvdl | Merge with Lite2 + local changes
|
1.3 | 07-Oct-1997 |
mrg | WARNS?=1. RCS ids.
|
1.2 | 07-Oct-1997 |
mrg | WARNS?=1. RCS ids.
|
1.1 | 08-Jun-1994 |
mycroft | branches: 1.1.1; From 4.4-Lite, with local changes.
|
1.1.1.2 | 29-Apr-1997 |
tls | Import from 4.4BSD-Lite2
|
1.1.1.1 | 24-Sep-1994 |
mycroft | Import original 4.4-Lite version.
|
1.7.6.1 | 27-Dec-1999 |
wrstuden | Pull up to last week's -current.
|
1.7.2.2 | 16-Dec-1999 |
he | Pull up revision 1.9 (requested by perseant): If the cleaner is being respawned and dies repeatedly, avoid looping.
|
1.7.2.1 | 09-Nov-1999 |
he | Pull up revision 1.8 (requested by perseant): Fix arithmetic overflow which had prevented cleaning of segments above the first 2GB of the file system.
|
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 | 29-Jun-2001 |
perseant | Get rid of __P(), protoizing where it had not already been done
|
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.18.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.15 | 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.14 | 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.13 | 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.12 | 12-Aug-2015 |
dholland | Fix assorted 64->32 truncations related to BLOCK_INFO.
Also make note of a cleaner limitation: it seems that when it goes to coalesce discontiguous files, it mallocs an array with one BLOCK_INFO for every block in the file. Therefore, with 64-bit LFS, on a 32-bit platform it will be possible to have files large enough to overflow the cleaner's address space. Currently these will be skipped and cause warnings via syslog.
At some point someone should rewrite the logic to coalesce files to use chunks of some reasonable size, as discontinuity between such chunks is immaterial and mallocing this much space is silly and fragile. Also, the kernel only accepts up to 65536 blocks at a time for bmapv and markv, so processing more than this at once probably isn't useful and may not even work currently. I don't want to change this around just now as it's not entirely trivial.
|
1.11 | 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.10 | 02-Aug-2015 |
dholland | Second batch of 64 -> 32 truncations in lfs, along with more minor tidyups and corrections in passing.
|
1.9 | 28-Jul-2015 |
dholland | Use lfs_accessors.h in conjunction with the cleaner's struct clfs. Remove previous hacks.
|
1.8 | 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.7 | 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.6 | 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.5 | 16-Mar-2009 |
lukem | fix WARNS=3 issues; * sprinkle const * avoid tests < 0 on unsigned types * test fwrite() returns nmemb not <0
|
1.4 | 31-Jul-2006 |
martin | branches: 1.4.28; Make filehandles opaque to userland
|
1.3 | 13-Jul-2006 |
martin | Fix alignement problems for fhandle_t, exposed by gcc4.1.
While touching all vptofh/fhtovp functions, get rid of VFS_MAXFIDSIZ, version the getfh(2) syscall and explicitly pass the size available in the filehandle from userland.
Discussed on tech-kern, with lots of help from yamt (thanks!).
|
1.2 | 12-May-2006 |
perseant | Be more careful about checking return value of {m,re}alloc().
In determining when to stop reading segments when counting bytes (-b flag), total the sizes of the blocks we're actually writing instead of assuming they are all full blocks: many could be fragments or inode blocks. This increases the number of segments per Ifile write, markedly improving the efficiency of the cleaner in the small file case.
|
1.1 | 30-Mar-2006 |
perseant | A new version of the cleaner. In general, works about as well as the old cleaner, but with more legible code.
Includes code for reading and writing to the raw disk device (so that an unmounted fs could be cleaned), for the use of a single daemon to clean multiple filesystems to save on resources, and for recording the old contents of cleaned segments to offline storage for regression testing of the LFS system as a whole; though these new features are not properly tested at this point.
|
1.4.28.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.56 | 30-Mar-2006 |
perseant | A new version of the cleaner. In general, works about as well as the old cleaner, but with more legible code.
Includes code for reading and writing to the raw disk device (so that an unmounted fs could be cleaned), for the use of a single daemon to clean multiple filesystems to save on resources, and for recording the old contents of cleaned segments to offline storage for regression testing of the LFS system as a whole; though these new features are not properly tested at this point.
|
1.55 | 19-Aug-2005 |
christos | 64 bit inode changes.
|
1.54 | 23-Apr-2005 |
perseant | Provide a resize_lfs(8), including kernel and cleaner support. The current implementation requires the fs to be mounted while resizing. Tested in both directions, and everything appears to work happily, but ymmv.
|
1.53 | 30-Mar-2005 |
xtraeme | Add missing flags to usage()
|
1.52 | 26-Feb-2005 |
perseant | branches: 1.52.2; Various minor LFS improvements:
* 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. * Remove the Ifile from the filesystem namespace. The cleaner now uses a fcntl call on the root inode to find the Ifile filehandle. * Make lfs_cleanerd less verbose when the filesystem is unmounted.
|
1.51 | 21-Apr-2004 |
christos | Replace the statfs() family of system calls with statvfs(). Retain binary compatibility.
|
1.50 | 19-Sep-2003 |
itojun | branches: 1.50.4; realloc pedant
|
1.49 | 07-Aug-2003 |
agc | Move UCB-licensed code from 4-clause to 3-clause licence.
Patches provided by Joel Baker in PR 22284, verified by myself.
|
1.48 | 13-Jul-2003 |
itojun | use bounded string ops. check malloc failure. asprintf is easier than complicated strcat/strcpy combination.
|
1.47 | 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.46 | 02-Mar-2003 |
perseant | Let the cleaner use LFCNRECLAIM to help empty segments along, if it thinks it needs to clean and segments are tantalizingly lingering in the "empty but dirty" state.
|
1.45 | 25-Feb-2003 |
perseant | Make fs-specific fcntl macros take three arguments (approved wrstuden). Let LFS use fcntl for cleaner functions.
|
1.44 | 24-Feb-2003 |
perseant | Convert lfs_cleanerd over to use the new ioctl calls instead of the lfs syscalls.
|
1.43 | 05-Feb-2003 |
perry | "Utilize" has exactly the same meaning as "use," but it is more difficult to read and understand. Most manuals of English style therefore say that you should use "use".
|
1.42 | 28-Jan-2003 |
mrg | make this build on alpha after daddr_t->64bit
|
1.41 | 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.40 | 15-Dec-2002 |
yamt | for -b, use ssize instead of segshift. segshift is invalid for v2 filesystems.
|
1.39 | 14-Jun-2002 |
perseant | Don't try to coalesce files that have fewer than NDADDR blocks, due to a potential problem with cleaning fragments at all.
Better sanity checks when selecting files to coalesce; in particular don't shift too far left when comparing the number of discontinuities to the log2 of the number of total blocks.
Better log messages: note beginning of coalescing correctly; also take the log message from add_segment out of "if (debug)" for symmetry with the "finished segment" message.
Use lfs_bmapv to find the inode, rather than looking it up manually in the ifile; this should give more up-to-date information, since trolling through every inode in the fs could take some time.
|
1.38 | 06-Jun-2002 |
perseant | First stab at file coalescing. When the cleaner detects that it might be digging itself deeper into a hole, it forks off a subprocess that locates files with too many discontinuities and rewrites them, if there is enough room.
Optionally the user can manually coaleasce files by running with "-c".
The recent change to lfs_markv is required for the coalescer to do anything.
All of "digging itself deeper", "too many discontinuities", and "enough room" need to be better defined.
|
1.37 | 29-Apr-2002 |
yamt | branches: 1.37.2; remove one of duplicated "bfree" from debug message.
|
1.36 | 29-Apr-2002 |
yamt | use errx instead of err in some places in order to avoid "Undefined error: 0"
|
1.35 | 11-Jan-2002 |
itojun | daemon(3) should be used prior to file descriptor setups.
|
1.34 | 21-Nov-2001 |
wiz | "than" instead of "then".
|
1.33 | 18-Jul-2001 |
perseant | fix printf format on alpha
|
1.32 | 18-Jul-2001 |
perseant | Handle segment 0 properly, if its offset is different from other segments because of the disklabel.
Fix a problem with inode block handling that sometimes caused the wrong blocks to be read, causing either cleaning failures or panics with v2 file systems.
|
1.31 | 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.30 | 04-Feb-2001 |
christos | branches: 1.30.2; remove redundant declarations.
|
1.29 | 16-Jan-2001 |
cgd | avoid C sequence point issues warned about by development version of gcc.
|
1.28 | 10-Jan-2001 |
lukem | be more consistent about syslog usage. now it's more like: err fatal errors warning warnings info status messages (-d), stats on SIGxxx debug debug messages (-d), debug stats
|
1.27 | 23-Nov-2000 |
perseant | Don't "compress" segment data if we were using mmap instead of malloc/copy to read the segment.
|
1.26 | 22-Nov-2000 |
perseant | Check for ENOENT return from lfs_{bmapv,markv} and do the right thing with it, avoiding needless looping (possibly infinite looping) on certain kinds of errors.
Get rid of erroneous free() in error return from add_segment.
Patch from Jesse Off <joff@gci-net.com> (PR #11547).
|
1.25 | 13-Nov-2000 |
perseant | Try to prevent running more than one active cleaner on a filesystem at a time.
Let lfs_cleanerd record its pid in /var/run like other daemons. Make mount_lfs not start another cleaner when updating the mount, unless it is being upgraded from read-only to read-write; when downgrading to read-only, kill the cleaner using the recorded pids.
|
1.24 | 11-Nov-2000 |
perseant | Don't hold every segment that is being cleaned in memory in its entirety; instead, if the segment doesn't have many live blocks, copy them to a more appropriately sized chunk of memory and release the original.
This should prevent the cleaner from distending itself when cleaning many segments with only one or two live blocks each, as when using the "-b" option.
|
1.23 | 03-Nov-2000 |
perseant | Fix memory leak described in PR #11094 (patch from Jesse Off <joff@gci-net.com>).
|
1.22 | 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.21 | 04-Jul-2000 |
perseant | cleaner changes corrseponding to kernel changes
|
1.20 | 03-Jul-2000 |
perseant | User-level changes corrseponding to my latest kernel changes. newfs_lfs gives lfs_minfreeseg a value of 1/8 of the total segments on the disk, based on rough empirical data, but this should be refined in the future.
|
1.19 | 21-Jun-2000 |
perseant | Make sure to segunmap segments on error in lfs_bmapv or lfs_markv. Prevents a memory leak of by default 1 Mb per error. May fix PR #9149.
|
1.18 | 18-Jan-2000 |
perseant | branches: 1.18.4; Take care of memory leaks
|
1.17 | 09-Nov-1999 |
perseant | If the child cleaner dies repeatedly without doing anything, give up. Uses similar logic to inetd to identify such looping.
|
1.16 | 30-Sep-1999 |
soren | Remove extraneous colons and newlines from perror(3) arguments.
|
1.15 | 16-Jun-1999 |
tron | branches: 1.15.2; Correct wrong conversion specifications in calls to syslog(3).
|
1.14 | 15-Jun-1999 |
perseant | The cleaner now marks empty segments clean without having to read their contents, a substantial optimization if the work load is right: if enough empty segments are available, the cleaner never has to read or write *any* blocks except those on the Ifile. When the cleaner wakes up it marks all empty segments clean before deciding whether any further segments need to be cleaned.
Fixed overflow bugs in the cleaner's handling of the cost/benefit metric for empty segments.
|
1.13 | 14-Mar-1999 |
drochner | branches: 1.13.2; work around printf format warnings on alpha
|
1.12 | 10-Mar-1999 |
perseant | Cleaner changes corresponding to in-kernel LFS changes. In particular, the cleaner understands fragments; and it knows to change bi_bp to reflect a change in bi_daddr, if lfs_bmapv says that there is one.
|
1.11 | 07-Oct-1998 |
christos | PR/6248: Konrad Schroder: lfs_cleanerd could use syslog() for notices, instead of err()/warn()
|
1.10 | 07-Oct-1998 |
christos | PR/6249: Konrad Schroder lfs_cleanerd uses wrong units when computing which segments to clean
|
1.9 | 07-Oct-1998 |
christos | PR/6247: Konrad Schroder: lfs_cleanerd overflows char register counting live bytes
|
1.8 | 11-Sep-1998 |
pk | type fixes, in part from PR#6032
|
1.7 | 22-May-1998 |
hubertf | use correct getopt parameters, as per PR 5480 from Konrad Schroder <perseant@hhhh.org>
|
1.6 | 01-Apr-1998 |
kleink | Need <time.h> for time() and ctime() prototypes.
|
1.5 | 01-Mar-1998 |
fvdl | Merge with Lite2 + local changes
|
1.4 | 20-Oct-1997 |
enami | No need to decalre optind.
|
1.3 | 08-Oct-1997 |
enami | Compare a return value of getopt() against -1 instead of EOF.
|
1.2 | 07-Oct-1997 |
mrg | WARNS?=1. RCS ids.
|
1.1 | 08-Jun-1994 |
mycroft | branches: 1.1.1; From 4.4-Lite, with local changes.
|
1.1.1.2 | 29-Apr-1997 |
tls | Import from 4.4BSD-Lite2
|
1.1.1.1 | 24-Sep-1994 |
mycroft | Import original 4.4-Lite version.
|
1.13.2.4 | 31-Jan-2000 |
he | Pull up revision 1.18 (requested by perseant): Fix a few memory leaks in lfs_cleanerd.
|
1.13.2.3 | 16-Dec-1999 |
he | Pull up revision 1.17 (requested by perseant): If the cleaner is being respawned and dies repeatedly, avoid looping.
|
1.13.2.2 | 01-Jul-1999 |
perry | pullup 1.14->1.15 (perseant)
|
1.13.2.1 | 25-Jun-1999 |
perry | pullup 1.13->1.14 (perseant)
|
1.15.2.1 | 27-Dec-1999 |
wrstuden | Pull up to last week's -current.
|
1.18.4.4 | 03-Feb-2001 |
he | Pull up revisions 1.24-1.27 (requested by perseant): o Compress segments in memory if neccessary o Record our pid in /var/run for mount_lfs o Check for error return from lfs_markv, avoiding neeless looping o Don't free mmap()d memory if using "-m" flag
|
1.18.4.3 | 03-Feb-2001 |
he | Pull up revision 1.23 (requested by perseant): Plug memory leak in lfs_cleanerd. Fixes PR#11094.
|
1.18.4.2 | 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.18.4.1 | 21-Jun-2000 |
perseant | Pull up r1.19 of cleanerd.c: make sure to segunmap segments on error in lfs_bmapv or lfs_markv. Prevents a memory leak of (by default) 1 Mb per error. May fix PR #9149.
|
1.30.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.30.2.2 | 29-Jun-2001 |
perseant | Get rid of __P(), protoizing where it had not already been done
|
1.30.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.37.2.1 | 15-Jun-2003 |
tron | Pull up revision 1.40 (requested by toshii in ticket #1232): for -b, use ssize instead of segshift. segshift is invalid for v2 filesystems.
|
1.50.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.52.2.2 | 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.52.2.1 | 03-Apr-2005 |
tron | Pull up revision 1.53 (requested by xtraeme in ticket #81): Add missing flags to usage()
|
1.4 | 06-Jun-2013 |
dholland | ufs -> ulfs for lfs_cleanerd
|
1.3 | 28-Apr-2008 |
martin | branches: 1.3.4; 1.3.26; Remove clause 3 and 4 from TNF licenses
|
1.2 | 12-May-2006 |
perseant | branches: 1.2.18; Be more careful about checking return value of {m,re}alloc().
In determining when to stop reading segments when counting bytes (-b flag), total the sizes of the blocks we're actually writing instead of assuming they are all full blocks: many could be fragments or inode blocks. This increases the number of segments per Ifile write, markedly improving the efficiency of the cleaner in the small file case.
|
1.1 | 30-Mar-2006 |
perseant | A new version of the cleaner. In general, works about as well as the old cleaner, but with more legible code.
Includes code for reading and writing to the raw disk device (so that an unmounted fs could be cleaned), for the use of a single daemon to clean multiple filesystems to save on resources, and for recording the old contents of cleaned segments to offline storage for regression testing of the LFS system as a whole; though these new features are not properly tested at this point.
|
1.2.18.1 | 18-May-2008 |
yamt | sync with head.
|
1.3.26.1 | 23-Jun-2013 |
tls | resync from head
|
1.3.4.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.33 | 10-Oct-2015 |
dholland | Use llabs(), not abs(), on the difference of daddr_t's. Caught by clang, reported by joerg.
Turn off the clang-specific compiler flags that were making the report nonfatal.
|
1.32 | 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.31 | 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.30 | 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.29 | 12-Aug-2015 |
dholland | Fix assorted 64->32 truncations related to BLOCK_INFO.
Also make note of a cleaner limitation: it seems that when it goes to coalesce discontiguous files, it mallocs an array with one BLOCK_INFO for every block in the file. Therefore, with 64-bit LFS, on a 32-bit platform it will be possible to have files large enough to overflow the cleaner's address space. Currently these will be skipped and cause warnings via syslog.
At some point someone should rewrite the logic to coalesce files to use chunks of some reasonable size, as discontinuity between such chunks is immaterial and mallocing this much space is silly and fragile. Also, the kernel only accepts up to 65536 blocks at a time for bmapv and markv, so processing more than this at once probably isn't useful and may not even work currently. I don't want to change this around just now as it's not entirely trivial.
|
1.28 | 28-Jul-2015 |
dholland | Use lfs_accessors.h in conjunction with the cleaner's struct clfs. Remove previous hacks.
|
1.27 | 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.26 | 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.25 | 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.24 | 29-Mar-2015 |
chopps | - Fix fallout for recent bread() change (removing cred arg).
|
1.23 | 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.22 | 08-Jun-2013 |
dholland | Missed one of the -I${NETBSDSRCDIR}/sys hacks yesterday; remove it now.
|
1.21 | 06-Jun-2013 |
dholland | ufs -> ulfs for lfs_cleanerd
|
1.20 | 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.19 | 02-Jan-2012 |
perseant | branches: 1.19.6; In lfs_cleanerd, check errno earlier, to avoid premature exit when the real errno was EAGAIN.
When coalescing, check against NULL to avoid seg fault.
|
1.18 | 06-Aug-2009 |
pooka | branches: 1.18.6; 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.17 | 16-Mar-2009 |
lukem | fix WARNS=3 issues; * sprinkle const * avoid tests < 0 on unsigned types * test fwrite() returns nmemb not <0
|
1.16 | 16-May-2008 |
hannken | branches: 1.16.6; 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.15 | 28-Apr-2008 |
martin | branches: 1.15.2; Remove clause 3 and 4 from TNF licenses
|
1.14 | 08-Oct-2007 |
ad | branches: 1.14.6; brelse() now takes two arguments.
|
1.13 | 12-May-2006 |
perseant | branches: 1.13.10; Be more careful about checking return value of {m,re}alloc().
In determining when to stop reading segments when counting bytes (-b flag), total the sizes of the blocks we're actually writing instead of assuming they are all full blocks: many could be fragments or inode blocks. This increases the number of segments per Ifile write, markedly improving the efficiency of the cleaner in the small file case.
|
1.12 | 01-Apr-2006 |
christos | Coverity CID 2792: Fix memory leaks
|
1.11 | 30-Mar-2006 |
perseant | A new version of the cleaner. In general, works about as well as the old cleaner, but with more legible code.
Includes code for reading and writing to the raw disk device (so that an unmounted fs could be cleaned), for the use of a single daemon to clean multiple filesystems to save on resources, and for recording the old contents of cleaned segments to offline storage for regression testing of the LFS system as a whole; though these new features are not properly tested at this point.
|
1.10 | 19-Aug-2005 |
christos | 64 bit inode changes.
|
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 | 25-Feb-2003 |
perseant | Make fs-specific fcntl macros take three arguments (approved wrstuden). Let LFS use fcntl for cleaner functions.
|
1.7 | 24-Feb-2003 |
perseant | Convert lfs_cleanerd over to use the new ioctl calls instead of the lfs syscalls.
|
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 | 15-Dec-2002 |
yamt | - fix memory leak. - add more error checks. - spaces -> tab
|
1.4 | 24-Nov-2002 |
yamt | fix calculation bugs that prevents coalescing from working properly. PR 19133.
|
1.3 | 14-Jun-2002 |
perseant | Note each type of failure in clean_inode and provide statistics on failures as well as successes when a run of clean_all_inodes completes.
Explicitly cast to off_t in get_dinode and get_rawblock, to make sure we read the right block.
|
1.2 | 14-Jun-2002 |
perseant | Don't try to coalesce files that have fewer than NDADDR blocks, due to a potential problem with cleaning fragments at all.
Better sanity checks when selecting files to coalesce; in particular don't shift too far left when comparing the number of discontinuities to the log2 of the number of total blocks.
Better log messages: note beginning of coalescing correctly; also take the log message from add_segment out of "if (debug)" for symmetry with the "finished segment" message.
Use lfs_bmapv to find the inode, rather than looking it up manually in the ifile; this should give more up-to-date information, since trolling through every inode in the fs could take some time.
|
1.1 | 06-Jun-2002 |
perseant | First stab at file coalescing. When the cleaner detects that it might be digging itself deeper into a hole, it forks off a subprocess that locates files with too many discontinuities and rewrites them, if there is enough room.
Optionally the user can manually coaleasce files by running with "-c".
The recent change to lfs_markv is required for the coalescer to do anything.
All of "digging itself deeper", "too many discontinuities", and "enough room" need to be better defined.
|
1.13.10.1 | 06-Nov-2007 |
matt | sync with HEAD
|
1.14.6.1 | 18-May-2008 |
yamt | sync with head.
|
1.15.2.1 | 23-Jun-2008 |
wrstuden | Sync w/ -current. 34 merge conflicts to follow.
|
1.16.6.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.18.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.18.6.2 | 23-Jan-2013 |
yamt | sync with head
|
1.18.6.1 | 17-Apr-2012 |
yamt | sync with head
|
1.19.6.2 | 23-Jun-2013 |
tls | resync from head
|
1.19.6.1 | 25-Feb-2013 |
tls | resync with head
|
1.10 | 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.9 | 12-Apr-2012 |
joerg | branches: 1.9.2; Use the same loop order for freeing as for allocation. Simpler code and easier to process for analyzers.
|
1.8 | 01-Jul-2011 |
joerg | branches: 1.8.2; Fix memset usage.
|
1.7 | 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.6 | 28-Apr-2008 |
martin | Remove clause 3 and 4 from TNF licenses
|
1.5 | 08-Oct-2007 |
ad | branches: 1.5.6; brelse() now takes two arguments.
|
1.4 | 19-May-2006 |
christos | branches: 1.4.10; Coverity CID 3766: Avoid null pointer deref
|
1.3 | 12-May-2006 |
perseant | Be more careful about checking return value of {m,re}alloc().
In determining when to stop reading segments when counting bytes (-b flag), total the sizes of the blocks we're actually writing instead of assuming they are all full blocks: many could be fragments or inode blocks. This increases the number of segments per Ifile write, markedly improving the efficiency of the cleaner in the small file case.
|
1.2 | 01-Apr-2006 |
christos | Coverity CID 2846: Don't use LIST_FOREACH if you are going to free the cursor
|
1.1 | 30-Mar-2006 |
perseant | A new version of the cleaner. In general, works about as well as the old cleaner, but with more legible code.
Includes code for reading and writing to the raw disk device (so that an unmounted fs could be cleaned), for the use of a single daemon to clean multiple filesystems to save on resources, and for recording the old contents of cleaned segments to offline storage for regression testing of the LFS system as a whole; though these new features are not properly tested at this point.
|
1.4.10.1 | 06-Nov-2007 |
matt | sync with HEAD
|
1.5.6.1 | 18-May-2008 |
yamt | sync with head.
|
1.8.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.8.2.1 | 17-Apr-2012 |
yamt | sync with head
|
1.9.2.1 | 23-Jun-2013 |
tls | resync from head
|
1.1 | 30-Mar-2006 |
perseant | A new version of the cleaner. In general, works about as well as the old cleaner, but with more legible code.
Includes code for reading and writing to the raw disk device (so that an unmounted fs could be cleaned), for the use of a single daemon to clean multiple filesystems to save on resources, and for recording the old contents of cleaned segments to offline storage for regression testing of the LFS system as a whole; though these new features are not properly tested at this point.
|
1.21 | 31-Jul-2021 |
andvar | s/threshhold/threshold
|
1.20 | 31-Aug-2019 |
wiz | New sentence, new line. Punctuation improvements.
|
1.19 | 30-Aug-2019 |
brad | Add support for passing the raw device name separate from the filesystem. This is useful in the case where the cleaner is compiled into code, such as rump_lfs and the ATF tests. This helps to fix bin/54488
|
1.18 | 06-Aug-2009 |
wiz | branches: 1.18.46; 1.18.48; Describe -D. Bump date.
|
1.17 | 23-Dec-2006 |
wiz | Bump date for previous.
|
1.16 | 18-Nov-2006 |
tls | Temporarily disable -c (file coalescing) until data corruption issues can be resolved.
|
1.15 | 01-Apr-2006 |
perseant | Document -i option, update date; at the request of wiz@.
|
1.14 | 30-Mar-2006 |
perseant | A new version of the cleaner. In general, works about as well as the old cleaner, but with more legible code.
Includes code for reading and writing to the raw disk device (so that an unmounted fs could be cleaned), for the use of a single daemon to clean multiple filesystems to save on resources, and for recording the old contents of cleaned segments to offline storage for regression testing of the LFS system as a whole; though these new features are not properly tested at this point.
|
1.13 | 07-Aug-2003 |
agc | Move UCB-licensed code from 4-clause to 3-clause licence.
Patches provided by Joel Baker in PR 22284, verified by myself.
|
1.12 | 29-Sep-2002 |
wiz | Begin new sentences on new lines. Patch from Robert Elz (kre at munnari oz au).
|
1.11 | 06-Jun-2002 |
perseant | update lfs_cleanerd manual page for new -c option
|
1.10 | 15-Jan-2002 |
wiz | Whitespace nits, sort SEE ALSO.
|
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 | 08-Nov-2000 |
hubertf | branches: 1.8.2; in SEE also, xref newfs_lfs(8), sort entries and seperate by ","
|
1.7 | 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.6 | 22-Mar-1999 |
garbled | branches: 1.6.10; More and more .Os cleanups. .Os is defined in the tmac.doc-common file, so we shouldn't override it with versions in the manpages. Many more to come.
|
1.5 | 06-Feb-1998 |
perry | macroize BSD, NetBSD, FreeBSD and misc cleanup
|
1.4 | 20-Oct-1997 |
enami | Fix usage of .Nm.
|
1.3 | 07-Oct-1997 |
mrg | WARNS?=1. RCS ids.
|
1.2 | 29-May-1997 |
cgd | Fix broken uses of Dd. Both the mdoc and mdoc.samples pages agree: .Dd is supposed to be invoked like: .Dd month day, year e.g. ".Dd January 25, 1989", rather than: .Dd "month day, year" which is what these pages did.
|
1.1 | 08-Jun-1994 |
mycroft | branches: 1.1.1; From 4.4-Lite, with local changes.
|
1.1.1.1 | 24-Sep-1994 |
mycroft | Import original 4.4-Lite version.
|
1.6.10.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.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.18.48.1 | 02-Sep-2019 |
martin | Pull up following revision(s) (requested by brad in ticket #110):
libexec/lfs_cleanerd/lfs_cleanerd.c: revision 1.59 libexec/lfs_cleanerd/lfs_cleanerd.8: revision 1.19 sbin/resize_lfs/resize_lfs.c: revision 1.15 usr.sbin/puffs/rump_lfs/rump_lfs.c: revision 1.19 libexec/lfs_cleanerd/lfs_cleanerd.c: revision 1.60 lib/libutil/getdiskrawname.c: revision 1.6 tests/fs/common/fstest_lfs.c: revision 1.7
Use getdiskrawname to find the device name. Reviewed by Christos
-
Teach getdiskrawname and getdiskcookedname about zvols. Reviewed by Christos
-
Add support for passing the raw device name separate from the filesystem. This is useful in the case where the cleaner is compiled into code, such as rump_lfs and the ATF tests. This helps to fix bin/54488
-
The cleaner is compiled into rump_lfs and executed as a thread. Pass in the raw device using the new -J option. This avoids the use of getdiskrawname which is not particularly rump safe in this context and insures that the rump container device is used for cleaning, not the outer device.
|
1.18.46.1 | 13-Apr-2020 |
martin | Mostly merge changes from HEAD upto 20200411
|
1.60 | 30-Aug-2019 |
brad | Add support for passing the raw device name separate from the filesystem. This is useful in the case where the cleaner is compiled into code, such as rump_lfs and the ATF tests. This helps to fix bin/54488
|
1.59 | 22-Aug-2019 |
brad | Use getdiskrawname to find the device name
Reviewed by Christos
|
1.58 | 18-Mar-2016 |
mrg | branches: 1.58.16; 1.58.18; move the compiler hack closer to the source of the fail
|
1.57 | 16-Mar-2016 |
mrg | make the GCC 4.8 specific hack for ci.clean being set GCC >= 4.8.
|
1.56 | 19-Feb-2016 |
riastradh | Need <stdbool.h> for true/false.
|
1.55 | 15-Oct-2015 |
dholland | Enable lfs64 in the cleaner.
|
1.54 | 03-Oct-2015 |
dholland | Use IINFO in the cleaner.
|
1.53 | 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.52 | 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.51 | 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.50 | 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.49 | 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.48 | 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.47 | 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.46 | 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.45 | 12-Aug-2015 |
dholland | Fix assorted 64->32 truncations related to BLOCK_INFO.
Also make note of a cleaner limitation: it seems that when it goes to coalesce discontiguous files, it mallocs an array with one BLOCK_INFO for every block in the file. Therefore, with 64-bit LFS, on a 32-bit platform it will be possible to have files large enough to overflow the cleaner's address space. Currently these will be skipped and cause warnings via syslog.
At some point someone should rewrite the logic to coalesce files to use chunks of some reasonable size, as discontinuity between such chunks is immaterial and mallocing this much space is silly and fragile. Also, the kernel only accepts up to 65536 blocks at a time for bmapv and markv, so processing more than this at once probably isn't useful and may not even work currently. I don't want to change this around just now as it's not entirely trivial.
|
1.44 | 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.43 | 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.42 | 02-Aug-2015 |
dholland | Second batch of 64 -> 32 truncations in lfs, along with more minor tidyups and corrections in passing.
|
1.41 | 28-Jul-2015 |
dholland | Use lfs_accessors.h in conjunction with the cleaner's struct clfs. Remove previous hacks.
|
1.40 | 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.39 | 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.38 | 29-Mar-2015 |
chopps | - Fix fallout for recent bread() change (removing cred arg).
|
1.37 | 19-Oct-2013 |
christos | fix unused variable warnings
|
1.36 | 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.35 | 08-Jun-2013 |
dholland | Missed one of the -I${NETBSDSRCDIR}/sys hacks yesterday; remove it now.
|
1.34 | 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.33 | 06-Jun-2013 |
dholland | ufs -> ulfs for lfs_cleanerd
|
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 | 16-Apr-2012 |
joerg | branches: 1.31.2; Make load_threshold double and restore original value of 0.2. From NAKAJIMA Yoshihiro.
|
1.30 | 12-Apr-2012 |
joerg | Don't assign non-integral constants to integral variables.
|
1.29 | 02-Feb-2012 |
perseant | Shut down the cleaner earlier if the filesystem is unmounted.
|
1.28 | 02-Jan-2012 |
perseant | In lfs_cleanerd, check errno earlier, to avoid premature exit when the real errno was EAGAIN.
When coalescing, check against NULL to avoid seg fault.
|
1.27 | 23-Dec-2010 |
mlelstv | branches: 1.27.6; Deduce raw device correctly by prepending "r" to basename.
|
1.26 | 16-Aug-2010 |
pooka | Don't exit when running as a lib after FS is unmounted, just return from the mainloop.
|
1.25 | 29-Jul-2010 |
pooka | Do the semaphore trick only if the cleaner is run as a lib -- the standard installation doesn't get linked against librt or libpthread.
|
1.24 | 29-Jul-2010 |
pooka | Add a method for posting a semaphore when cleaner init has reached the main loop. This is useful for very quickly executed lfs runs such as those in tests, as an initialization phase cleaner may prevent file system unmount.
|
1.23 | 16-Feb-2010 |
mlelstv | Read the padded superblocks to avoid problems with disks that have larger sectors than 512 Bytes.
|
1.22 | 09-Oct-2009 |
pooka | Attempt to recover slightly more gracefully if the kernel socket is shutdown.
|
1.21 | 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.20 | 06-Aug-2009 |
pooka | add D to getopt so that previous actually works
|
1.19 | 06-Aug-2009 |
pooka | add -D, which prompts to stay on foreground without debug spewage
|
1.18 | 06-Aug-2009 |
pooka | Check main loop fcntl return value and error out if it fails. Prevents e.g. from 5.0 cleaner looping forever against -current lfs driver (fcntl data structure sizes are different).
|
1.17 | 16-Mar-2009 |
lukem | fix WARNS=3 issues; * sprinkle const * avoid tests < 0 on unsigned types * test fwrite() returns nmemb not <0
|
1.16 | 15-Mar-2009 |
lukem | avoid a shadowed variable
|
1.15 | 16-May-2008 |
hannken | branches: 1.15.6; 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.14 | 28-Apr-2008 |
martin | branches: 1.14.2; Remove clause 3 and 4 from TNF licenses
|
1.13 | 08-Oct-2007 |
ad | branches: 1.13.6; brelse() now takes two arguments.
|
1.12 | 18-Nov-2006 |
tls | branches: 1.12.8; Temporarily disable -c (file coalescing) until data corruption issues can be resolved.
|
1.11 | 01-Sep-2006 |
perseant | Pay attention to the new LFS_CLEANER_MUST_CLEAN flag in the Ifile.
|
1.10 | 31-Jul-2006 |
martin | Make filehandles opaque to userland
|
1.9 | 13-Jul-2006 |
martin | Fix alignement problems for fhandle_t, exposed by gcc4.1.
While touching all vptofh/fhtovp functions, get rid of VFS_MAXFIDSIZ, version the getfh(2) syscall and explicitly pass the size available in the filehandle from userland.
Discussed on tech-kern, with lots of help from yamt (thanks!).
|
1.8 | 07-Jul-2006 |
perseant | Place an upper bound on the number of segments to clean at one time, no matter how empty they are.
Note that if two blocks have the same inode and block number, they sort the same (this should never happen, but if it does there's no reason to have qsort scramble the list).
Add some diagnostic syslog messages for unusual cases.
|
1.7 | 12-May-2006 |
perseant | Be more careful about checking return value of {m,re}alloc().
In determining when to stop reading segments when counting bytes (-b flag), total the sizes of the blocks we're actually writing instead of assuming they are all full blocks: many could be fragments or inode blocks. This increases the number of segments per Ifile write, markedly improving the efficiency of the cleaner in the small file case.
|
1.6 | 11-May-2006 |
mrg | avoid some char * vs. u_char * issues.
|
1.5 | 14-Apr-2006 |
perseant | When checking hidden cleaning costs, don't erroneously add the first indirect block when considering the cleaning of block numbers less than NDADDR (which do not use indirect blocks).
Also, note the loss of only half a block per segment to fragmentation when considering the benefit function, rather than a whole block.
|
1.4 | 05-Apr-2006 |
perseant | Look for the inode pointers in the right place if lfs_bsize != lfs_fsize.
|
1.3 | 05-Apr-2006 |
perseant | Handle the case of inode blocks misidentified by the segment headers correctly, a problem reported by Kurt Schreiner; as well as similar error cases (realloc returning NULL or no cleanable segments found).
|
1.2 | 01-Apr-2006 |
christos | Coverity CID 2847: Don't use LIST_FOREACH if you are going to free the current pointer!
|
1.1 | 30-Mar-2006 |
perseant | A new version of the cleaner. In general, works about as well as the old cleaner, but with more legible code.
Includes code for reading and writing to the raw disk device (so that an unmounted fs could be cleaned), for the use of a single daemon to clean multiple filesystems to save on resources, and for recording the old contents of cleaned segments to offline storage for regression testing of the LFS system as a whole; though these new features are not properly tested at this point.
|
1.12.8.1 | 06-Nov-2007 |
matt | sync with HEAD
|
1.13.6.1 | 18-May-2008 |
yamt | sync with head.
|
1.14.2.1 | 23-Jun-2008 |
wrstuden | Sync w/ -current. 34 merge conflicts to follow.
|
1.15.6.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.27.6.4 | 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.27.6.3 | 23-Jan-2013 |
yamt | sync with head
|
1.27.6.2 | 23-May-2012 |
yamt | sync with head.
|
1.27.6.1 | 17-Apr-2012 |
yamt | sync with head
|
1.31.2.3 | 20-Aug-2014 |
tls | Rebase to HEAD as of a few days ago.
|
1.31.2.2 | 23-Jun-2013 |
tls | resync from head
|
1.31.2.1 | 25-Feb-2013 |
tls | resync with head
|
1.58.18.1 | 02-Sep-2019 |
martin | Pull up following revision(s) (requested by brad in ticket #110):
libexec/lfs_cleanerd/lfs_cleanerd.c: revision 1.59 libexec/lfs_cleanerd/lfs_cleanerd.8: revision 1.19 sbin/resize_lfs/resize_lfs.c: revision 1.15 usr.sbin/puffs/rump_lfs/rump_lfs.c: revision 1.19 libexec/lfs_cleanerd/lfs_cleanerd.c: revision 1.60 lib/libutil/getdiskrawname.c: revision 1.6 tests/fs/common/fstest_lfs.c: revision 1.7
Use getdiskrawname to find the device name. Reviewed by Christos
-
Teach getdiskrawname and getdiskcookedname about zvols. Reviewed by Christos
-
Add support for passing the raw device name separate from the filesystem. This is useful in the case where the cleaner is compiled into code, such as rump_lfs and the ATF tests. This helps to fix bin/54488
-
The cleaner is compiled into rump_lfs and executed as a thread. Pass in the raw device using the new -J option. This avoids the use of getdiskrawname which is not particularly rump safe in this context and insures that the rump container device is used for cleaning, not the outer device.
|
1.58.16.1 | 13-Apr-2020 |
martin | Mostly merge changes from HEAD upto 20200411
|
1.47 | 30-Mar-2006 |
perseant | A new version of the cleaner. In general, works about as well as the old cleaner, but with more legible code.
Includes code for reading and writing to the raw disk device (so that an unmounted fs could be cleaned), for the use of a single daemon to clean multiple filesystems to save on resources, and for recording the old contents of cleaned segments to offline storage for regression testing of the LFS system as a whole; though these new features are not properly tested at this point.
|
1.46 | 23-Aug-2005 |
christos | Change PRiu64 with a cast and %llu. I am not using PRIu32 and no cast for now. I will do so in a separate pass that will fix all the inode printing.
|
1.45 | 20-Aug-2005 |
kent | fix compilation problem on LP64
|
1.44 | 19-Aug-2005 |
christos | 64 bit inode changes.
|
1.43 | 03-May-2005 |
christos | remove bogus frees on uninitialized variable.
|
1.42 | 23-Apr-2005 |
perseant | Provide a resize_lfs(8), including kernel and cleaner support. The current implementation requires the fs to be mounted while resizing. Tested in both directions, and everything appears to work happily, but ymmv.
|
1.41 | 26-Feb-2005 |
perseant | branches: 1.41.2; Various minor LFS improvements:
* 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. * Remove the Ifile from the filesystem namespace. The cleaner now uses a fcntl call on the root inode to find the Ifile filehandle. * Make lfs_cleanerd less verbose when the filesystem is unmounted.
|
1.40 | 21-Apr-2004 |
christos | Replace the statfs() family of system calls with statvfs(). Retain binary compatibility.
|
1.39 | 17-Dec-2003 |
yamt | branches: 1.39.4; fix debug output.
|
1.38 | 19-Sep-2003 |
itojun | realloc pedannt
|
1.37 | 07-Aug-2003 |
agc | Move UCB-licensed code from 4-clause to 3-clause licence.
Patches provided by Joel Baker in PR 22284, verified by myself.
|
1.36 | 13-Jul-2003 |
itojun | use bounded string ops. check malloc failure. asprintf is easier than complicated strcat/strcpy combination.
|
1.35 | 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.34 | 24-Feb-2003 |
perseant | Convert lfs_cleanerd over to use the new ioctl calls instead of the lfs syscalls.
|
1.33 | 10-Feb-2003 |
fvdl | Use int32_t for block adresses in segment summary structures.
|
1.32 | 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.31 | 05-Dec-2002 |
yamt | fix a typo in previous.
PR 19278 from Ryo HAYASAKA.
|
1.30 | 29-Nov-2002 |
christos | clean this up a bit. avoid annoying code duplication on opening files, and make error messages consistent.
|
1.29 | 14-Jun-2002 |
perseant | Note each type of failure in clean_inode and provide statistics on failures as well as successes when a run of clean_all_inodes completes.
Explicitly cast to off_t in get_dinode and get_rawblock, to make sure we read the right block.
|
1.28 | 14-Jun-2002 |
perseant | Don't try to coalesce files that have fewer than NDADDR blocks, due to a potential problem with cleaning fragments at all.
Better sanity checks when selecting files to coalesce; in particular don't shift too far left when comparing the number of discontinuities to the log2 of the number of total blocks.
Better log messages: note beginning of coalescing correctly; also take the log message from add_segment out of "if (debug)" for symmetry with the "finished segment" message.
Use lfs_bmapv to find the inode, rather than looking it up manually in the ifile; this should give more up-to-date information, since trolling through every inode in the fs could take some time.
|
1.27 | 06-Jun-2002 |
perseant | First stab at file coalescing. When the cleaner detects that it might be digging itself deeper into a hole, it forks off a subprocess that locates files with too many discontinuities and rewrites them, if there is enough room.
Optionally the user can manually coaleasce files by running with "-c".
The recent change to lfs_markv is required for the coalescer to do anything.
All of "digging itself deeper", "too many discontinuities", and "enough room" need to be better defined.
|
1.26 | 03-May-2002 |
yamt | fix a reversed condition.
|
1.25 | 30-Apr-2002 |
agc | Cast arg to long, and print with %ld, so that this compiles on some of the more esoteric architectures.
|
1.24 | 30-Apr-2002 |
perseant | Correct my previous lfs_cleanerd commit so that it works properly on v1 filesystems as well (use segtod instead of lfs_ssize / lfs_fsize).
Tested on i386.
|
1.23 | 18-Jul-2001 |
perseant | Handle segment 0 properly, if its offset is different from other segments because of the disklabel.
Fix a problem with inode block handling that sometimes caused the wrong blocks to be read, causing either cleaning failures or panics with v2 file systems.
|
1.22 | 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.21 | 04-Feb-2001 |
christos | branches: 1.21.2; remove redundant declarations.
|
1.20 | 10-Jan-2001 |
lukem | be more consistent about syslog usage. now it's more like: err fatal errors warning warnings info status messages (-d), stats on SIGxxx debug debug messages (-d), debug stats
|
1.19 | 09-Jan-2001 |
joff | Don't qsort() by the segcreate field. Prevents potentially serious filesystem corruption if the clock jumps backwards.
|
1.18 | 04-Jan-2001 |
lukem | use more standard %ll_ in favour of %q_
|
1.17 | 03-Nov-2000 |
perseant | Fix memory leak described in PR #11094 (patch from Jesse Off <joff@gci-net.com>).
|
1.16 | 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.15 | 18-Jan-2000 |
perseant | branches: 1.15.4; Take care of memory leaks
|
1.14 | 07-Oct-1999 |
perseant | Don't complain that we can't fstat the Ifile, if it's because the filesystem has been unmounted. (I.e., don't give errors every time an LFS is unmounted.)
|
1.13 | 25-Aug-1999 |
perseant | branches: 1.13.2; Remove partial-segment timestamp optimization from lfs_segmapv. If "time" is not monotonically increasing (e.g. clock is slaved to another system) the optimization will result in segments being treated as corrupt (uncleanable). If enough such "bad" segments were created, the cleaner would clean continuously, and after some time the system would panic with "no clean segments".
(Legitimately old partial-segments are relatively rare, and will have their blocks culled by lfs_bmapv.)
|
1.12 | 14-Mar-1999 |
drochner | branches: 1.12.2; work around egcs prints format warning on alpha (XXX bad fix, but egcs doesn't like a "quad_t" here)
|
1.11 | 10-Mar-1999 |
perseant | Cleaner changes corresponding to in-kernel LFS changes. In particular, the cleaner understands fragments; and it knows to change bi_bp to reflect a change in bi_daddr, if lfs_bmapv says that there is one.
|
1.10 | 15-Oct-1998 |
ross | Cast quad_t and off_t objects to (long long) for printing with %q. (Fix a sort-of-LP64 egcs printf warning.)
It's unfortunate that off_t and quad_t don't print with %q. I wonder what would happen if alpha changed these from long -> long long? It's the same actual size in bits either way.
|
1.9 | 07-Oct-1998 |
christos | PR/6248: Konrad Schroder: lfs_cleanerd could use syslog() for notices, instead of err()/warn()
|
1.8 | 11-Sep-1998 |
pk | type fixes, in part from PR#6032
|
1.7 | 10-Aug-1998 |
perry | bzero->memset, bcopy->memcpy, bcmp->memcmp
|
1.6 | 01-Mar-1998 |
fvdl | Merge with Lite2 + local changes
|
1.5 | 20-Feb-1998 |
mycroft | Fill in missing (default) mmap(2) flags.
|
1.4 | 07-Oct-1997 |
mrg | WARNS?=1. RCS ids.
|
1.3 | 01-Aug-1997 |
mikel | avoid void pointer arithmetic
|
1.2 | 17-May-1997 |
pk | * NULL => 0 (Arne Juul; PR#3629) * Nuke spacoids.
|
1.1 | 08-Jun-1994 |
mycroft | branches: 1.1.1; From 4.4-Lite, with local changes.
|
1.1.1.2 | 29-Apr-1997 |
tls | Import from 4.4BSD-Lite2
|
1.1.1.1 | 24-Sep-1994 |
mycroft | Import original 4.4-Lite version.
|
1.12.2.2 | 31-Jan-2000 |
he | Pull up revision 1.15 (requested by perseant): Fix a few memory leaks in lfs_cleanerd.
|
1.12.2.1 | 11-Oct-1999 |
cgd | pull up revs 1.13-1.14 from trunk (requested by perseant): Remove incorrect partial-segment timestamp optimization from lfs_segmapv which would cause continuous cleaning and eventual panics with "no clean segments." Don't complain if fstat() fails on the Ifile when the file system has been unmounted (avoids expected errors every time an LFS is unmounted).
|
1.13.2.1 | 27-Dec-1999 |
wrstuden | Pull up to last week's -current.
|
1.15.4.2 | 03-Feb-2001 |
he | Pull up revision 1.17 (requested by perseant): Plug memory leak in lfs_cleanerd. Fixes PR#11094.
|
1.15.4.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.21.2.5 | 10-Jul-2001 |
perseant | Read in the true primary superblock, if the fsb unit is > 8k.
|
1.21.2.4 | 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.21.2.3 | 30-Jun-2001 |
perseant | Fixes, from joff, for correct compatibility operation of fsck_lfs, dumplfs, lfs_cleanerd; correct usage message from dumplfs.
|
1.21.2.2 | 29-Jun-2001 |
perseant | Get rid of __P(), protoizing where it had not already been done
|
1.21.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.39.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.41.2.2 | 10-Aug-2006 |
tron | Pull up following revision(s) (requested by perseant in ticket #1458): libexec/lfs_cleanerd/library.c: revision 1.43 remove bogus frees on uninitialized variable.
|
1.41.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.9 | 30-Mar-2006 |
perseant | A new version of the cleaner. In general, works about as well as the old cleaner, but with more legible code.
Includes code for reading and writing to the raw disk device (so that an unmounted fs could be cleaned), for the use of a single daemon to clean multiple filesystems to save on resources, and for recording the old contents of cleaned segments to offline storage for regression testing of the LFS system as a whole; though these new features are not properly tested at this point.
|
1.8 | 07-Aug-2003 |
agc | Move UCB-licensed code from 4-clause to 3-clause licence.
Patches provided by Joel Baker in PR 22284, verified by myself.
|
1.7 | 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.6 | 14-Mar-1999 |
drochner | branches: 1.6.12; work around printf format warnings on alpha
|
1.5 | 10-Mar-1999 |
perseant | Cleaner changes corresponding to in-kernel LFS changes. In particular, the cleaner understands fragments; and it knows to change bi_bp to reflect a change in bi_daddr, if lfs_bmapv says that there is one.
|
1.4 | 15-Oct-1998 |
ross | Cast quad_t and off_t objects to (long long) for printing with %q. (Fix a sort-of-LP64 egcs printf warning.)
It's unfortunate that off_t and quad_t don't print with %q. I wonder what would happen if alpha changed these from long -> long long? It's the same actual size in bits either way.
|
1.3 | 07-Oct-1998 |
christos | PR/6248: Konrad Schroder: lfs_cleanerd could use syslog() for notices, instead of err()/warn()
|
1.2 | 07-Oct-1997 |
mrg | WARNS?=1. RCS ids.
|
1.1 | 08-Jun-1994 |
mycroft | branches: 1.1.1; From 4.4-Lite, with local changes.
|
1.1.1.1 | 24-Sep-1994 |
mycroft | Import original 4.4-Lite version.
|
1.6.12.1 | 29-Jun-2001 |
perseant | Get rid of __P(), protoizing where it had not already been done
|
1.16 | 30-Mar-2006 |
perseant | A new version of the cleaner. In general, works about as well as the old cleaner, but with more legible code.
Includes code for reading and writing to the raw disk device (so that an unmounted fs could be cleaned), for the use of a single daemon to clean multiple filesystems to save on resources, and for recording the old contents of cleaned segments to offline storage for regression testing of the LFS system as a whole; though these new features are not properly tested at this point.
|
1.15 | 07-Aug-2003 |
agc | Move UCB-licensed code from 4-clause to 3-clause licence.
Patches provided by Joel Baker in PR 22284, verified by myself.
|
1.14 | 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.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 | 30-Apr-2002 |
perseant | Correct my previous lfs_cleanerd commit so that it works properly on v1 filesystems as well (use segtod instead of lfs_ssize / lfs_fsize).
Tested on i386.
|
1.11 | 26-Apr-2002 |
perseant | Fix error in how much memory needed to be allocated to check data cksum to proceed with adding segments.
Use fixed-width types to compute checksum, so LP64 machines can do it too.
Tested on alpha; test-compiled on arm32.
|
1.10 | 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.9 | 04-Jan-2001 |
lukem | branches: 1.9.2; use more standard %ll_ in favour of %q_
|
1.8 | 18-Jan-2000 |
perseant | Take care of memory leaks
|
1.7 | 10-Mar-1999 |
perseant | branches: 1.7.2; Cleaner changes corresponding to in-kernel LFS changes. In particular, the cleaner understands fragments; and it knows to change bi_bp to reflect a change in bi_daddr, if lfs_bmapv says that there is one.
|
1.6 | 15-Oct-1998 |
ross | Cast quad_t and off_t objects to (long long) for printing with %q. (Fix a sort-of-LP64 egcs printf warning.)
It's unfortunate that off_t and quad_t don't print with %q. I wonder what would happen if alpha changed these from long -> long long? It's the same actual size in bits either way.
|
1.5 | 07-Oct-1998 |
christos | PR/6248: Konrad Schroder: lfs_cleanerd could use syslog() for notices, instead of err()/warn()
|
1.4 | 11-Sep-1998 |
pk | type fixes, in part from PR#6032
|
1.3 | 01-Apr-1998 |
kleink | Need <time.h> for ctime() prototype.
|
1.2 | 07-Oct-1997 |
mrg | WARNS?=1. RCS ids.
|
1.1 | 08-Jun-1994 |
mycroft | branches: 1.1.1; From 4.4-Lite, with local changes.
|
1.1.1.2 | 29-Apr-1997 |
tls | Import from 4.4BSD-Lite2
|
1.1.1.1 | 24-Sep-1994 |
mycroft | Import original 4.4-Lite version.
|
1.7.2.1 | 31-Jan-2000 |
he | Pull up revision 1.8 (requested by perseant): Fix a few memory leaks in lfs_cleanerd.
|
1.9.2.4 | 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.9.2.3 | 30-Jun-2001 |
perseant | Fixes, from joff, for correct compatibility operation of fsck_lfs, dumplfs, lfs_cleanerd; correct usage message from dumplfs.
|
1.9.2.2 | 29-Jun-2001 |
perseant | Get rid of __P(), protoizing where it had not already been done
|
1.9.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.
|