1. 16 6月, 2009 12 次提交
    • S
      md: Removal of hash table in linear raid · 45d4582f
      Sandeep K Sinha 提交于
      Get rid of sector_div and hash table for linear raid and replace
      with a linear search in which_dev.
      The hash table adds a lot of complexity for little if any gain.
      Ultimately a binary search will be used which will have smaller
      cache foot print, a similar number of memory access, and no
      divisions.
      Signed-off-by: NSandeep K Sinha <sandeepksinha@gmail.com>
      Signed-off-by: NNeilBrown <neilb@suse.de>
      45d4582f
    • N
      md: remove mddev_to_conf "helper" macro · 070ec55d
      NeilBrown 提交于
      Having a macro just to cast a void* isn't really helpful.
      I would must rather see that we are simply de-referencing ->private,
      than have to know what the macro does.
      
      So open code the macro everywhere and remove the pointless cast.
      Signed-off-by: NNeilBrown <neilb@suse.de>
      070ec55d
    • N
      md: raid0: remove setting of segment boundary. · a6b3deaf
      NeilBrown 提交于
      
      This setting doesn't seem to make sense (half the chunk size??) and
      shouldn't be needed.
      The segment boundary exported by raid0 should simply be the minimum
      of the segment boundary of all component devices.  And we already
      get that right.
      Signed-off-by: NNeilBrown <neilb@suse.de>
      a6b3deaf
    • N
      md: raid0: remove ->dev pointer from strip_zone structure · b414579f
      NeilBrown 提交于
      If we treat conf->devlist more like a 2 dimensional array,
      we can get the devlist for a particular zone simply by indexing
      that array, so we don't need to store the pointers to subarrays
      in strip_zone.  This makes strip_zone smaller and so (hopefully)
      searches faster.
      Signed-of-by: NNeilBrown <neilb@suse.de>
      b414579f
    • N
      md: raid0: remove ->sectors from the strip_zone structure. · 49f357a2
      NeilBrown 提交于
      storing ->sectors is redundant as is can be computed from the
      difference  z->zone_end - (z-1)->zone_end
      
      The one place where it is used, it is just as efficient to use
      a zone_end value instead.
      
      And removing it makes strip_zone smaller, so they array of these that
      is searched on every request has a better chance to say in cache.
      
      So discard the field and get the value from elsewhere.
      Signed-off-by: NNeilBrown <neilb@suse.de>
      49f357a2
    • A
      md: raid0: Fix a memory leak when stopping a raid0 array. · fb5ab4b5
      Andre Noll 提交于
      raid0_stop() removes all references to the raid0 configuration but
      misses to free the ->devlist buffer.
      
      This patch closes this leak, removes a pointless initialization and
      fixes a coding style issue in raid0_stop().
      Signed-off-by: NAndre Noll <maan@systemlinux.org>
      Signed-off-by: NNeilBrown <neilb@suse.de>
      fb5ab4b5
    • A
      md: raid0: Allocate all buffers for the raid0 configuration in one function. · ed7b0038
      Andre Noll 提交于
      Currently the raid0 configuration is allocated in raid0_run() while
      the buffers for the strip_zone and the dev_list arrays are allocated
      in create_strip_zones(). On errors, all three buffers are freed
      in raid0_run().
      
      It's easier and more readable to do the allocation and cleanup within
      a single function. So move that code into create_strip_zones().
      Signed-off-by: NAndre Noll <maan@systemlinux.org>
      Signed-off-by: NNeilBrown <neilb@suse.de>
      ed7b0038
    • A
      md: raid0: Make raid0_run() return a proper error code. · 5568a603
      Andre Noll 提交于
      Currently raid0_run() always returns -ENOMEM on errors. This is
      incorrect as running the array might fail for other reasons, for
      example because not all component devices were available.
      
      This patch changes create_strip_zones() so that it returns a proper
      error code (either -ENOMEM or -EINVAL) rather than 1 on errors and
      makes raid0_run(), its single caller, return that value instead
      of -ENOMEM.
      Signed-off-by: NAndre Noll <maan@systemlinux.org>
      Signed-off-by: NNeilBrown <neilb@suse.de>
      5568a603
    • A
      md: raid0: Remove hash spacing and sector shift. · 8f79cfcd
      Andre Noll 提交于
      The "sector_shift" and "spacing" fields of struct raid0_private_data
      were only used for the hash table lookups. So the removal of the
      hash table allows get rid of these fields as well which simplifies
      create_strip_zones() and raid0_run() quite a bit.
      Signed-off-by: NAndre Noll <maan@systemlinux.org>
      Signed-off-by: NNeilBrown <neilb@suse.de>
      8f79cfcd
    • A
      md: raid0: Remove hash table. · 09770e0b
      Andre Noll 提交于
      The raid0 hash table has become unused due to the changes in the
      previous patch. This patch removes the hash table allocation and
      setup code and kills the hash_table field of struct raid0_private_data.
      Signed-off-by: NAndre Noll <maan@systemlinux.org>
      Signed-off-by: NNeilBrown <neilb@suse.de>
      09770e0b
    • N
      md/raid0: two cleanups in create_stripe_zones. · d27a43ab
      NeilBrown 提交于
      1/ remove current_start.  The same value is available in
           zone->dev_start and storing it separately doesn't gain anything.
      2/ rename curr_zone_start to curr_zone_end as we are now more
           focused on the 'end' of each zone.  We end up storing the
           same number though - the old name was a little confusing
           (and what does 'current' mean in this context anyway).
      Signed-off-by: NNeilBrown <neilb@suse.de>
      d27a43ab
    • A
      md: raid0: Replace hash table lookup by looping over all strip_zones. · dc582663
      Andre Noll 提交于
      The number of strip_zones of a raid0 array is bounded by the number of
      drives in the array and is in fact much smaller for typical setups. For
      example, any raid0 array containing identical disks will have only
      a single strip_zone.
      
      Therefore, the hash tables which are used for quickly finding the
      strip_zone that holds a particular sector are of questionable value
      and add quite a bit of unnecessary complexity.
      
      This patch replaces the hash table lookup by equivalent code which
      simply loops over all strip zones to find the zone that holds the
      given sector.
      
      In order to make this loop as fast as possible, the zone->start field
      of struct strip_zone has been renamed to zone_end, and it now stores
      the beginning of the next zone in sectors. This allows to save one
      addition in the loop.
      
      Subsequent cleanup patches will remove the hash table structure.
      Signed-off-by: NAndre Noll <maan@systemlinux.org>
      Signed-off-by: NNeilBrown <neilb@suse.de>
      dc582663
  2. 15 6月, 2009 24 次提交
  3. 14 6月, 2009 4 次提交