Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b87d3167 authored by Srinivasarao P's avatar Srinivasarao P
Browse files

Merge android-4.4.153 (5e24b4e4) into msm-4.4



* refs/heads/tmp-5e24b4e4
  Linux 4.4.153
  ovl: warn instead of error if d_type is not supported
  ovl: Do d_type check only if work dir creation was successful
  ovl: Ensure upper filesystem supports d_type
  x86/mm: Fix use-after-free of ldt_struct
  x86/mm/pat: Fix L1TF stable backport for CPA
  ANDROID: x86_64_cuttlefish_defconfig: Enable lz4 compression for zram
  UPSTREAM: drivers/block/zram/zram_drv.c: fix bug storing backing_dev
  BACKPORT: zram: introduce zram memory tracking
  BACKPORT: zram: record accessed second
  BACKPORT: zram: mark incompressible page as ZRAM_HUGE
  UPSTREAM: zram: correct flag name of ZRAM_ACCESS
  UPSTREAM: zram: Delete gendisk before cleaning up the request queue
  UPSTREAM: drivers/block/zram/zram_drv.c: make zram_page_end_io() static
  BACKPORT: zram: set BDI_CAP_STABLE_WRITES once
  UPSTREAM: zram: fix null dereference of handle
  UPSTREAM: zram: add config and doc file for writeback feature
  BACKPORT: zram: read page from backing device
  BACKPORT: zram: write incompressible pages to backing device
  BACKPORT: zram: identify asynchronous IO's return value
  BACKPORT: zram: add free space management in backing device
  UPSTREAM: zram: add interface to specif backing device
  UPSTREAM: zram: rename zram_decompress_page to __zram_bvec_read
  UPSTREAM: zram: inline zram_compress
  UPSTREAM: zram: clean up duplicated codes in __zram_bvec_write
  Linux 4.4.152
  reiserfs: fix broken xattr handling (heap corruption, bad retval)
  i2c: imx: Fix race condition in dma read
  PCI: pciehp: Fix use-after-free on unplug
  PCI: Skip MPS logic for Virtual Functions (VFs)
  PCI: hotplug: Don't leak pci_slot on registration failure
  parisc: Remove unnecessary barriers from spinlock.h
  bridge: Propagate vlan add failure to user
  packet: refine ring v3 block size test to hold one frame
  netfilter: conntrack: dccp: treat SYNC/SYNCACK as invalid if no prior state
  xfrm_user: prevent leaking 2 bytes of kernel memory
  parisc: Remove ordered stores from syscall.S
  ext4: fix spectre gadget in ext4_mb_regular_allocator()
  KVM: irqfd: fix race between EPOLLHUP and irq_bypass_register_consumer
  staging: android: ion: check for kref overflow
  tcp: identify cryptic messages as TCP seq # bugs
  net: qca_spi: Fix log level if probe fails
  net: qca_spi: Make sure the QCA7000 reset is triggered
  net: qca_spi: Avoid packet drop during initial sync
  net: usb: rtl8150: demote allmulti message to dev_dbg()
  net/ethernet/freescale/fman: fix cross-build error
  drm/nouveau/gem: off by one bugs in nouveau_gem_pushbuf_reloc_apply()
  tcp: remove DELAYED ACK events in DCTCP
  qlogic: check kstrtoul() for errors
  packet: reset network header if packet shorter than ll reserved space
  ixgbe: Be more careful when modifying MAC filters
  ARM: dts: am3517.dtsi: Disable reference to OMAP3 OTG controller
  ARM: 8780/1: ftrace: Only set kernel memory back to read-only after boot
  perf llvm-utils: Remove bashism from kernel include fetch script
  bnxt_en: Fix for system hang if request_irq fails
  drm/armada: fix colorkey mode property
  ieee802154: fakelb: switch from BUG_ON() to WARN_ON() on problem
  ieee802154: at86rf230: use __func__ macro for debug messages
  ieee802154: at86rf230: switch from BUG_ON() to WARN_ON() on problem
  ARM: pxa: irq: fix handling of ICMR registers in suspend/resume
  netfilter: x_tables: set module owner for icmp(6) matches
  smsc75xx: Add workaround for gigabit link up hardware errata.
  kasan: fix shadow_size calculation error in kasan_module_alloc
  tracing: Use __printf markup to silence compiler
  ARM: imx_v4_v5_defconfig: Select ULPI support
  ARM: imx_v6_v7_defconfig: Select ULPI support
  HID: wacom: Correct touch maximum XY of 2nd-gen Intuos
  m68k: fix "bad page state" oops on ColdFire boot
  bnx2x: Fix receiving tx-timeout in error or recovery state.
  drm/exynos: decon5433: Fix WINCONx reset value
  drm/exynos: decon5433: Fix per-plane global alpha for XRGB modes
  drm/exynos: gsc: Fix support for NV16/61, YUV420/YVU420 and YUV422 modes
  md/raid10: fix that replacement cannot complete recovery after reassemble
  dmaengine: k3dma: Off by one in k3_of_dma_simple_xlate()
  ARM: dts: da850: Fix interrups property for gpio
  selftests/x86/sigreturn/64: Fix spurious failures on AMD CPUs
  perf report powerpc: Fix crash if callchain is empty
  perf test session topology: Fix test on s390
  usb: xhci: increase CRS timeout value
  ARM: dts: am437x: make edt-ft5x06 a wakeup source
  brcmfmac: stop watchdog before detach and free everything
  cxgb4: when disabling dcb set txq dcb priority to 0
  Smack: Mark inode instant in smack_task_to_inode
  ipv6: mcast: fix unsolicited report interval after receiving querys
  locking/lockdep: Do not record IRQ state within lockdep code
  net: davinci_emac: match the mdio device against its compatible if possible
  ARC: Enable machine_desc->init_per_cpu for !CONFIG_SMP
  net: propagate dev_get_valid_name return code
  net: hamradio: use eth_broadcast_addr
  enic: initialize enic->rfs_h.lock in enic_probe
  qed: Add sanity check for SIMD fastpath handler.
  arm64: make secondary_start_kernel() notrace
  scsi: xen-scsifront: add error handling for xenbus_printf
  usb: gadget: dwc2: fix memory leak in gadget_init()
  usb: gadget: composite: fix delayed_status race condition when set_interface
  usb: dwc2: fix isoc split in transfer with no data
  ARM: dts: Cygnus: Fix I2C controller interrupt type
  selftests: sync: add config fragment for testing sync framework
  selftests: zram: return Kselftest Skip code for skipped tests
  selftests: user: return Kselftest Skip code for skipped tests
  selftests: static_keys: return Kselftest Skip code for skipped tests
  selftests: pstore: return Kselftest Skip code for skipped tests
  netfilter: ipv6: nf_defrag: reduce struct net memory waste
  ARC: Explicitly add -mmedium-calls to CFLAGS
  ANDROID: x86_64_cuttlefish_defconfig: Enable zram and zstd
  BACKPORT: crypto: zstd - Add zstd support
  UPSTREAM: zram: add zstd to the supported algorithms list
  UPSTREAM: lib: Add zstd modules
  UPSTREAM: lib: Add xxhash module
  UPSTREAM: zram: rework copy of compressor name in comp_algorithm_store()
  UPSTREAM: zram: constify attribute_group structures.
  UPSTREAM: zram: count same page write as page_stored
  UPSTREAM: zram: reduce load operation in page_same_filled
  UPSTREAM: zram: use zram_free_page instead of open-coded
  UPSTREAM: zram: introduce zram data accessor
  UPSTREAM: zram: remove zram_meta structure
  UPSTREAM: zram: use zram_slot_lock instead of raw bit_spin_lock op
  BACKPORT: zram: partial IO refactoring
  BACKPORT: zram: handle multiple pages attached bio's bvec
  UPSTREAM: zram: fix operator precedence to get offset
  BACKPORT: zram: extend zero pages to same element pages
  BACKPORT: zram: remove waitqueue for IO done
  UPSTREAM: zram: remove obsolete sysfs attrs
  UPSTREAM: zram: support BDI_CAP_STABLE_WRITES
  UPSTREAM: zram: revalidate disk under init_lock
  BACKPORT: mm: support anonymous stable page
  UPSTREAM: zram: use __GFP_MOVABLE for memory allocation
  UPSTREAM: zram: drop gfp_t from zcomp_strm_alloc()
  UPSTREAM: zram: add more compression algorithms
  UPSTREAM: zram: delete custom lzo/lz4
  UPSTREAM: zram: cosmetic: cleanup documentation
  UPSTREAM: zram: use crypto api to check alg availability
  BACKPORT: zram: switch to crypto compress API
  UPSTREAM: zram: rename zstrm find-release functions
  UPSTREAM: zram: introduce per-device debug_stat sysfs node
  UPSTREAM: zram: remove max_comp_streams internals
  UPSTREAM: zram: user per-cpu compression streams
  BACKPORT: zsmalloc: require GFP in zs_malloc()
  UPSTREAM: zram/zcomp: do not zero out zcomp private pages
  UPSTREAM: zram: pass gfp from zcomp frontend to backend
  UPSTREAM: socket: close race condition between sock_close() and sockfs_setattr()
  ANDROID: Refresh x86_64_cuttlefish_defconfig
  Linux 4.4.151
  isdn: Disable IIOCDBGVAR
  Bluetooth: avoid killing an already killed socket
  x86/mm: Simplify p[g4um]d_page() macros
  serial: 8250_dw: always set baud rate in dw8250_set_termios
  ACPI / PM: save NVS memory for ASUS 1025C laptop
  ACPI: save NVS memory for Lenovo G50-45
  USB: option: add support for DW5821e
  USB: serial: sierra: fix potential deadlock at close
  ALSA: vxpocket: Fix invalid endian conversions
  ALSA: memalloc: Don't exceed over the requested size
  ALSA: hda: Correct Asrock B85M-ITX power_save blacklist entry
  ALSA: cs5535audio: Fix invalid endian conversion
  ALSA: virmidi: Fix too long output trigger loop
  ALSA: vx222: Fix invalid endian conversions
  ALSA: hda - Turn CX8200 into D3 as well upon reboot
  ALSA: hda - Sleep for 10ms after entering D3 on Conexant codecs
  net_sched: fix NULL pointer dereference when delete tcindex filter
  vsock: split dwork to avoid reinitializations
  net_sched: Fix missing res info when create new tc_index filter
  llc: use refcount_inc_not_zero() for llc_sap_find()
  l2tp: use sk_dst_check() to avoid race on sk->sk_dst_cache
  dccp: fix undefined behavior with 'cwnd' shift in ccid2_cwnd_restart()

Conflicts:
	drivers/block/zram/zram_drv.c
	drivers/staging/android/ion/ion.c
	include/linux/swap.h
	mm/zsmalloc.c

Change-Id: I1c437ac5133503a939d06d51ec778b65371df6d1
Signed-off-by: default avatarSrinivasarao P <spathi@codeaurora.org>
parents 40eed1f5 5e24b4e4
Loading
Loading
Loading
Loading
+0 −119
Original line number Diff line number Diff line
What:		/sys/block/zram<id>/num_reads
Date:		August 2015
Contact:	Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
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@gmail.com>
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@gmail.com>
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@gmail.com>
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@gmail.com>
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@gmail.com>
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@gmail.com>
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@gmail.com>
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@gmail.com>
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@gmail.com>
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@gmail.com>
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@gmail.com>
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.
+25 −93
Original line number Diff line number Diff line
@@ -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@vflare.org>
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@vflare.org>
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@vflare.org>
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@gmail.com>
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@gmail.com>
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@gmail.com>
@@ -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@vflare.org>
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@vflare.org>
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@vflare.org>
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@vflare.org>
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@vflare.org>
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@kernel.org>
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@kernel.org>
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
@@ -166,3 +81,20 @@ Description:
		The mm_stat file is read-only and represents device's mm
		statistics (orig_data_size, compr_data_size, etc.) in a format
		similar to block layer statistics file format.

What:		/sys/block/zram<id>/debug_stat
Date:		July 2016
Contact:	Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Description:
		The debug_stat file is read-only and represents various
		device's debugging info useful for kernel developers. Its
		format is not documented intentionally and may change
		anytime without any notice.

What:		/sys/block/zram<id>/backing_dev
Date:		June 2017
Contact:	Minchan Kim <minchan@kernel.org>
Description:
		The backing_dev file is read-write and set up backing
		device for zram to write incompressible pages.
		For using, user should enable CONFIG_ZRAM_WRITEBACK.
+113 −87
Original line number Diff line number Diff line
@@ -59,27 +59,16 @@ num_devices parameter is optional and tells zram how many devices should be
pre-created. Default: 1.

2) Set max number of compression streams
	Compression backend may use up to max_comp_streams compression streams,
	thus allowing up to max_comp_streams concurrent compression operations.
	By default, compression backend uses single compression stream.

	Examples:
	#show max compression streams number
Regardless the value passed to this attribute, ZRAM will always
allocate multiple compression streams - one per online CPUs - thus
allowing several concurrent compression operations. The number of
allocated compression streams goes down when some of the CPUs
become offline. There is no single-compression-stream mode anymore,
unless you are running a UP system or has only 1 CPU online.

To find out how many streams are currently available:
	cat /sys/block/zram0/max_comp_streams

	#set max compression streams number to 3
	echo 3 > /sys/block/zram0/max_comp_streams

Note:
In order to enable compression backend's multi stream support max_comp_streams
must be initially set to desired concurrency level before ZRAM device
initialisation. Once the device initialised as a single stream compression
backend (max_comp_streams equals to 1), you will see error if you try to change
the value of max_comp_streams because single stream compression backend
implemented as a special case by lock overhead issue and does not support
dynamic max_comp_streams. Only multi stream backend supports dynamic
max_comp_streams adjustment.

3) Select compression algorithm
Using comp_algorithm device attribute one can see available and
currently selected (shown in square brackets) compression algorithms,
@@ -94,6 +83,16 @@ max_comp_streams adjustment.
	#select lzo compression algorithm
	echo lzo > /sys/block/zram0/comp_algorithm

For the time being, the `comp_algorithm' content does not necessarily
show every compression algorithm supported by the kernel. We keep this
list primarily to simplify device configuration and one can configure
a new device with a compression algorithm that is not listed in
`comp_algorithm'. The thing is that, internally, ZRAM uses Crypto API
and, if some of the algorithms were built as modules, it's impossible
to list all of them using, for instance, /proc/crypto or any other
method. This, however, has an advantage of permitting the usage of
custom crypto compression modules (implementing S/W or H/W compression).

4) Set Disksize
Set disk size by writing the value to sysfs node 'disksize'.
The value can be either in bytes or you can use mem suffixes.
@@ -162,41 +161,15 @@ 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
backing_dev	  RW	set up backend storage for zram to write out

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 +184,41 @@ 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 same-element-filled pages (same_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
 same_pages       the number of same element filled pages written to this disk.
                  No memory is allocated for such pages.
 pages_compacted  the number of pages freed during compaction
 huge_pages	  the number of incompressible pages

9) Deactivate:
	swapoff /dev/zram0
@@ -241,5 +233,39 @@ line of text and contains the following stats separated by whitespace:
	resets the disksize to zero. You must set the disksize again
	before reusing the device.

* Optional Feature

= writeback

With incompressible pages, there is no memory saving with zram.
Instead, with CONFIG_ZRAM_WRITEBACK, zram can write incompressible page
to backing storage rather than keeping it in memory.
User should set up backing device via /sys/block/zramX/backing_dev
before disksize setting.

= memory tracking

With CONFIG_ZRAM_MEMORY_TRACKING, user can know information of the
zram block. It could be useful to catch cold or incompressible
pages of the process with*pagemap.
If you enable the feature, you could see block state via
/sys/kernel/debug/zram/zram0/block_state". The output is as follows,

	  300    75.033841 .wh
	  301    63.806904 s..
	  302    63.806919 ..h

First column is zram's block index.
Second column is access time since the system was booted
Third column is state of the block.
(s: same page
w: written page to backing store
h: huge page)

First line of above example says 300th block is accessed at 75.033841sec
and the block's state is huge so it is written back to the backing
storage. It's a debugging feature so anyone shouldn't rely on it to work
properly.

Nitin Gupta
ngupta@vflare.org
+1 −1
Original line number Diff line number Diff line
VERSION = 4
PATCHLEVEL = 4
SUBLEVEL = 150
SUBLEVEL = 153
EXTRAVERSION =
NAME = Blurry Fish Butt

+1 −14
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@ endif

KBUILD_DEFCONFIG := nsim_700_defconfig

cflags-y	+= -fno-common -pipe -fno-builtin -D__linux__
cflags-y	+= -fno-common -pipe -fno-builtin -mmedium-calls -D__linux__
cflags-$(CONFIG_ISA_ARCOMPACT)	+= -mA7
cflags-$(CONFIG_ISA_ARCV2)	+= -mcpu=archs

@@ -137,16 +137,3 @@ dtbs: scripts

archclean:
	$(Q)$(MAKE) $(clean)=$(boot)

# Hacks to enable final link due to absence of link-time branch relexation
# and gcc choosing optimal(shorter) branches at -O3
#
# vineetg Feb 2010: -mlong-calls switched off for overall kernel build
# However lib/decompress_inflate.o (.init.text) calls
# zlib_inflate_workspacesize (.text) causing relocation errors.
# Thus forcing all exten calls in this file to be long calls
export CFLAGS_decompress_inflate.o = -mmedium-calls
export CFLAGS_initramfs.o = -mmedium-calls
ifdef CONFIG_SMP
export CFLAGS_core.o = -mmedium-calls
endif
Loading