diff --git a/doc/xfsdump.html b/doc/xfsdump.html
index 958bc80..e37e362 100644
--- a/doc/xfsdump.html
+++ b/doc/xfsdump.html
@@ -29,8 +29,8 @@
       <ul>
 	<li><a href="#main">The main function of xfsdump</a>
 	<ul>
-	  <li><a href="#drive_init1">drive_init1</a> 
-	  <li><a href="#content_init_dump">content_init</a> 
+	  <li><a href="#drive_init1">drive_init1</a>
+	  <li><a href="#content_init_dump">content_init</a>
 	</ul>
 	<li><a href="#dump_tape">Dumping to Tape</a>
 	<ul>
@@ -86,7 +86,7 @@ These notes are written for xfsdump and xfsrestore in IRIX. Therefore,
 it refers to some features that aren't supported in Linux.
 For example, the references to multiple streams/threads/drives do not
 pertain to xfsdump/xfsrestore in Linux. Also, the DMF support in xfsdump
-is not yet useful for Linux. 
+is not yet useful for Linux.
 
 <hr>
 <h3><a name="intro">What's in a dump</a></h3>
@@ -95,7 +95,7 @@ or stdout. The dump includes all the filesystem objects of:
 <ul>
 <li>directories (S_IFDIR)
 <li>regular files (S_IFREG)
-<li>sockets (S_IFSOCK) 
+<li>sockets (S_IFSOCK)
 <li>symlinks (S_IFLNK)
 <li>character special files (S_IFCHR)
 <li>block special files (S_IFBLK)
@@ -106,7 +106,7 @@ xfsdump inventory is located.
 Other data which is stored:
 <ul>
 <li> file attributes (stored in stat data) of owner, group, permissions,
-and date stamps 
+and date stamps
 <li> any extended attributes associated with these file objects
 <li> extent information is stored allowing holes to be reconstructed
 on restoral
@@ -137,7 +137,7 @@ believe that only one media-file is used. Whereas on tape
 media, multiple media files are used depending upon the size
 of the media file. The size of the media file is set depending
 on the drive type (in IRIX): QIC: 50Mb; DAT: 512Mb; Exabyte: 2Gb; DLT: 4Gb;
-others: 256Mb. This value (media file size) is now able to be changed 
+others: 256Mb. This value (media file size) is now able to be changed
 by the "-d" option.
 . Also, on tape, the dump is finished by an inventory
 media file followed by a terminating null media file.
@@ -188,16 +188,16 @@ pad to 1K bytes
 	strategy id = on-file, on-tape, on-rmt-tape
 	strategy specific data:
 	  field to denote if media file is a terminator (old fmt)
-	upper: (to 2K) 
+	upper: (to 2K)
 </pre>
 
 <p>
 Note that the <i>strategy id</i> is checked on restore so that
-the dump strategy and the strategy used by restore 
-are the same with the exception that drive_scsitape matches with 
-drive_minrmt. This strategy check has caused problems with customers 
+the dump strategy and the strategy used by restore
+are the same with the exception that drive_scsitape matches with
+drive_minrmt. This strategy check has caused problems with customers
 in the past.
-In particular, if one sends xfsdump's stdout to a tape 
+In particular, if one sends xfsdump's stdout to a tape
 (i.e. xfsdump -L test -M test - / >/dev/tape) then one can not
 restore this tape using xfsrestore by specifying the tape with the -f option.
 There was also a problem for a time where if one used a drive with
@@ -205,7 +205,7 @@ the TS tape driver, xfsdump wouldn't recognise this driver and
 would select the drive_simple strategy.
 
 <hr>
-   
+
 
 <h4><a name="inode_map">Inode Map</a></h4>
 <img src="inode_map.gif">
@@ -227,8 +227,8 @@ then the file can be dumped in multiple records or extent groups.
 <h3><a name="tape_format">Format on Tape</a></h3>
 At the beginning of each tape record is a header. However, for
 the first record of a media file, the record header is buried
-inside the global header at byte offset 1536 (1K + 512), as is shown in 
-the global header diagram. 
+inside the global header at byte offset 1536 (1K + 512), as is shown in
+the global header diagram.
 Reproduced again:
 <pre>
 <b>rec_hdr</b>
@@ -246,28 +246,28 @@ dump uuid
 pad to 512 bytes
 </pre>
 <p>
-I can not see where the block-size ("tape_blksz") is ever used !  
+I can not see where the block-size ("tape_blksz") is ever used !
 The record-size ("tape_recsz") is used as the byte count to do
 the actual write and read system calls.
 <p>
 There is another layer of s/ware for the actual data on the tape.
 Although, one may write out an inode-map or directory entries,
-one doesn't just give these record buffers straight to the 
+one doesn't just give these record buffers straight to the
 write system call to write out. Instead, these data objects are
 written to buffers (akin to &lt;stdio&gt). Another thread reads
 from these buffers (unless its running single-threaded) and writes
 them to tape.
 Specifically, inside a loop,
 one calls <b>do_get_write_buf</b>,
-copies over the data one wants stored and then 
+copies over the data one wants stored and then
 calls <b>do_write_buf</b>, until the entire data buffer
 has been copied over.
 
-<hr> 
+<hr>
 
 <h3><a name="run_time_structure">Run Time Structure</a></h3>
 
-This section reviews the run time structure and failure handling in 
+This section reviews the run time structure and failure handling in
 dump/restore (see IRIX PV 784355).
 
 The diagram below gives a schematic of the runtime structure
@@ -346,7 +346,7 @@ point they drop out of the message processing loop and always signal success.
 <p>
 Thus the only child processes that can affect the return status of
 dump or restore are the stream managers, and these processes take
-their exit status from the values returned by 
+their exit status from the values returned by
 <b>content_stream_dump</b> and <b>content_stream_restore</b>.
 
 <hr>
@@ -374,14 +374,14 @@ create inode-ranges for multi-stream dumps if pertinent.
   The inode map stores the type of the inode: directory or non-directory,
   and a state value to say whether it has changed or not.
   The inode map is built by processing each inode (using bulkstat) and
-  in order to work out if it should be marked as changed, 
+  in order to work out if it should be marked as changed,
   by comparing its date stamp with the date of the base or interrupted
-  dump. 
+  dump.
   We also update the size for non-dir regular files (bs_blocks * bs_blksize)
 <li><b>phase 3</b>: prune the unneeded subtrees due to the set of
   unchanged directories or the subtrees specified in -s (phase 1).
-  This works by marking higher level directories as unchanged 
-  (MAP_DIR_NOCHNG) in the inode map. 
+  This works by marking higher level directories as unchanged
+  (MAP_DIR_NOCHNG) in the inode map.
 <li><b>phase 4</b>: estimate non-dir (file) size if pruning was done
   since phase 2.
   It calculates this by processing each inode (using bulkstat)
@@ -389,7 +389,7 @@ create inode-ranges for multi-stream dumps if pertinent.
   If it is then it uses (bs_blocks * bs_blksize) as in phase 2.
 <li><b>phase 5</b>: if we have multiple streams, then
   it splits up the dump to try to give each stream a set of inodes
-  which has an equal amount of file data. 
+  which has an equal amount of file data.
   See the section on "Splitting a dump over multiple streams" below.
 </ul>
 
@@ -428,13 +428,13 @@ create inode-ranges for multi-stream dumps if pertinent.
     <li> end the media file
     <li> update online inventory
     </ul>
-<li> if multiple-media dump (i.e. tape dump and not file dump) then 
+<li> if multiple-media dump (i.e. tape dump and not file dump) then
   <ul>
   <li> dump the session inventory to a media file
   <li> dump the terminator to a media file
   </ul>
 </ul>
-   
+
 <hr>
 
 <h5><a name="main">The main function of xfsdump</a></h5>
@@ -442,7 +442,7 @@ create inode-ranges for multi-stream dumps if pertinent.
 <pre>
 * <b><a name="drive_init1">drive_init1</a></b> - initialize drive manager for each stream
   - go thru cmd options looking for -f device
-  - each device requires a drive-manager and hence an sproc 
+  - each device requires a drive-manager and hence an sproc
     (sproc = IRIX lightweight process)
   - if supposed to run single threaded then can only
     support one device
@@ -452,7 +452,7 @@ create inode-ranges for multi-stream dumps if pertinent.
   - if "-" specified for std out then only one drive allowed
 
   - for each drive it tries to pick best strategy manager
-    - there are 3 strategies 
+    - there are 3 strategies
       1) simple - for dump on file
       2) scsitape - for dump on tape
       3) minrmt - minimal protocol for remote tape (non-SGI)
@@ -470,7 +470,7 @@ create inode-ranges for multi-stream dumps if pertinent.
       - note if remote tape (has ":" in name)
       - set capabilities of BSF, FSF, etc.
 
-* <b>create global header</b> 
+* <b>create global header</b>
   - store magic#, version, date, hostid, uuid, hostname
   - process args for session-id, dump-label, ...
 
@@ -481,13 +481,13 @@ create inode-ranges for multi-stream dumps if pertinent.
 
   * inomap_build() - stores stream start-points and builds inode map
 
-  - <b>phase1</b>: parsing subtree selections (specified by -s options) 
-    <b>INPUT</b>: 
+  - <b>phase1</b>: parsing subtree selections (specified by -s options)
+    <b>INPUT</b>:
 	- sub directory entries (from -s)
     <b>FLOW</b>:
-	- go thru each subtree and 
+	- go thru each subtree and
 	  call diriter(callback=subtreelist_parse_cb)
-	  - diriter on subtreelist_parse_cb  
+	  - diriter on subtreelist_parse_cb
 	    - open_by_handle() on dir handle
 	    - getdents()
 	    - go thru each entry
@@ -503,9 +503,9 @@ create inode-ranges for multi-stream dumps if pertinent.
 	- list of inodes corresponding to subtree path names
 
   - premptchk: progress report, return if got a signal
-  
+
   - <b>phase2</b>: creating inode map (initial dump list)
-    <b>INPUT</b>: 
+    <b>INPUT</b>:
       - bulkstat records on all the inodes in the file system
     <b>FLOW</b>:
       - bigstat_init on cb_add()
@@ -516,16 +516,16 @@ create inode-ranges for multi-stream dumps if pertinent.
 	  - loop thru each struct xfs_bstat record for an inode
 	    calling cb_add()
 	  * cb_add
-	    - looks at latest mtime|ctime and 
+	    - looks at latest mtime|ctime and
 	      if inode is resumed:
-		 compares with cb_resumetime for change 
+		 compares with cb_resumetime for change
 	      if have cb_last:
 		 compares with cb_lasttime for change
 	    - add inode to map (map_add) and note if has changed or not
-	    - call with state of either 
+	    - call with state of either
 		changed - MAP_DIR_CHANGE, MAP_NDR_CHANGE
 		not changed - MAP_DIR_SUPPRT or MAP_NDR_NOCHNG
-	    - for changed non-dir REG inode, 
+	    - for changed non-dir REG inode,
 	      data size for its dump is added by bs_blocks * bs_blksize
 	    - for non-changed dir, it sets flag for &lt;pruneneeded&gt;
 	      => we don't want to process this later !
@@ -533,31 +533,31 @@ create inode-ranges for multi-stream dumps if pertinent.
 	    - segment = &lt;base, 64-low, 64-mid, 64-high&gt;
 		      = like 64 * 3-bit values (use 0-5)
 		      i.e. for 64 inodes, given start inode number
-		#define MAP_INO_UNUSED  0 /* ino not in use by fs - 
+		#define MAP_INO_UNUSED  0 /* ino not in use by fs -
                                              Used for lookup failure */
-		#define MAP_DIR_NOCHNG  1 /* dir, ino in use by fs, 
+		#define MAP_DIR_NOCHNG  1 /* dir, ino in use by fs,
                                              but not dumped */
-		#define MAP_NDR_NOCHNG  2 /* non-dir, ino in use by fs, 
+		#define MAP_NDR_NOCHNG  2 /* non-dir, ino in use by fs,
                                              but not dumped */
 		#define MAP_DIR_CHANGE  3 /* dir, changed since last dump */
 
 		#define MAP_NDR_CHANGE  4 /* non-dir, changed since last dump */
 
-		#define MAP_DIR_SUPPRT  5 /* dir, unchanged 
+		#define MAP_DIR_SUPPRT  5 /* dir, unchanged
                                              but needed for hierarchy */
 		- hunk = 4 pages worth of segments, max inode#, next ptr in list
 	    - i.e. map = linked list of 4 pages of segments of 64 inode states
     <b>OUTPUT</b>:
-	- inode map = list of all inodes of file system and 
+	- inode map = list of all inodes of file system and
 	  for each one there is an associated state variable
 	  describing type of inode and whether it has changed
-	- the inode numbers are stored in chunks of 64 
+	- the inode numbers are stored in chunks of 64
 	  (with only the base inode number explicitly stored)
 
   - premptchk: progress report, return if got a signal
 
   - if &lt;pruneneeded&gt; (i.e. non-changed dirs) OR subtrees specified (-s)
-    - <b>phase3</b>:  pruning inode map (pruning unneeded subtrees) 
+    - <b>phase3</b>:  pruning inode map (pruning unneeded subtrees)
 	<b>INPUT</b>:
 	    - subtree list
 	    - inode map
@@ -565,13 +565,13 @@ create inode-ranges for multi-stream dumps if pertinent.
 	- bigstat_iter on cb_prune() per inode
 	* cb_prune
 	  - if have subtrees and subtree list contains inode
-	    -> need to traverse every group (inogrp_t) and 
+	    -> need to traverse every group (inogrp_t) and
                every page of inode#s
 	    - diriter on cb_count_in_subtreelist
 	      * cb_count_in_subtreelist:
 	      - looks up each inode# (in directory iteration) in subtreelist
 	      - if exists then increment counter
-	    - if at least one inode in list 
+	    - if at least one inode in list
 	      - diriter on cb_cond_del
 	      * cb_cond_del:
             - TODO
@@ -629,20 +629,20 @@ create inode-ranges for multi-stream dumps if pertinent.
           - header = &lt;offset, flags, checksum, 128-byte bulk stat structure &gt;
           - bulkstat struct derived from struct xfs_bstat
             - stnd. stat stuff + extent size, #of extents, DMI stuff
-          - if HSM context then 
+          - if HSM context then
             - modify bstat struct to make it offline
         - loops calling getdents()
-          - does a bulkstat or bulkstat-single of dir inode 
+          - does a bulkstat or bulkstat-single of dir inode
           * dump_dirent()
             - fill in direnthdr_t record
-            - &lt;ino, gen & DENTGENMASK, record size, 
+            - &lt;ino, gen & DENTGENMASK, record size,
                   checksum, variable length name (8-char padded)&gt;
               - gen is from statbuf.bs_gen
-            - write out record 
+            - write out record
         - dump null direnthdr_t record
-        - if dumpextattr flag on and it 
+        - if dumpextattr flag on and it
           has extended attributes (check bs_xflags)
-          * dump_extattrs 
+          * dump_extattrs
             * dump_filehdr() with flags of FILEHDR_FLAGS_EXTATTR
               - for root and non-root attributes
                 - get attribute list (attr_list_by_handle())
@@ -650,7 +650,7 @@ create inode-ranges for multi-stream dumps if pertinent.
               - TODO
 
     - bigstat iter on dump_file()
-      - go thru each inode in file system and apply dump_file 
+      - go thru each inode in file system and apply dump_file
       * dump_file()
 	- if file's inode# is less than the start-point then skip it
 	  -> presume other sproc handling dumping of that inode
@@ -658,7 +658,7 @@ create inode-ranges for multi-stream dumps if pertinent.
 	- look-up inode# in inode map
 	- if not in inode-map OR hasn't changed then skip it
 	- elsif stat is NOT a non-dir then we have an error
-	- if have an hsm context then initialize context 
+	- if have an hsm context then initialize context
 	- call dump function depending on file type (S_IFREG, S_IFCHR, etc.)
 
 	  * <b>dump_file_reg</b> (for S_IFREG):
@@ -671,7 +671,7 @@ create inode-ranges for multi-stream dumps if pertinent.
 	      - dump extent header of type, EXTENTHDR_TYPE_DATA
 	      - write out link buffer (i.e. symlink string)
 
-	  - if dumpextattr flag on and it 
+	  - if dumpextattr flag on and it
 	    has extended attributes (check bs_xflags)
 	    * dump_extattrs (see the same call in the dir case above)
 
@@ -686,7 +686,7 @@ create inode-ranges for multi-stream dumps if pertinent.
     - if got an inventory stream then
       * inv_put_mediafile
 	- create an inventory-media-file struct (invt_mediafile_t)
-	  - &lt; media-obj-id, label, index, start-ino#, start-offset, 
+	  - &lt; media-obj-id, label, index, start-ino#, start-offset,
 		 end-ino#, end-offset, size = #recs in media file, flag &gt;
 	* stobj_put_mediafile
 
@@ -694,7 +694,7 @@ create inode-ranges for multi-stream dumps if pertinent.
   - lock and increment the thread done count
 
   - if dump supports multiple media files (tapes do but dump-files don't) then
-    - if multi-threaded then 
+    - if multi-threaded then
       - wait for all threads to have finished dumping
         (loops sleeping for 1 second each iter)
     * dump_session_inv
@@ -716,9 +716,9 @@ create inode-ranges for multi-stream dumps if pertinent.
 * <b><a name="dump_file_reg">dump_file_reg</a></b> (for S_IFREG):
   - if this is the start inode, then set the start offset
   - fixup offset for resumed dump
-  * init_extent_group_context 
+  * init_extent_group_context
     - init context - reset getbmapx struct fields with offset=0, len=-1
-    - open file by handle 
+    - open file by handle
     - ensure Mandatory lock not set
   - loop dumping extent group
     - dump file header
@@ -739,11 +739,11 @@ create inode-ranges for multi-stream dumps if pertinent.
 
 	  - if bmap entry is a hole (bmv_block == -1) then
 	    - if dumping ext.attributes then
-	      - dump extent header with bmap's offset, 
+	      - dump extent header with bmap's offset,
 		extent-size and type EXTENTHDR_TYPE_HOLE
 
 	    - move onto next bmap
-	      - if bmap's (offset + len)*512 > next-offset then 
+	      - if bmap's (offset + len)*512 > next-offset then
 		update next-offset to this
 	      - inc ptr
 
@@ -767,7 +767,7 @@ create inode-ranges for multi-stream dumps if pertinent.
 	    - read data of actualsz from file into buffer
 	    - write out buffer
 	    - if at end of file and have left over space in the extent then
-	      - pad out the rest of the extent 
+	      - pad out the rest of the extent
 	    - if next offset is at or past next-bmap's offset+len then
 	      - move onto next bmap
     - dump null extent header of type, EXTENTHDR_TYPE_LAST
@@ -779,10 +779,10 @@ create inode-ranges for multi-stream dumps if pertinent.
 <hr>
 
 <h4><a name="reg_split">Splitting a Regular File</a></h4>
-If a regular file is greater than 16Mb 
-(maxextentcnt = drivep->d_recmarksep 
-              = recommended max. separation between marks), 
-then it is broken up into multiple extent groups each with their 
+If a regular file is greater than 16Mb
+(maxextentcnt = drivep->d_recmarksep
+              = recommended max. separation between marks),
+then it is broken up into multiple extent groups each with their
 own filehdr_t's.
 A regular file can also be split, if we are dumping to multiple
 streams and the file would span the stream boundary.
@@ -790,15 +790,15 @@ streams and the file would span the stream boundary.
 <h4><a name="split_mstream">Splitting a dump over multiple streams (Phase 5)</a></h4>
 If one is dumping to multiple streams, then xfsdump calculates an
 estimate of the dump size and divides by the number of streams to
-determine how much data we should allocate for a stream. 
-The inodes are processed in order from <i>bulkstat</i> in the function 
+determine how much data we should allocate for a stream.
+The inodes are processed in order from <i>bulkstat</i> in the function
 <i>cb_startpt</i>. Thus we start allocating inodes to the first stream
 until we reach the allocated amount and then need to decide how to
 proceed on to the next stream. At this point we have 3 actions:
 <dl>
 <dt>Hold
 <dd>Include this file in the current stream.
-<dt>Bump 
+<dt>Bump
 <dd>Start a new stream beginning with this file.
 <dt>Split
 <dd>Split this file across 2 streams in different extent groups.
@@ -850,8 +850,8 @@ Initialize the mmap files of:
   <li> search for directory dump
   <li> calls <b>dirattr_init</b> if necessary
   <li> calls <b>namreg_init</b> if necessary
-  <li> initialize the directory tree (<b>tree_init</b>) 
-  <li> read the dirents into the tree 
+  <li> initialize the directory tree (<b>tree_init</b>)
+  <li> read the dirents into the tree
        (<a href="#applydirdump"><b>applydirdump</b></a>)
   </ul>
 
@@ -866,17 +866,17 @@ Initialize the mmap files of:
 
 <li> all threads can process each media file of their dumps for
   restoring the non-directory files
-  <ul> 
-  <li>loop over each media file 
+  <ul>
+  <li>loop over each media file
      <ul>
      <li> read in file header
-     <li> call <b>applynondirdump</b> for file hdr 
-	 <ul> 
-	 <li> restore extended attributes for file 
-	      (if it is last extent group of file) 
+     <li> call <b>applynondirdump</b> for file hdr
+	 <ul>
+	 <li> restore extended attributes for file
+	      (if it is last extent group of file)
 	 <li> restore file
 	    <ul>
-	    <li>loop thru all hardlink paths from tree for inode 
+	    <li>loop thru all hardlink paths from tree for inode
                 (<b>tree_cb_links</b>) and call <b>restore_file_cb</b>
                 <ul>
                 <li> if a hard link then link(path1, path2)
@@ -890,11 +890,11 @@ Initialize the mmap files of:
                       <li>set DMAPI fields if necessary
                       <li>loop processing the extent headers
                          <ul>
-                         <li>if type LAST then exit loop 
+                         <li>if type LAST then exit loop
                          <li>if type ALIGN then eat up the padding
                          <li>if type HOLE then ignore
-                         <li>if type DATA then copy the data into 
-                             the file for the extent; 
+                         <li>if type DATA then copy the data into
+                             the file for the extent;
                              seeking to extent start if necessary
                          </ul>
                       <li>register the extent group in the partial registry
@@ -917,9 +917,9 @@ Initialize the mmap files of:
 	   <li> if corrupt then go to next mark
 	   <li> else exit loop
 	   </ul>
-	 </ul> 
+	 </ul>
      </ul>
-  </ul> 
+  </ul>
 
 <li> one stream does while others wait:
   <ul>
@@ -937,7 +937,7 @@ Initialize the mmap files of:
 <b>content_init</b> in a bit more detail(xfsrestore version)
 <ul>
 <li> create house-keeping-directory for persistent mmap file data
-  structures. For cumulative and interrupted restores, 
+  structures. For cumulative and interrupted restores,
   we need to keep restore session data between invocations of xfsrestore.
 <li> mmap the "state" file and create if not already existing.
   Initially just mmap the header.  (More details below)
@@ -969,14 +969,14 @@ Initialize the mmap files of:
 <h4><a name="pers_inv">Persistent Inventory and State File</a></h4>
 
 The persistent inventory is found inside the "state" file.
-The state file is an mmap'ed file called 
+The state file is an mmap'ed file called
 <b>$dstdir/xfsrestorehousekeepingdir/state</b>.
-The state file (<i>struct pers</i> from content.c) contains 
+The state file (<i>struct pers</i> from content.c) contains
 a header of:
 <ul>
 <li>command line arguments from 1st session,
 <li>partial registry data structure for use with multiple streams
-    and extended attributes, 
+    and extended attributes,
 <li>various session state such as
     dumpid, dump label, number of inodes restored so far, etc.
 </ul>
@@ -1054,7 +1054,7 @@ tree of directory nodes. This tree can then be used to associate
 the file with it's directory and so restored to the correct location
 in the directory structure.
 <p>
-The tree is an mmap'ed file called 
+The tree is an mmap'ed file called
 <b>$dstdir/xfsrestorehousekeepingdir/tree</b>.
 Different sections of it will be mmap'ed separately.
 It is of the following format:
@@ -1098,7 +1098,7 @@ chained hash table with the "next" link stored in the tree node
 in the <i>n_hashh</i> field of struct node in restore/tree.c.
 The size of the hash table is based on the number of directories
 and non-directories (which will approximate the number of directory
-entries - won't include extra hard links). The size of the table 
+entries - won't include extra hard links). The size of the table
 is capped below at 1 page and capped above at virtual-memory-limit/4/8
 (i.e. vmsz/32) or the range of 2^32 whichever is the smaller.
 <p>
@@ -1157,15 +1157,15 @@ each node using the first 8 bytes (ignoring node fields).
 | |      | |
 | | 8192 | |
 | | nodes| |   nodes already used in tree
-| | used | | 
-| |      | | 
+| | used | |
+| |      | |
 | |------| |
 |          |
-| |------| |     
+| |------| |
 | |   --------| <-----nh_freenix (ptr to node-freelist)
 | |node1 | |  |
-| |------| |  | node-freelist (linked list of free nodes) 
-| |   ----<---| 
+| |------| |  | node-freelist (linked list of free nodes)
+| |   ----<---|
 | |node2 | |
 | |------| |
 ............
@@ -1176,7 +1176,7 @@ each node using the first 8 bytes (ignoring node fields).
 
 
 <h5><a name="win_abs">Window Abstraction</a></h5>
-The window abstraction manages the mapping and unmapping of the 
+The window abstraction manages the mapping and unmapping of the
 segments (of nodes) of the dirent tree.
 In the node allocation, mentioned above, if our node-freelist is
 empty we call <i><b>win_map()</b></i> to map in a chunk of 8192 nodes
@@ -1185,8 +1185,8 @@ for the node-freelist.
 Consider the <i><b>win_map</b>(offset, return_memptr)</i> function:
 <pre>
 One is asking for an offset within a segment.
-It looks up its <i>bag</i> for the segment (given the offset), and 
-if it's already mapped then 
+It looks up its <i>bag</i> for the segment (given the offset), and
+if it's already mapped then
     if the window has a refcnt of zero, then remove it from the win-freelist
     it uses that address within the mmap region and
     increments refcnt.
@@ -1194,7 +1194,7 @@ else if it's not in the bag then
     if win-freelist is not empty then
         munmap the oldest mapped segment
 	remove head of win-freelist
-        remove the old window from the bag 
+        remove the old window from the bag
     else /* empty free-list */
         allocate a new window
     endif
@@ -1214,9 +1214,9 @@ in the node allocation.
 Note that the windows are stored in 2 lists. They are doubly
 linked in the LRU win-freelist and are also stored in a <i>bag</i>.
 A bag is just a doubly linked searchable list where
-the elements are allocated using <i>calloc()</i>. 
+the elements are allocated using <i>calloc()</i>.
 It uses the bag as a container of mmaped windows which can be
-searched using the bag key of window-offset. 
+searched using the bag key of window-offset.
 <pre>
 
 BAG:  |--------|     |--------|     |--------|     |--------|     |-------|
@@ -1239,7 +1239,7 @@ win-freelist:   | oldest |               | 2nd    |
 <p>
 <b>Call Chain</b><br>
 
-Below are some call chain scenarios of how the allocation of 
+Below are some call chain scenarios of how the allocation of
 dirent tree nodes are done at different stages.
 <p>
 <pre>
@@ -1269,7 +1269,7 @@ applydirdump()
            node_alloc()
              get node off node-freelist (8190 nodes left now)
              return node
- 
+
 8193th time when we have used up 8192 nodes and node-freelist is emtpy:
 
       if new entry then
@@ -1282,13 +1282,13 @@ applydirdump()
                  refcnt++
                  return addr
              make a node-freelist of 8192 nodes from where left off last time
-             win_unmap 
+             win_unmap
                refcnt--
                put on LRU win-freelist as refcnt==0
              get node off node-freelist (8191 nodes left now)
              return node
-             
-When whole segment used up and thus all remaining node-freelist 
+
+When whole segment used up and thus all remaining node-freelist
 nodes are gone then
 (i.e. in old scheme would have used up all 1 million nodes
  from first segment):
@@ -1332,7 +1332,7 @@ and adding to the tree and other auxiliary structures:
 
 <a name="applydirdump"><b>applydirdump</b>()</a>
   ...
-  inomap_restore_pers() - read ino map 
+  inomap_restore_pers() - read ino map
   read directories and their entries
     loop 'til null hdr
        dirh = <b>tree_begindir</b>(fhdr, dah) - process dir filehdr
@@ -1352,7 +1352,7 @@ and adding to the tree and other auxiliary structures:
     new directory - 1st time seen
     dah = dirattr_add(fhdrp) - add dir header to dirattr structure
     hardh = Node_alloc(ino, gen,....,NF_ISDIR|NF_NEWORPH)
-    link_in(hardh) - link into tree 
+    link_in(hardh) - link into tree
     adopt(p_orphh, hardh, NRH_NULL) - put dir in orphanage directory
   else
     ...
@@ -1379,12 +1379,12 @@ and adding to the tree and other auxiliary structures:
 A cumulative restore seems a bit different than one might expect.
 It tries to restore the state of the filesystem at the time of
 the incremental dump. As the man page states:
-"This can involve adding, deleting, renaming, linking, 
+"This can involve adding, deleting, renaming, linking,
  and unlinking files and directories." From a coding point of view,
 this means we need to know what the dirent tree was like previously
 compared with what the dirent tree is like now. We need this so
-we can see what was added and deleted. So this means that the 
-dirent tree, which is stored as an mmap'ed file in 
+we can see what was added and deleted. So this means that the
+dirent tree, which is stored as an mmap'ed file in
 <i>restoredir/xfsrestorehousekeepingdir/tree</i> should not be deleted
 between cumulative restores (as we need to keep using it).
 <p>
@@ -1396,8 +1396,8 @@ dirents, it looks them up in the tree (created on previous restore).
 If the entry alreadys exists then it marks it as <i>NF_REFED</i>.
 <p>
 In case a dirent has gone away between times of incremental dumps,
-xfsrestore does an extra pass in the tree preprocessing 
-which traverses the tree looking for non-referenced (not <i>NF_REFED</i>) 
+xfsrestore does an extra pass in the tree preprocessing
+which traverses the tree looking for non-referenced (not <i>NF_REFED</i>)
 nodes so that if they exist in the FS (i.e. are <i>NF_REAL</i>) then
 they can be deleted (so that the FS resembles what it was at the time
 of the incremental dump).
@@ -1418,7 +1418,7 @@ cumulative restoral, it does a 4 step postprocessing (<b>treepost</b>):
    <td><b>1. noref_elim_recurse</b></td>
    <td><ul>
    <li>remove deleted dirs
-   <li>rename moved dirs to orphanage	
+   <li>rename moved dirs to orphanage
    <li>remove extra deleted hard links
    <li>rename moved non-dirs to orphanage
    </ul></td>
@@ -1443,7 +1443,7 @@ cumulative restoral, it does a 4 step postprocessing (<b>treepost</b>):
    <li>create a link on rename error (don't understand this one)
    </ul></td>
 </tr>
-</table>   
+</table>
 
 <p>
 Step 1 was changed so that files which are deleted and not moved
@@ -1459,13 +1459,13 @@ The new step is:
    <td><b>1. noref_elim_recurse</b></td>
    <td><ul>
    <li>remove deleted dirs
-   <li>rename moved dirs to orphanage	
+   <li>rename moved dirs to orphanage
    <li>remove extra deleted hard links
    <li>rename moved non-dirs to orphanage
    <li>remove deleted non-dirs which aren't part of a rename
    </ul></td>
 </tr>
-</table>   
+</table>
 <p>
 One will notice that renames are not performed directly.
 Instead entries are renamed to the orphanage, directories are
@@ -1481,12 +1481,12 @@ should not happen now since it is done earlier.
 <hr>
 <h4><a name="partial_reg">Partial Registry</a></h4>
 
-The partial registry is a data structure used in <i>xfsrestore</i> 
-for ensuring that files which have been split into multiple extent groups, 
+The partial registry is a data structure used in <i>xfsrestore</i>
+for ensuring that files which have been split into multiple extent groups,
 do not restore the extended attributes until the entire file has been
 restored. The reason for this is apparently so that DMAPI attributes
 aren't restored until we have the complete file. Each extent group dumped
-has the identical copy of the extended attributes (EAs) for that file, 
+has the identical copy of the extended attributes (EAs) for that file,
 thus without this data-structure we could apply the first EAs we come across.
 <p>
 The data structure is of the form:
@@ -1535,8 +1535,8 @@ then the extent range for this file is updated with the partial
 registry. If the file doesn't exist in the array then a new entry is
 added. If the file does exist in the array then the extent group for
 the given drive is updated. It is worth remembering that one drive
-(stream) can have multiple extent groups (if it is >16Mb) in which 
-case the extent group is just extended (they are split up in order). 
+(stream) can have multiple extent groups (if it is >16Mb) in which
+case the extent group is just extended (they are split up in order).
 <p>
 A bug was discovered in this area of code, for <i>DMF offline</i> files
 which have an associated file size but no data blocks allocated and
@@ -1550,7 +1550,7 @@ restore data are now special cased.
 
 <h3><a name="drive_strategy">Drive Strategies</a></h3>
 The I/O which happens when reading and writing the dump
-can be to a tape, file, stdout or 
+can be to a tape, file, stdout or
 to a tape remotely via rsh(1) (or $RSH)  and rmt(1) (or $RMT).
 There are 3 pieces of code called strategies which
 handle the dump I/O:
@@ -1600,8 +1600,8 @@ The scoring function is called ds_match.
    with path (not available on Linux), score -10 if the following:
 	<ul>
 	<li>stat fails
-	<li>it is not a character device 
-	<li>its real path does not contain "/nst", "/st" nor "/mt". 
+	<li>it is not a character device
+	<li>its real path does not contain "/nst", "/st" nor "/mt".
 	</ul>
    </td>
 </tr>
@@ -1644,29 +1644,29 @@ The scoring function is called ds_match.
 Each strategy is organised like a "class" with functions/methods
 in the data structure:
 <pre>
-        do_init,                
-        do_sync,                
-        do_begin_read,          
-        do_read,                
-        do_return_read_buf,     
-        do_get_mark,            
-        do_seek_mark,           
-        do_next_mark,           
-        do_end_read,            
-        do_begin_write,         
-        do_set_mark,            
-        do_get_write_buf,       
-        do_write,               
-        do_get_align_cnt,       
-        do_end_write,           
-        do_fsf,                 
-        do_bsf,                 
-        do_rewind,              
-        do_erase,               
-        do_eject_media,         
-        do_get_device_class,    
-        do_display_metrics,     
-        do_quit,                
+        do_init,
+        do_sync,
+        do_begin_read,
+        do_read,
+        do_return_read_buf,
+        do_get_mark,
+        do_seek_mark,
+        do_next_mark,
+        do_end_read,
+        do_begin_write,
+        do_set_mark,
+        do_get_write_buf,
+        do_write,
+        do_get_align_cnt,
+        do_end_write,
+        do_fsf,
+        do_bsf,
+        do_rewind,
+        do_erase,
+        do_eject_media,
+        do_get_device_class,
+        do_display_metrics,
+        do_quit,
 </pre>
 
 <h4><a name="drive_scsitape">Drive Scsitape</a></h4>
@@ -1680,10 +1680,10 @@ If xfsdump/xfsrestore is running single-threaded (-Z option)
 or is running on Linux (which is not multi-threaded) then
 records are read/written straight to the tape. If it is running
 multi-threaded then a circular buffer is used as an intermediary
-between the client and slave threads.  
+between the client and slave threads.
 <p>
-Initially <i>drive_init1()</i> calls <i>ds_instantiate()</i> which 
-if dump/restore is running multi-threaded, 
+Initially <i>drive_init1()</i> calls <i>ds_instantiate()</i> which
+if dump/restore is running multi-threaded,
 creates the ring buffer with <i>ring_create</i> which initialises
 the state to RING_STAT_INIT and sets up the slave thread with
 ring_slave_entry.
@@ -1720,7 +1720,7 @@ Prior to reading, one needs to call <i>do_begin_read()</i>,
 which calls <i>prepare_drive()</i>. <i>prepare_drive()</i> opens
 the tape drive if necessary and gets its status.
 It then works out the tape record size to use
-(<i>set_best_blk_and_rec_sz</i>) using 
+(<i>set_best_blk_and_rec_sz</i>) using
 current max blksize (mtinfo.maxblksz from ioctl(fd,MTIOCGETBLKINFO,minfo))
 on the scsi tape device in IRIX.
 
@@ -1737,7 +1737,7 @@ remote tape -> tape_recsz = STAPE_MIN_MAX_BLKSZ = 240 Kb
 On Linux:
 <ul>
 <li>
-local tape -> 
+local tape ->
     <ul>
     <li>
     tape_recsz = STAPE_MAX_LINUX_RECSZ = 1 Mb<br>
@@ -1750,7 +1750,7 @@ remote tape -> tape_recsz = STAPE_MIN_MAX_BLKSZ = 240 Kb
 </ul>
 <p>
 If we have a fixed size device, then it tries to read
-initially at minimum(2Mb, current max blksize) 
+initially at minimum(2Mb, current max blksize)
 but if it reads in a smaller number of bytes than this,
 then it will try again for STAPE_MIN_MAX_BLKSZ = 240 Kb data.
 
@@ -1766,7 +1766,7 @@ prepare_drive()
       else fixed blksize then
 	 ok = nread==tape_recsz & !EOD & !EOT & !FileMark
       endif
-      if ok then 
+      if ok then
 	validate_media_file_hdr()
       else
         could be an error or try again with newsize
@@ -1802,14 +1802,14 @@ client
 do_read()
   getrec()
     singlethreaded -> read_record() -> Read()
-    else -> 
+    else ->
       loop 'til contextp->dc_recp is set to a buffer
 	Ring_get() -> ring.c/ring_get()
 	  remove msg from ready queue
 	      block on ready queue - qsemP( ringp->r_ready_qsemh )
 	      msgp = &ringp->r_msgp[ ringp->r_ready_out_ix ];
 	      cyclic_inc(ringp->r_ready_out_ix)
-        case rm_stat: 
+        case rm_stat:
 	  RING_STAT_INIT, RING_STAT_NOPACK, RING_STAT_IGNORE
             put read msg on active queue
 		contextp->dc_msgp->rm_op = RING_OP_READ
@@ -1818,7 +1818,7 @@ do_read()
             contextp->dc_recp = contextp->dc_msgp->rm_bufp
           ...
         endcase
-      endloop 
+      endloop
 </pre>
 
 <h4><a name="librmt">Librmt</a></h4>
@@ -1835,21 +1835,21 @@ On linux, a librmt library is provided as part of the
 xfsdump distribution.
 The remote functions are used to dump/restore to remote
 tape drives on remote machines. It does this by using
-rsh or ssh to run rmt(1) on the remote machine. 
+rsh or ssh to run rmt(1) on the remote machine.
 The main caveat, however, comes into play for the <i>rmtioctl</i>
 function.  Unfortunately, the values for mt operations and status
-codes are different on different machines. 
+codes are different on different machines.
 For example, the offline command op
 on IRIX is 6 and on Linux it is 7. On Linux, 6 is rewind and
-on IRIX 7 is a no-op. 
+on IRIX 7 is a no-op.
 So for the Linux xfsdump, the <i>rmtiocl</i> function has been rewritten
-to check what the remote OS is (e.g. <i>rsh host uname</i>) 
-and do appropriate mappings of codes. 
+to check what the remote OS is (e.g. <i>rsh host uname</i>)
+and do appropriate mappings of codes.
 As well as the different mt op codes, the mtget structures
 differ for IRIX and Linux and for Linux 32 bit and Linux 64 bit.
-The size of the mtget structure is used to determine which 
+The size of the mtget structure is used to determine which
 structure it is and the value of <i>mt_type</i> is used to
-determine if endian conversion needs to be done. 
+determine if endian conversion needs to be done.
 <p>
 
 <h4><a name="drive_minrmt">Drive Minrmt</a></h4>
@@ -1863,13 +1863,13 @@ as a parameter. It was designed for talking
 to remote NON-IRIX hosts where the status codes can vary.
 However, as was mentioned in the discussion of librmt on Linux,
 the mt operations vary on foreign hosts as well as the status
-codes. So this is only a limited solution.  
+codes. So this is only a limited solution.
 
 <h4><a name="drive_simple">Drive Simple</a></h4>
 The simple strategy was designed for dumping to files
 or stdout. It is simpler in that it does <b>NOT</b> have to worry
 about:
-<ul> 
+<ul>
 <li>the ring buffer
 <li>talking to the scsitape driver with various operations and status
 <li>multiple media files
@@ -1879,7 +1879,7 @@ about:
 <hr>
 <h3><a name="inventory">Online Inventory</a></h3>
 xfsdump keeps a record of previous xfsdump executions in the online inventory
-stored in /var/xfsdump/inventory or for Linux, /var/lib/xfsdump/inventory. 
+stored in /var/xfsdump/inventory or for Linux, /var/lib/xfsdump/inventory.
 This inventory is used to determine which previous dump a incremental dump
 should be based on.  That is, when doing a level > 0 dump for a filesystem,
 xfsdump will refer to the online inventory to work out when the last dump for
@@ -1928,7 +1928,7 @@ The files are constructed like so:
   <th>Data structure</th>
 </tr>
 	<tr>
-  	<td>1</td>
+	<td>1</td>
     <td>
 <pre>
 typedef struct invt_counter {
@@ -1943,10 +1943,10 @@ typedef struct invt_counter {
 } invt_counter_t;
 </pre>
 		</td>
- 	</tr>
+	</tr>
 	<tr>
-  	<td>1 per filesystem</td>
-  	<td>
+	<td>1 per filesystem</td>
+	<td>
 <pre>
 typedef struct invt_fstab {
     uuid_t  ft_uuid;
@@ -1956,7 +1956,7 @@ typedef struct invt_fstab {
 } invt_fstab_t;
 </pre>
 		</td>
- 	</tr>
+	</tr>
 </table>
 
 
@@ -1968,7 +1968,7 @@ typedef struct invt_fstab {
   <th>Data structure</th>
 </tr>
 	<tr>
-  	<td>1</td>
+	<td>1</td>
     <td>
 <pre>
 typedef struct invt_counter {
@@ -1982,10 +1982,10 @@ typedef struct invt_counter {
 } invt_counter_t;
 </pre>
 		</td>
- 	</tr>
+	</tr>
 	<tr>
-  	<td>1 per StObj file</td>
-  	<td>
+	<td>1 per StObj file</td>
+	<td>
 <pre>
 typedef struct invt_entry {
     invt_timeperiod_t ie_timeperiod;
@@ -1994,7 +1994,7 @@ typedef struct invt_entry {
 } invt_entry_t;
 </pre>
 		</td>
- 	</tr>
+	</tr>
 </table>
 
 <h4>StObj</h4>
@@ -2005,7 +2005,7 @@ typedef struct invt_entry {
   <th>Data structure</th>
 </tr>
 	<tr>
-  	<td>1</td>
+	<td>1</td>
     <td>
 <pre>
 typedef struct invt_sescounter {
@@ -2021,11 +2021,11 @@ typedef struct invt_sescounter {
 } invt_sescounter_t;
 </pre>
 		</td>
- 	</tr>
+	</tr>
 	<tr>
-  	<td>fixed space for<br>
+	<td>fixed space for<br>
         INVT_STOBJ_MAXSESSIONS (ie. 5)</td>
-  	<td>
+	<td>
 <pre>
 typedef struct invt_seshdr {
     off64_t    sh_sess_off;    /* offset to rest of the sessioninfo */
@@ -2039,11 +2039,11 @@ typedef struct invt_seshdr {
 } invt_seshdr_t;
 </pre>
 		</td>
- 	</tr>
+	</tr>
 	<tr>
-  	<td>fixed space for<br>
+	<td>fixed space for<br>
         INVT_STOBJ_MAXSESSIONS (ie. 5)</td>
-  	<td>
+	<td>
 <pre>
 typedef struct invt_session {
     uuid_t   s_sesid;	/* this session's id: 16 bytes*/
@@ -2053,14 +2053,14 @@ typedef struct invt_session {
     char     s_devpath[INV_STRLEN];/* path to the device */
     u_int    s_cur_nstreams;/* number of streams created under
                                this session so far */
-    u_int    s_max_nstreams;/* number of media streams in 
+    u_int    s_max_nstreams;/* number of media streams in
                                the session */
     char     s_padding[16];
 } invt_session_t;</pre>
 		</td>
- 	</tr>
+	</tr>
   <tr>
-  	<td rowspan=2>any number</td>
+	<td rowspan=2>any number</td>
 	  <td>
 <pre>
 typedef struct invt_stream {
@@ -2078,7 +2078,7 @@ typedef struct invt_stream {
 } invt_stream_t;
 </pre>
 		</td>
-	</tr>	
+	</tr>
 	<tr>
 		<td>
 <pre>
@@ -2086,7 +2086,7 @@ typedef struct invt_mediafile {
     uuid_t           mf_moid;	    /* media object id */
     char             mf_label[INV_STRLEN];	/* media file label */
     invt_breakpt_t   mf_startino; /* file that we started out with */
-    invt_breakpt_t   mf_endino;	  /* the dump file we ended this 
+    invt_breakpt_t   mf_endino;	  /* the dump file we ended this
                                      media file with */
     off64_t          mf_nextmf;   /* links to other mfiles */
     off64_t          mf_prevmf;
@@ -2096,7 +2096,7 @@ typedef struct invt_mediafile {
     char             mf_padding[15];
 } invt_mediafile_t;
 </pre>
-  	</td>
+	</td>
   </tr>
 </table>
 
@@ -2123,12 +2123,12 @@ and modify the inventory.
 If -a is NOT used then it looks like nothing special happens
 for files which have dmf state attached to them.
 So if the file uses too many blocks compared to our maxsize param (-z)
-then it will not get dumped. No inode nor data. 
+then it will not get dumped. No inode nor data.
 The only evidence will be its entry in the inode
 map (which is dumped) which says its the state of a no-change-non-dir and
 the directory entry in the directories dump. The latter will mean
 that an <i>ls</i> in xfsrestore will show the file but it can
-not be restored. 
+not be restored.
 <p>
 If -a <b>is</b> used and the file has some DMF state then we do some magic.
 However, the magic really only seems to occur for dual-state files
@@ -2138,7 +2138,7 @@ A file is marked as dual-state/unmigrating by looking at the DMF attribute,
 dmfattrp->state[1]. i.e = DMF_ST_DUALSTATE or DMF_ST_UNMIGRATING
 If this is the case, then we set, dmf_f_ctxtp->candidate = 1.
 If we have such a changed dual-state file then we
-mark it as changed in the inode-map so it can be dumped. 
+mark it as changed in the inode-map so it can be dumped.
 If it is a dual state file, then its apparent size will be zero, so it
 will go onto the dumping stage.
 <p>
@@ -2162,7 +2162,7 @@ and add a new DMF attribute for it:
 <br>
 <b>Summary:</b>
 <ul>
-<li>dual state files (and unmigrating files) dumped with -a, 
+<li>dual state files (and unmigrating files) dumped with -a,
     cause magic to happen:
     <ul>
     <li>if file has changed then it will _always_ be marked
@@ -2175,7 +2175,7 @@ and add a new DMF attribute for it:
 <li>for all other cases,
      if the file has changed and its blocks cause it to exceed the
      maxsize param (-z) then the file will be marked as NOT-CHANGED
-     in the inode map and so will NOT be dumped at all 
+     in the inode map and so will NOT be dumped at all
 </ul>
 <p>
 
@@ -2196,7 +2196,7 @@ its entries <inode#,gen#,entry-sz,csum,entry-name>
 and extended-attribute header and attributes.
 <p>
 A non-directory file consists of a file header, extent-headers
-(for each extent), file data and extended-attribute header 
+(for each extent), file data and extended-attribute header
 and attributes. Some types of files don't have extent headers or data.
 <p>
 The xfsdump code says:
@@ -2217,7 +2217,7 @@ So this accounts for the:
   <li>global header
   <li>inode map
   <li>all the files
-  <li>all the direntory entries 
+  <li>all the direntory entries
      ( "+8" presumably to account for average file name length range,
        where 8 chars already included in header; as this structure
        is padded to the next 8 byte boundary, it accounts for names
@@ -2253,7 +2253,7 @@ It includes for each file:
 <ul>
   <li>any hole hdrs
   <li>alignment hdrs
-  <li>alignment padding 
+  <li>alignment padding
   <li>extent headers for data
   <li>actual _data_ of extents
 </ul>
@@ -2267,7 +2267,7 @@ From code:
 	bytecnt += sizeof( extenthdr_t );  /* ext. alignment header */
 	bytecnt += ( off64_t )cnt_to_align /* alignment padding */
 	bytecnt += sizeof( extenthdr_t );  /* extent header for data */
-	bytecnt += ( off64_t )actualsz;    /* actual extent data in file */  
+	bytecnt += ( off64_t )actualsz;    /* actual extent data in file */
 	bytecnt += ( off64_t )reqsz; /* write padding to make up extent size */
     sc_stat_datadone += ( size64_t )bc;
 </pre>
@@ -2285,7 +2285,7 @@ nor the extent hdr terminator:
     contextp->cc_mfilesz += bytecnt;
 </pre>
 It only adds this data size into the media file size.
- 
+
 </dl>
 <p>
 <hr>
@@ -2297,7 +2297,7 @@ It only adds this data size into the media file size.
 <li>What is the difference between a record and a block ?
     <ul><li>I don't think there is a difference.</ul>
 <li>Where are tape_recsz and tape_blksz used ?
-    <ul><li>Tape_recsz is used for the read/write byte cnt but 
+    <ul><li>Tape_recsz is used for the read/write byte cnt but
     I don't think tape_blksz is used.</ul>
 <li>What is the persistent inventory used for ?
 </ul>
diff --git a/po/de.po b/po/de.po
index 62face8..142f68f 100644
--- a/po/de.po
+++ b/po/de.po
@@ -446,8 +446,8 @@ msgstr ""
 "zurück, Fehlernummer %d (%s)\n"
 
 #: .././common/drive_minrmt.c:3823
-msgid "slave"
-msgstr "Slave"
+msgid "worker"
+msgstr "Worker"
 
 #: .././common/drive_minrmt.c:3891 .././common/drive_minrmt.c:3899
 msgid "KB"
