• Sergey Senozhatsky's avatar
    zram: factor out single stream compression · 9cc97529
    Sergey Senozhatsky authored
    This is preparation patch to add multi stream support to zcomp.
    
    Introduce struct zcomp_strm_single and a set of functions to manage
    zcomp_strm stream access.  zcomp_strm_single implements single compession
    stream, same way as current zcomp implementation.  This moves zcomp_strm
    stream control and locking from zcomp, so compressing backend zcomp is not
    aware of required locking.
    
    Single and multi streams require different locking schemes.  Minchan Kim
    reported that spinlock-based locking scheme (which is used in multi stream
    implementation) has demonstrated a severe perfomance regression for single
    compression stream case, comparing to mutex-based.  see
    https://lkml.org/lkml/2014/2/18/16
    
    The following set of functions added:
    - zcomp_strm_single_find()/zcomp_strm_single_release()
      find and release a compression stream, implement required locking
    - zcomp_strm_single_create()/zcomp_strm_single_destroy()
      create and destroy zcomp_strm_single
    
    New ->strm_find() and ->strm_release() callbacks added to zcomp, which are
    set to zcomp_strm_single_find() and zcomp_strm_single_release() during
    initialisation.  Instead of direct locking and zcomp_strm access from
    zcomp_strm_find() and zcomp_strm_release(), zcomp now calls ->strm_find()
    and ->strm_release() correspondingly.
    Signed-off-by: default avatarSergey Senozhatsky <sergey.senozhatsky@gmail.com>
    Acked-by: default avatarMinchan Kim <minchan@kernel.org>
    Cc: Jerome Marchand <jmarchan@redhat.com>
    Cc: Nitin Gupta <ngupta@vflare.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    9cc97529
zcomp.c 3.64 KB