History log of /src/sbin/newfs_lfs/newfs.c |
Revision | | Date | Author | Comments |
1.30 |
| 15-Oct-2015 |
dholland | Enable the creation of lfs64 volumes.
To create an lfs64 volume, use -w 64. You can also force a 32-bit volume with -w 32, but this will fail on devices thta are too large.
lfs64 is the default for devices > 1TB. (1TB rather than 2TB because daddr_t is signed and negative block numbers can cause interesting complications.)
For now print a warning that the lfs64 format isn't finalized, because it isn't. For now any lfs64 use should be limited to test data, benchmarking, and so forth.
|
1.29 |
| 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.28 |
| 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.27 |
| 06-Jun-2013 |
dholland | ufs -> ulfs for newfs_lfs
|
1.26 |
| 02-Feb-2012 |
perseant | branches: 1.26.6; If invoked with -D and creating an image file, ensure that the image file is filled to the given size. This prevents false failures with "lfs: ifile read: 22" in ATF tests.
|
1.25 |
| 16-Feb-2010 |
mlelstv | branches: 1.25.6; Three changes in a single commit.
- drop the notion of frags (LFS fragments) vs fsb (FFS fragments) The code uses a complicated unity function that just makes the code difficult to understand.
- support larger sector sizes. Fix disk address computations to use DEV_BSIZE in the kernel as required by device drivers and to use sector sizes in userland.
- Fix several locking bugs in lfs_bio.c and lfs_subr.c.
|
1.24 |
| 20-Jul-2008 |
lukem | Remove the \n and tabs from the __COPYRIGHT() strings. (Tweak some to use a consistent format.)
|
1.23 |
| 05-Sep-2006 |
riz | branches: 1.23.18; 1.23.22; Deal with wedges and the new disk geometry structures, instead of using struct disklabel. From Christos Zoulas.
|
1.22 |
| 06-Aug-2006 |
perseant | Ensure sector size is zero in the debug case, to avoid a division by zero error pointed out by Zafer Aydogan.
|
1.21 |
| 06-Aug-2006 |
perseant | Don't try to even fake building a filesystem on a file descriptor that is neither a file nor a character special device.
|
1.20 |
| 04-May-2006 |
perseant | newfs_lfs(8) compoment of the recent superblock parameter addition. Change the wording of the explanation of the -M option, detail a new -R option that controls initial setting of the new parameter.
|
1.19 |
| 23-Apr-2006 |
jld | When testing seek speed (for the -A option), use sector-aligned offsets so the reads don't always fail, and also be more careful not to read off the end of the disk. If a read does fail, error out instead of silently leaving the loop early (and possibly dividing by zero seconds), because it means our idea of the disk size is wrong, or worse.
This fixes PR bin/33199.
|
1.18 |
| 22-Aug-2005 |
yamt | even with -F, don't overwrite p_size unless filesystem size is specified by -s.
|
1.17 |
| 27-Jun-2005 |
christos | add const.
|
1.16 |
| 12-Apr-2005 |
perseant | Use the buffer cache improvements from fsck_lfs. Make it build again.
|
1.15 |
| 26-Feb-2005 |
perseant | branches: 1.15.2; Various minor LFS improvements:
* Extend the lfs library from fsck_lfs(8) so that it can be used with a not-yet-existent LFS. Make newfs_lfs(8) use this library, so it can create LFSs whose Ifile is larger than one segment. * Make newfs_lfs(8) use strsuftoi64() for its arguments, a la newfs(8). * Make fsck_lfs(8) respect the "file system is clean" flag. * Don't let fsck_lfs(8) think it has dirty blocks when invoked with the -n flag.
|
1.14 |
| 29-Oct-2004 |
dsl | Add (unsigned char) cast to ctype function
|
1.13 |
| 12-Aug-2003 |
dsl | branches: 1.13.4; Stop superblock being written to sector 0 for small filesystems. Honour the '-s size' command option. Allow an LFS filesystem to be created in a file.
|
1.12 |
| 07-Aug-2003 |
agc | Move UCB-licensed code from 4-clause to 3-clause licence.
Patches provided by Joel Baker in PR 22308, verified by myself.
|
1.11 |
| 13-Jul-2003 |
itojun | use bounded string ops
|
1.10 |
| 12-Dec-2002 |
scw | Use getlabeloffset() instead of LABELOFFSET.
|
1.9 |
| 29-Aug-2002 |
perseant | Don't use adaptive measuring techniques to discover a good segment size, if the device is not a character device (they will give bogus results if they interact with the buffer cache).
|
1.8 |
| 01-Nov-2001 |
lukem | fix -Wshadow warning by moving "int version" from global to main() scope
|
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 |
| 05-Dec-2000 |
perseant | branches: 1.6.2; Add "-A" option to autoconfigure the segment size based on measured bandwidth and seek time of the disk, using the "4 * bandwidth * seek time" formula from Neefe-Matthews' 1997 paper. An RZ25 disk with this option gets 200K segments. Reference the paper in the manual page.
|
1.5 |
| 11-Oct-2000 |
he | The type of sizeof() can be u_long, so cast to that and print with %ld.
|
1.4 |
| 04-Jul-2000 |
perseant | Tweak how lfs_avail is initialized, corresponding to changes in the kernel.
Don't make more superblock segments than we have a record of in the superblock; and print these out as we go, like newfs.
Add am "-M" flag to specify the number of reserved segments, with a note in the man page not to use it.
|
1.3 |
| 12-Feb-2000 |
perseant | branches: 1.3.4; Add -F flag to override newfs_lfs' preference for 4.4LFS-labelled partitions.
|
1.2 |
| 15-Jul-1999 |
perseant | Address PR 7412: fix newfs_lfs.8 to list all real options for newfs_lfs; also fix newfs_lfs to get rid of all sorts of useless options that applied only to newfs_ffs. Corrected reference to the FFS paper to the reference to the BSD-LFS paper.
|
1.1 |
| 18-Mar-1999 |
perseant | branches: 1.1.2; Change name of newlfs to newfs_lfs.
|
1.1.2.1 |
| 11-Oct-2000 |
he | Pull up revision 1.5 (requested by he): Format string cleanup.
|
1.3.4.2 |
| 16-Oct-2000 |
tv | Pullup 1.5 [he]: The type of sizeof() can be u_long, so cast to that and print with %ld.
|
1.3.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.6.2.3 |
| 13-Jul-2001 |
perseant | Default to creating a v2 lfs, and print out the roll-forward id that was used. Update newfs_lfs.8 to reflect new options.
|
1.6.2.2 |
| 29-Jun-2001 |
perseant | Get rid of __P(), protoizing where it had not already been done
|
1.6.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.13.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.2.3 |
| 02-Sep-2006 |
ghen | Pull up following revision(s) (requested by jld in ticket #1494): sbin/newfs_lfs/newfs.c: revision 1.19 When testing seek speed (for the -A option), use sector-aligned offsets so the reads don't always fail, and also be more careful not to read off the end of the disk. If a read does fail, error out instead of silently leaving the loop early (and possibly dividing by zero seconds), because it means our idea of the disk size is wrong, or worse. This fixes PR bin/33199.
|
1.15.2.2 |
| 20-May-2006 |
riz | Pull up following revision(s) (requested by perseant in ticket #1327): sbin/newfs_lfs/extern.h: revision 1.9 sbin/newfs_lfs/make_lfs.c: revision 1.7 sbin/newfs_lfs/newfs_lfs.8: revision 1.21 sbin/newfs_lfs/newfs.c: revision 1.20 newfs_lfs(8) compoment of the recent superblock parameter addition. Change the wording of the explanation of the -M option, detail a new -R option that controls initial setting of the new parameter.
|
1.15.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.23.22.1 |
| 18-Sep-2008 |
wrstuden | Sync with wrstuden-revivesa-base-2.
|
1.23.18.1 |
| 28-Sep-2008 |
mjf | Sync with HEAD.
|
1.25.6.2 |
| 22-May-2014 |
yamt | sync with head.
for a reference, the tree before this commit was tagged as yamt-pagecache-tag8.
this commit was splitted into small chunks to avoid a limitation of cvs. ("Protocol error: too many arguments")
|
1.25.6.1 |
| 17-Apr-2012 |
yamt | sync with head
|
1.26.6.1 |
| 23-Jun-2013 |
tls | resync from head
|