Skip to content
  • Sergey Senozhatsky's avatar
    zram: add dynamic device add/remove functionality · 6566d1a3
    Sergey Senozhatsky authored
    
    
    We currently don't support on-demand device creation.  The one and only
    way to have N zram devices is to specify num_devices module parameter
    (default value: 1).  IOW if, for some reason, at some point, user wants
    to have N + 1 devies he/she must umount all the existing devices, unload
    the module, load the module passing num_devices equals to N + 1.  And do
    this again, if needed.
    
    This patch introduces zram control sysfs class, which has two sysfs
    attrs:
    - hot_add      -- add a new zram device
    - hot_remove   -- remove a specific (device_id) zram device
    
    hot_add sysfs attr is read-only and has only automatic device id
    assignment mode (as requested by Minchan Kim).  read operation performed
    on this attr creates a new zram device and returns back its device_id or
    error status.
    
    Usage example:
    	# add a new specific zram device
    	cat /sys/class/zram-control/hot_add
    	2
    
    	# remove a specific zram device
    	echo 4 > /sys/class/zram-control/hot_remove
    
    Returning zram_add() error code back to user (-ENOMEM in this case)
    
    	cat /sys/class/zram-control/hot_add
    	cat: /sys/class/zram-control/hot_add: Cannot allocate memory
    
    NOTE, there might be users who already depend on the fact that at least
    zram0 device gets always created by zram_init(). Preserve this behavior.
    
    [minchan@kernel.org: use zram->claim to avoid lockdep splat]
    Signed-off-by: default avatarSergey Senozhatsky <sergey.senozhatsky@gmail.com>
    Cc: Minchan Kim <minchan@kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    6566d1a3