• Brian Behlendorf's avatar
    staging/lustre: Limit reply buffer size · 44779340
    Brian Behlendorf authored
    When allocating a reply buffer for the striping information don't
    assume the unlikely worst case.  Instead, assume the common case
    and size the buffer based on the observed default ea/cookie size.
    
    The default size is initialized to a single stripe and allowed to
    grow up to an entire page if needed.  This means that for smallish
    filesystems (less than ~21 OSTs) where the worst case striping
    information can fit in a single page there is effectively no
    change.  Only for larger filesystem will the default be less than
    the maximum.  This has a number of advantages.
    
    * By limiting the default reply buffer size we avoid always
      vmalloc()'ing the buffer because it exceeds four pages in size
      and instead kmalloc() it.  This prevents the client from
      thrashing on the global vmalloc() spin lock.
    
    * A reply buffer of exactly the right size (no larger) is allocated
      in the overflow case.  These larger reply buffers are still
      unlikely to exceed the 16k limit where a vmalloc() will occur.
    
    * Saves memory in the common case.  Wide striped files exceeded
      the default are expected to be the exception.
    
    The reason this patch works is because the ptlrpc layer is smart
    enough to reallocate the reply buffer when an overflow occurs.
    Therefore the client doesn't have to drop the incoming reply and
    send a new request with a larger reply buffer.
    
    It's also worth mentioning that the reply buffer always contains
    a significant amount of extra padding because they are rounded up
    to the nearest power of two.  This means that even files striped
    wider than the default have a good chance of fitting in the
    allocated reply buffer.
    
    Also remove client eadatasize check in mdt xattr packing because
    as said above client can handle -EOVERFLOW.
    Signed-off-by: default avatarBrian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: default avatarLai Siyao <lai.siyao@intel.com>
    Reviewed-on: http://review.whamcloud.com/6339
    Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3338Reviewed-by: default avatarJames Simmons <uja.ornl@gmail.com>
    Reviewed-by: default avatarAndreas Dilger <andreas.dilger@intel.com>
    Reviewed-by: default avatarBob Glossman <bob.glossman@intel.com>
    Signed-off-by: default avatarOleg Drokin <oleg.drokin@intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    44779340
lproc_llite.c 40.5 KB