• NeilBrown's avatar
    md: support 'external' metadata for md arrays · e691063a
    NeilBrown authored
    - Add a state flag 'external' to indicate that the metadata is managed
      externally (by user-space) so important changes need to be
      left of user-space to handle.
      Alternates are non-persistant ('none') where there is no stable metadata -
      after the  array is stopped there is no record of it's status - and
      internal which can be version 0.90 or version 1.x
      These are selected by writing to the 'metadata' attribute.
    
    - move the updating of superblocks (sync_sbs) to after we have checked if
      there are any superblocks or not.
    
    - New array state 'write_pending'.  This means that the metadata records
      the array as 'clean', but a write has been requested, so the metadata has
      to be updated to record a 'dirty' array before the write can continue.
      This change is reported to md by writing 'active' to the array_state
      attribute.
    
    - tidy up marking of sb_dirty:
       - don't set sb_dirty when resync finishes as md_check_recovery
         calls md_update_sb when the sync thread finishes anyway.
       - Don't set sb_dirty in multipath_run as the array might not be dirty.
       - don't mark superblock dirty when switching to 'clean' if there
         is no internal superblock (if external, userspace can choose to
         update the superblock whenever it chooses to).
    Signed-off-by: default avatarNeil Brown <neilb@suse.de>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    e691063a
md.c 147 KB