[HEADS UP] Merge of projects/gvinum to head

Ulf Lilleengen lulf at FreeBSD.org
Mon Mar 16 09:58:00 PDT 2009


This is a heads-up for a merge of gvinum project code into HEAD. This means
that gvinum implementation will be changed some. The code is based on the
work done by Lukas Ertl as well as the work I did before/during Google SoC
2007 and afterwards. It has been staying in p4 for some time, and then moved
to the subversion project repository not long ago. The main reason for the
delay of getting this into HEAD have been the lack of reviewers of the code,
but after some discussion and help from testers, I've decided this is a good
time to get it in (should perhaps have been merged a bit earlier) Testers
have spotted several differences from the original gvinum, and I've tried to
make it behave as the old implementation wherever that seemed the best way to
go. Luckily, the work has gotten a bit of attention lately, thanks to Rick C.
Petty for helping out with testing and bugfixing, as well as all others who
have dared to run the new gvinum. So, what does this update offer?

From the user aspect:
- Implementation of many of the missing commands from the old vinum:
  attach/detach, start (was partially implemented), stop (was partially
  implemented), concat, mirror, stripe, raid5 (shortcuts for creating volumes
  with one plex of these organizations).
- Support for fixing degraded plexes while mounted.  - Support for growing
  for striped and raid5-plexes, meaning that one can extend the volumes for
  these plex types in addition to the concat type. Also works while the
  volume is mounted.
- The parity check and rebuild no longer goes between userland/kernel,
  meaning that your gvinum command will not stay and wait forever for the
  rebuild to finish. You can instead watch the status with the list command.
- Many problems with gvinum have been reported since 5.x, and some has been
  hard to fix due to the complicated architecture. Hopefully, it should be
  more stable and better handle edge cases that previously made gvinum
- Failed drives no longer disappears entirely, but now leave behind a dummy
  drive that makes sure the original state is not forgotten in case the
  system is rebooted between drive failures/swaps.

From the technical aspect:
- Gvinum now uses one single workerthread instead of one thread for each
  volume and each plex. The reason for this is that the previous scheme was
  very complex, and was the cause of many of the bugs discovered in gvinum.
  Instead, gvinum now uses one worker thread with an event queue, quite
  similar to what used in gmirror.
- The rebuild/grow/initialize/parity check routines no longer runs in
  separate threads, but are run as regular I/O requests with special flags.
  This made it easier to support on-mount growing and parity rebuild.

Probably, there are many other issues that have been fixed, perhaps new
issues introduced. This is why this is dropped in HEAD now, to give it more
attention from the uses before the 8.0 branch. All in all, this will make
gvinum an easier beast to handle for users. If you have any issues related to
this, send in problem reports or drop me an e-mail, and I'll take a look.
For interested reviewers, the code resides in

Ulf Lilleengen
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 195 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-geom/attachments/20090316/8961a2ac/attachment.pgp

More information about the freebsd-geom mailing list