Re: [PATCH] zram: remove obsolete sysfs attrs
From: Sergey Senozhatsky
Date: Tue Jan 17 2017 - 23:01:50 EST
sorry, forgot to Cc Jonathan Corbet
https://marc.info/?l=linux-kernel&m=148471192416338
On (01/18/17 12:58), Sergey Senozhatsky wrote:
> Date: Wed, 18 Jan 2017 12:58:38 +0900
> From: Sergey Senozhatsky <sergey.senozhatsky.work@xxxxxxxxx>
> To: Minchan Kim <minchan@xxxxxxxxxx>, Andrew Morton
> <akpm@xxxxxxxxxxxxxxxxxxxx>
> Cc: zhouxianrong@xxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
> sergey.senozhatsky@xxxxxxxxx, sergey.senozhatsky.work@xxxxxxxxx
> Subject: [PATCH] zram: remove obsolete sysfs attrs
> X-Mailer: git-send-email 2.11.0
>
> We had a deprecated_attr_warn() warning for 2 years and now the
> time has come and we finally can do the cleanup.
>
> The plan was as follows:
>
> : per-stat sysfs attributes are considered to be deprecated.
> : The basic strategy is:
> : -- the existing RW nodes will be downgraded to WO nodes (in linux 4.11)
> : -- deprecated RO sysfs nodes will eventually be removed (in linux 4.11)
> :
> : The list of deprecated attributes can be found here:
> : Documentation/ABI/obsolete/sysfs-block-zram
> :
> : Basically, every attribute that has its own read accessible sysfs
> : node (e.g. num_reads) *AND* is accessible via one of the stat files
> : (zram<id>/stat or zram<id>/io_stat or zram<id>/mm_stat) is considered
> : to be deprecated.
>
> The patch also removes `obsolete/sysfs-block-zram', clean ups
> `testing/sysfs-block-zram' and tweaks zram.txt files.
>
> Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@xxxxxxxxx>
> ---
> Documentation/ABI/obsolete/sysfs-block-zram | 119 ----------------------------
> Documentation/ABI/testing/sysfs-block-zram | 101 ++---------------------
> Documentation/blockdev/zram.txt | 74 ++++++++---------
> drivers/block/zram/zram_drv.c | 101 +----------------------
> 4 files changed, 42 insertions(+), 353 deletions(-)
> delete mode 100644 Documentation/ABI/obsolete/sysfs-block-zram
>
> diff --git a/Documentation/ABI/obsolete/sysfs-block-zram b/Documentation/ABI/obsolete/sysfs-block-zram
> deleted file mode 100644
> index 720ea92cfb2e..000000000000
> --- a/Documentation/ABI/obsolete/sysfs-block-zram
> +++ /dev/null
> @@ -1,119 +0,0 @@
> -What: /sys/block/zram<id>/num_reads
> -Date: August 2015
> -Contact: Sergey Senozhatsky <sergey.senozhatsky@xxxxxxxxx>
> -Description:
> - The num_reads file is read-only and specifies the number of
> - reads (failed or successful) done on this device.
> - Now accessible via zram<id>/stat node.
> -
> -What: /sys/block/zram<id>/num_writes
> -Date: August 2015
> -Contact: Sergey Senozhatsky <sergey.senozhatsky@xxxxxxxxx>
> -Description:
> - The num_writes file is read-only and specifies the number of
> - writes (failed or successful) done on this device.
> - Now accessible via zram<id>/stat node.
> -
> -What: /sys/block/zram<id>/invalid_io
> -Date: August 2015
> -Contact: Sergey Senozhatsky <sergey.senozhatsky@xxxxxxxxx>
> -Description:
> - The invalid_io file is read-only and specifies the number of
> - non-page-size-aligned I/O requests issued to this device.
> - Now accessible via zram<id>/io_stat node.
> -
> -What: /sys/block/zram<id>/failed_reads
> -Date: August 2015
> -Contact: Sergey Senozhatsky <sergey.senozhatsky@xxxxxxxxx>
> -Description:
> - The failed_reads file is read-only and specifies the number of
> - failed reads happened on this device.
> - Now accessible via zram<id>/io_stat node.
> -
> -What: /sys/block/zram<id>/failed_writes
> -Date: August 2015
> -Contact: Sergey Senozhatsky <sergey.senozhatsky@xxxxxxxxx>
> -Description:
> - The failed_writes file is read-only and specifies the number of
> - failed writes happened on this device.
> - Now accessible via zram<id>/io_stat node.
> -
> -What: /sys/block/zram<id>/notify_free
> -Date: August 2015
> -Contact: Sergey Senozhatsky <sergey.senozhatsky@xxxxxxxxx>
> -Description:
> - The notify_free file is read-only. Depending on device usage
> - scenario it may account a) the number of pages freed because
> - of swap slot free notifications or b) the number of pages freed
> - because of REQ_DISCARD requests sent by bio. The former ones
> - are sent to a swap block device when a swap slot is freed, which
> - implies that this disk is being used as a swap disk. The latter
> - ones are sent by filesystem mounted with discard option,
> - whenever some data blocks are getting discarded.
> - Now accessible via zram<id>/io_stat node.
> -
> -What: /sys/block/zram<id>/zero_pages
> -Date: August 2015
> -Contact: Sergey Senozhatsky <sergey.senozhatsky@xxxxxxxxx>
> -Description:
> - The zero_pages file is read-only and specifies number of zero
> - filled pages written to this disk. No memory is allocated for
> - such pages.
> - Now accessible via zram<id>/mm_stat node.
> -
> -What: /sys/block/zram<id>/orig_data_size
> -Date: August 2015
> -Contact: Sergey Senozhatsky <sergey.senozhatsky@xxxxxxxxx>
> -Description:
> - The orig_data_size file is read-only and specifies uncompressed
> - size of data stored in this disk. This excludes zero-filled
> - pages (zero_pages) since no memory is allocated for them.
> - Unit: bytes
> - Now accessible via zram<id>/mm_stat node.
> -
> -What: /sys/block/zram<id>/compr_data_size
> -Date: August 2015
> -Contact: Sergey Senozhatsky <sergey.senozhatsky@xxxxxxxxx>
> -Description:
> - The compr_data_size file is read-only and specifies compressed
> - size of data stored in this disk. So, compression ratio can be
> - calculated using orig_data_size and this statistic.
> - Unit: bytes
> - Now accessible via zram<id>/mm_stat node.
> -
> -What: /sys/block/zram<id>/mem_used_total
> -Date: August 2015
> -Contact: Sergey Senozhatsky <sergey.senozhatsky@xxxxxxxxx>
> -Description:
> - The mem_used_total file is read-only and specifies the amount
> - of memory, including allocator fragmentation and metadata
> - overhead, allocated for this disk. So, allocator space
> - efficiency can be calculated using compr_data_size and this
> - statistic.
> - Unit: bytes
> - Now accessible via zram<id>/mm_stat node.
> -
> -What: /sys/block/zram<id>/mem_used_max
> -Date: August 2015
> -Contact: Sergey Senozhatsky <sergey.senozhatsky@xxxxxxxxx>
> -Description:
> - The mem_used_max file is read/write and specifies the amount
> - of maximum memory zram have consumed to store compressed data.
> - For resetting the value, you should write "0". Otherwise,
> - you could see -EINVAL.
> - Unit: bytes
> - Downgraded to write-only node: so it's possible to set new
> - value only; its current value is stored in zram<id>/mm_stat
> - node.
> -
> -What: /sys/block/zram<id>/mem_limit
> -Date: August 2015
> -Contact: Sergey Senozhatsky <sergey.senozhatsky@xxxxxxxxx>
> -Description:
> - The mem_limit file is read/write and specifies the maximum
> - amount of memory ZRAM can use to store the compressed data.
> - The limit could be changed in run time and "0" means disable
> - the limit. No limit is the initial state. Unit: bytes
> - Downgraded to write-only node: so it's possible to set new
> - value only; its current value is stored in zram<id>/mm_stat
> - node.
> diff --git a/Documentation/ABI/testing/sysfs-block-zram b/Documentation/ABI/testing/sysfs-block-zram
> index 4518d30b8c2e..451b6d882b2c 100644
> --- a/Documentation/ABI/testing/sysfs-block-zram
> +++ b/Documentation/ABI/testing/sysfs-block-zram
> @@ -22,41 +22,6 @@ Description:
> device. The reset operation frees all the memory associated
> with this device.
>
> -What: /sys/block/zram<id>/num_reads
> -Date: August 2010
> -Contact: Nitin Gupta <ngupta@xxxxxxxxxx>
> -Description:
> - The num_reads file is read-only and specifies the number of
> - reads (failed or successful) done on this device.
> -
> -What: /sys/block/zram<id>/num_writes
> -Date: August 2010
> -Contact: Nitin Gupta <ngupta@xxxxxxxxxx>
> -Description:
> - The num_writes file is read-only and specifies the number of
> - writes (failed or successful) done on this device.
> -
> -What: /sys/block/zram<id>/invalid_io
> -Date: August 2010
> -Contact: Nitin Gupta <ngupta@xxxxxxxxxx>
> -Description:
> - The invalid_io file is read-only and specifies the number of
> - non-page-size-aligned I/O requests issued to this device.
> -
> -What: /sys/block/zram<id>/failed_reads
> -Date: February 2014
> -Contact: Sergey Senozhatsky <sergey.senozhatsky@xxxxxxxxx>
> -Description:
> - The failed_reads file is read-only and specifies the number of
> - failed reads happened on this device.
> -
> -What: /sys/block/zram<id>/failed_writes
> -Date: February 2014
> -Contact: Sergey Senozhatsky <sergey.senozhatsky@xxxxxxxxx>
> -Description:
> - The failed_writes file is read-only and specifies the number of
> - failed writes happened on this device.
> -
> What: /sys/block/zram<id>/max_comp_streams
> Date: February 2014
> Contact: Sergey Senozhatsky <sergey.senozhatsky@xxxxxxxxx>
> @@ -73,74 +38,24 @@ Description:
> available and selected compression algorithms, change
> compression algorithm selection.
>
> -What: /sys/block/zram<id>/notify_free
> -Date: August 2010
> -Contact: Nitin Gupta <ngupta@xxxxxxxxxx>
> -Description:
> - The notify_free file is read-only. Depending on device usage
> - scenario it may account a) the number of pages freed because
> - of swap slot free notifications or b) the number of pages freed
> - because of REQ_DISCARD requests sent by bio. The former ones
> - are sent to a swap block device when a swap slot is freed, which
> - implies that this disk is being used as a swap disk. The latter
> - ones are sent by filesystem mounted with discard option,
> - whenever some data blocks are getting discarded.
> -
> -What: /sys/block/zram<id>/zero_pages
> -Date: August 2010
> -Contact: Nitin Gupta <ngupta@xxxxxxxxxx>
> -Description:
> - The zero_pages file is read-only and specifies number of zero
> - filled pages written to this disk. No memory is allocated for
> - such pages.
> -
> -What: /sys/block/zram<id>/orig_data_size
> -Date: August 2010
> -Contact: Nitin Gupta <ngupta@xxxxxxxxxx>
> -Description:
> - The orig_data_size file is read-only and specifies uncompressed
> - size of data stored in this disk. This excludes zero-filled
> - pages (zero_pages) since no memory is allocated for them.
> - Unit: bytes
> -
> -What: /sys/block/zram<id>/compr_data_size
> -Date: August 2010
> -Contact: Nitin Gupta <ngupta@xxxxxxxxxx>
> -Description:
> - The compr_data_size file is read-only and specifies compressed
> - size of data stored in this disk. So, compression ratio can be
> - calculated using orig_data_size and this statistic.
> - Unit: bytes
> -
> -What: /sys/block/zram<id>/mem_used_total
> -Date: August 2010
> -Contact: Nitin Gupta <ngupta@xxxxxxxxxx>
> -Description:
> - The mem_used_total file is read-only and specifies the amount
> - of memory, including allocator fragmentation and metadata
> - overhead, allocated for this disk. So, allocator space
> - efficiency can be calculated using compr_data_size and this
> - statistic.
> - Unit: bytes
> -
> What: /sys/block/zram<id>/mem_used_max
> Date: August 2014
> Contact: Minchan Kim <minchan@xxxxxxxxxx>
> Description:
> - The mem_used_max file is read/write and specifies the amount
> - of maximum memory zram have consumed to store compressed data.
> - For resetting the value, you should write "0". Otherwise,
> - you could see -EINVAL.
> + The mem_used_max file is write-only and is used to reset
> + the counter of maximum memory zram have consumed to store
> + compressed data. For resetting the value, you should write
> + "0". Otherwise, you could see -EINVAL.
> Unit: bytes
>
> What: /sys/block/zram<id>/mem_limit
> Date: August 2014
> Contact: Minchan Kim <minchan@xxxxxxxxxx>
> Description:
> - The mem_limit file is read/write and specifies the maximum
> - amount of memory ZRAM can use to store the compressed data. The
> - limit could be changed in run time and "0" means disable the
> - limit. No limit is the initial state. Unit: bytes
> + The mem_limit file is write-only and specifies the maximum
> + amount of memory ZRAM can use to store the compressed data.
> + The limit could be changed in run time and "0" means disable
> + the limit. No limit is the initial state. Unit: bytes
>
> What: /sys/block/zram<id>/compact
> Date: August 2015
> diff --git a/Documentation/blockdev/zram.txt b/Documentation/blockdev/zram.txt
> index 0535ae1f73e5..1c0c08d9206b 100644
> --- a/Documentation/blockdev/zram.txt
> +++ b/Documentation/blockdev/zram.txt
> @@ -161,42 +161,14 @@ Name access description
> disksize RW show and set the device's disk size
> initstate RO shows the initialization state of the device
> reset WO trigger device reset
> -num_reads RO the number of reads
> -failed_reads RO the number of failed reads
> -num_write RO the number of writes
> -failed_writes RO the number of failed writes
> -invalid_io RO the number of non-page-size-aligned I/O requests
> +mem_used_max WO reset the `mem_used_max' counter (see later)
> +mem_limit WO specifies the maximum amount of memory ZRAM can use
> + to store the compressed data
> max_comp_streams RW the number of possible concurrent compress operations
> comp_algorithm RW show and change the compression algorithm
> -notify_free RO the number of notifications to free pages (either
> - slot free notifications or REQ_DISCARD requests)
> -zero_pages RO the number of zero filled pages written to this disk
> -orig_data_size RO uncompressed size of data stored in this disk
> -compr_data_size RO compressed size of data stored in this disk
> -mem_used_total RO the amount of memory allocated for this disk
> -mem_used_max RW the maximum amount of memory zram have consumed to
> - store the data (to reset this counter to the actual
> - current value, write 1 to this attribute)
> -mem_limit RW the maximum amount of memory ZRAM can use to store
> - the compressed data
> -pages_compacted RO the number of pages freed during compaction
> - (available only via zram<id>/mm_stat node)
> compact WO trigger memory compaction
> debug_stat RO this file is used for zram debugging purposes
>
> -WARNING
> -=======
> -per-stat sysfs attributes are considered to be deprecated.
> -The basic strategy is:
> --- the existing RW nodes will be downgraded to WO nodes (in linux 4.11)
> --- deprecated RO sysfs nodes will eventually be removed (in linux 4.11)
> -
> -The list of deprecated attributes can be found here:
> -Documentation/ABI/obsolete/sysfs-block-zram
> -
> -Basically, every attribute that has its own read accessible sysfs node
> -(e.g. num_reads) *AND* is accessible via one of the stat files (zram<id>/stat
> -or zram<id>/io_stat or zram<id>/mm_stat) is considered to be deprecated.
>
> User space is advised to use the following files to read the device statistics.
>
> @@ -211,22 +183,40 @@ The stat file represents device's I/O statistics not accounted by block
> layer and, thus, not available in zram<id>/stat file. It consists of a
> single line of text and contains the following stats separated by
> whitespace:
> - failed_reads
> - failed_writes
> - invalid_io
> - notify_free
> + failed_reads the number of failed reads
> + failed_writes the number of failed writes
> + invalid_io the number of non-page-size-aligned I/O requests
> + notify_free Depending on device usage scenario it may account
> + a) the number of pages freed because of swap slot free
> + notifications or b) the number of pages freed because of
> + REQ_DISCARD requests sent by bio. The former ones are
> + sent to a swap block device when a swap slot is freed,
> + which implies that this disk is being used as a swap disk.
> + The latter ones are sent by filesystem mounted with
> + discard option, whenever some data blocks are getting
> + discarded.
>
> File /sys/block/zram<id>/mm_stat
>
> The stat file represents device's mm statistics. It consists of a single
> line of text and contains the following stats separated by whitespace:
> - orig_data_size
> - compr_data_size
> - mem_used_total
> - mem_limit
> - mem_used_max
> - zero_pages
> - num_migrated
> + orig_data_size uncompressed size of data stored in this disk.
> + This excludes zero-filled pages (zero_pages) since no
> + memory is allocated for them.
> + Unit: bytes
> + compr_data_size compressed size of data stored in this disk
> + mem_used_total the amount of memory allocated for this disk. This
> + includes allocator fragmentation and metadata overhead,
> + allocated for this disk. So, allocator space efficiency
> + can be calculated using compr_data_size and this statistic.
> + Unit: bytes
> + mem_limit the maximum amount of memory ZRAM can use to store
> + the compressed data
> + mem_used_max the maximum amount of memory zram have consumed to
> + store the data
> + zero_pages the number of zero filled pages written to this disk.
> + No memory is allocated for such pages.
> + pages_compacted the number of pages freed during compaction
>
> 9) Deactivate:
> swapoff /dev/zram0
> diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
> index e5ab7d9e8c45..85737b6474ac 100644
> --- a/drivers/block/zram/zram_drv.c
> +++ b/drivers/block/zram/zram_drv.c
> @@ -45,27 +45,6 @@ static const char *default_compressor = "lzo";
> /* Module params (documentation at end) */
> static unsigned int num_devices = 1;
>
> -static inline void deprecated_attr_warn(const char *name)
> -{
> - pr_warn_once("%d (%s) Attribute %s (and others) will be removed. %s\n",
> - task_pid_nr(current),
> - current->comm,
> - name,
> - "See zram documentation.");
> -}
> -
> -#define ZRAM_ATTR_RO(name) \
> -static ssize_t name##_show(struct device *d, \
> - struct device_attribute *attr, char *b) \
> -{ \
> - struct zram *zram = dev_to_zram(d); \
> - \
> - deprecated_attr_warn(__stringify(name)); \
> - return scnprintf(b, PAGE_SIZE, "%llu\n", \
> - (u64)atomic64_read(&zram->stats.name)); \
> -} \
> -static DEVICE_ATTR_RO(name);
> -
> static inline bool init_done(struct zram *zram)
> {
> return zram->disksize;
> @@ -218,47 +197,6 @@ static ssize_t disksize_show(struct device *dev,
> return scnprintf(buf, PAGE_SIZE, "%llu\n", zram->disksize);
> }
>
> -static ssize_t orig_data_size_show(struct device *dev,
> - struct device_attribute *attr, char *buf)
> -{
> - struct zram *zram = dev_to_zram(dev);
> -
> - deprecated_attr_warn("orig_data_size");
> - return scnprintf(buf, PAGE_SIZE, "%llu\n",
> - (u64)(atomic64_read(&zram->stats.pages_stored)) << PAGE_SHIFT);
> -}
> -
> -static ssize_t mem_used_total_show(struct device *dev,
> - struct device_attribute *attr, char *buf)
> -{
> - u64 val = 0;
> - struct zram *zram = dev_to_zram(dev);
> -
> - deprecated_attr_warn("mem_used_total");
> - down_read(&zram->init_lock);
> - if (init_done(zram)) {
> - struct zram_meta *meta = zram->meta;
> - val = zs_get_total_pages(meta->mem_pool);
> - }
> - up_read(&zram->init_lock);
> -
> - return scnprintf(buf, PAGE_SIZE, "%llu\n", val << PAGE_SHIFT);
> -}
> -
> -static ssize_t mem_limit_show(struct device *dev,
> - struct device_attribute *attr, char *buf)
> -{
> - u64 val;
> - struct zram *zram = dev_to_zram(dev);
> -
> - deprecated_attr_warn("mem_limit");
> - down_read(&zram->init_lock);
> - val = zram->limit_pages;
> - up_read(&zram->init_lock);
> -
> - return scnprintf(buf, PAGE_SIZE, "%llu\n", val << PAGE_SHIFT);
> -}
> -
> static ssize_t mem_limit_store(struct device *dev,
> struct device_attribute *attr, const char *buf, size_t len)
> {
> @@ -277,21 +215,6 @@ static ssize_t mem_limit_store(struct device *dev,
> return len;
> }
>
> -static ssize_t mem_used_max_show(struct device *dev,
> - struct device_attribute *attr, char *buf)
> -{
> - u64 val = 0;
> - struct zram *zram = dev_to_zram(dev);
> -
> - deprecated_attr_warn("mem_used_max");
> - down_read(&zram->init_lock);
> - if (init_done(zram))
> - val = atomic_long_read(&zram->stats.max_used_pages);
> - up_read(&zram->init_lock);
> -
> - return scnprintf(buf, PAGE_SIZE, "%llu\n", val << PAGE_SHIFT);
> -}
> -
> static ssize_t mem_used_max_store(struct device *dev,
> struct device_attribute *attr, const char *buf, size_t len)
> {
> @@ -467,14 +390,6 @@ static ssize_t debug_stat_show(struct device *dev,
> static DEVICE_ATTR_RO(io_stat);
> static DEVICE_ATTR_RO(mm_stat);
> static DEVICE_ATTR_RO(debug_stat);
> -ZRAM_ATTR_RO(num_reads);
> -ZRAM_ATTR_RO(num_writes);
> -ZRAM_ATTR_RO(failed_reads);
> -ZRAM_ATTR_RO(failed_writes);
> -ZRAM_ATTR_RO(invalid_io);
> -ZRAM_ATTR_RO(notify_free);
> -ZRAM_ATTR_RO(zero_pages);
> -ZRAM_ATTR_RO(compr_data_size);
>
> static inline bool zram_meta_get(struct zram *zram)
> {
> @@ -1188,10 +1103,8 @@ static DEVICE_ATTR_WO(compact);
> static DEVICE_ATTR_RW(disksize);
> static DEVICE_ATTR_RO(initstate);
> static DEVICE_ATTR_WO(reset);
> -static DEVICE_ATTR_RO(orig_data_size);
> -static DEVICE_ATTR_RO(mem_used_total);
> -static DEVICE_ATTR_RW(mem_limit);
> -static DEVICE_ATTR_RW(mem_used_max);
> +static DEVICE_ATTR_WO(mem_limit);
> +static DEVICE_ATTR_WO(mem_used_max);
> static DEVICE_ATTR_RW(max_comp_streams);
> static DEVICE_ATTR_RW(comp_algorithm);
>
> @@ -1199,17 +1112,7 @@ static struct attribute *zram_disk_attrs[] = {
> &dev_attr_disksize.attr,
> &dev_attr_initstate.attr,
> &dev_attr_reset.attr,
> - &dev_attr_num_reads.attr,
> - &dev_attr_num_writes.attr,
> - &dev_attr_failed_reads.attr,
> - &dev_attr_failed_writes.attr,
> &dev_attr_compact.attr,
> - &dev_attr_invalid_io.attr,
> - &dev_attr_notify_free.attr,
> - &dev_attr_zero_pages.attr,
> - &dev_attr_orig_data_size.attr,
> - &dev_attr_compr_data_size.attr,
> - &dev_attr_mem_used_total.attr,
> &dev_attr_mem_limit.attr,
> &dev_attr_mem_used_max.attr,
> &dev_attr_max_comp_streams.attr,
> --
> 2.11.0
>