Commit Graph

113 Commits

Author SHA1 Message Date
martin
b4cb63a646 Make filehandles opaque to userland 2006-07-31 16:34:42 +00:00
martin
a3b5baed42 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!).
2006-07-13 12:00:24 +00:00
perseant
21393db687 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.
2006-07-07 18:19:30 +00:00
christos
df73c1693c Coverity CID 3766: Avoid null pointer deref 2006-05-19 14:46:17 +00:00
perseant
45dc123d6e 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.
2006-05-12 19:33:02 +00:00
mrg
bb50bce731 avoid some char * vs. u_char * issues. 2006-05-11 12:26:38 +00:00
perseant
0cdeebe9fa 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.
2006-04-14 00:58:32 +00:00
perseant
1b08b7c6a1 Look for the inode pointers in the right place if lfs_bsize != lfs_fsize. 2006-04-05 21:42:49 +00:00
perseant
2c3f7b46ba 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).
2006-04-05 20:29:40 +00:00
christos
bfe8a650d3 Coverity CID 2792: Fix memory leaks 2006-04-01 23:53:11 +00:00
christos
2b955dc8fb Coverity CID 2846: Don't use LIST_FOREACH if you are going to free the cursor 2006-04-01 23:50:50 +00:00
christos
f1e970a046 Coverity CID 2847: Don't use LIST_FOREACH if you are going to free the
current pointer!
2006-04-01 23:48:56 +00:00
perseant
260a2c76af Document -i option, update date; at the request of wiz@. 2006-04-01 08:44:57 +00:00
perseant
9c75397609 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.
2006-03-30 19:10:13 +00:00
christos
fdd5a2fbdd 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.
2005-08-23 05:55:29 +00:00
kent
8dbae00531 fix compilation problem on LP64 2005-08-20 14:58:34 +00:00
christos
d05efd58f3 64 bit inode changes. 2005-08-19 02:06:29 +00:00
christos
467d3a1e76 remove bogus frees on uninitialized variable. 2005-05-03 00:20:17 +00:00
perseant
2f695b5476 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.
2005-04-23 19:47:51 +00:00
xtraeme
dc7d7d7780 Add missing flags to usage() 2005-03-30 21:28:30 +00:00
perseant
6e52bfc264 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.
2005-02-26 05:43:04 +00:00
christos
6bd1d6d4db Replace the statfs() family of system calls with statvfs().
Retain binary compatibility.
2004-04-21 01:05:31 +00:00
yamt
e2e9c6ef96 fix debug output. 2003-12-17 09:13:41 +00:00
itojun
4698292ea9 realloc pedannt 2003-09-19 05:52:48 +00:00
itojun
ba0ee95e6c realloc pedant 2003-09-19 05:50:41 +00:00
agc
8e6ab8837d Move UCB-licensed code from 4-clause to 3-clause licence.
Patches provided by Joel Baker in PR 22284, verified by myself.
2003-08-07 09:46:37 +00:00
itojun
6e7ade5e3e use bounded string ops. check malloc failure. asprintf is easier than
complicated strcat/strcpy combination.
2003-07-13 09:44:02 +00:00
fvdl
42614ed3f3 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.
2003-04-02 10:39:19 +00:00
perseant
5646727e5a 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.
2003-03-02 04:38:20 +00:00
perseant
6f5626d112 Make fs-specific fcntl macros take three arguments (approved wrstuden).
Let LFS use fcntl for cleaner functions.
2003-02-25 23:12:06 +00:00
perseant
d5bdd23d68 Convert lfs_cleanerd over to use the new ioctl calls instead of the
lfs syscalls.
2003-02-24 08:48:17 +00:00
perseant
b397c875ae 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.
2003-02-17 23:48:08 +00:00
fvdl
180fbdb32f Use int32_t for block adresses in segment summary structures. 2003-02-10 21:17:53 +00:00
perry
1f4ad37fe3 "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".
2003-02-05 00:02:24 +00:00
mrg
a9119e2a88 make this build on alpha after daddr_t->64bit 2003-01-28 08:34:17 +00:00
fvdl
a3ff3a3038 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.
2003-01-24 21:55:02 +00:00
yamt
c2484eff3b - fix memory leak.
- add more error checks.
- spaces -> tab
2002-12-15 08:38:17 +00:00
yamt
ad4e5e5793 for -b, use ssize instead of segshift.
segshift is invalid for v2 filesystems.
2002-12-15 07:25:37 +00:00
yamt
eef82bb71b fix a typo in previous.
PR 19278 from Ryo HAYASAKA.
2002-12-05 02:03:56 +00:00
christos
8f7c885f66 clean this up a bit. avoid annoying code duplication on opening files,
and make error messages consistent.
2002-11-29 17:15:46 +00:00
yamt
84677ad64e fix calculation bugs that prevents coalescing from working properly.
PR 19133.
2002-11-24 08:47:28 +00:00
wiz
d6285bbf1d Begin new sentences on new lines.
Patch from Robert Elz (kre at munnari oz au).
2002-09-29 14:05:52 +00:00
lukem
f794aa60bb Use ${NETBSDSRCDIR}/some/path instead of ${.CURDIR}/../../some/path 2002-08-19 13:54:34 +00:00
perseant
f4fea25c9f 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.
2002-06-14 05:21:21 +00:00
perseant
d6e1fa2b25 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.
2002-06-14 00:58:39 +00:00
perseant
a558d1ec81 update lfs_cleanerd manual page for new -c option 2002-06-06 01:03:12 +00:00
perseant
8abab7cfc8 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.
2002-06-06 00:56:49 +00:00
yamt
b146f5d7f4 fix a reversed condition. 2002-05-03 04:43:57 +00:00
agc
b86348d33b Cast arg to long, and print with %ld, so that this compiles on some of
the more esoteric architectures.
2002-04-30 15:21:55 +00:00
perseant
da431b0f6d 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.
2002-04-30 00:28:58 +00:00