zram: avoid double free in function zram_bvec_write()

When doing a patial write and the whole page is filled with zero,
zram_bvec_write() will free uncmem twice.

Signed-off-by: Jiang Liu <jiang.liu@huawei.com>
Acked-by: Minchan Kim <minchan@kernel.org>
Cc: stable@vger.kernel.org
zram: avoid access beyond the zram device

Function valid_io_request() should verify the entire request are within
the zram device address range. Otherwise it may cause invalid memory
access when accessing/modifying zram->meta->table[index] because the
'index' is out of range. Then it may access non-exist memory, randomly
modify memory belong to other subsystems, which is hard to track down.

Signed-off-by: Jiang Liu <jiang.liu@huawei.com>
Cc: stable@vger.kernel.org
zram: protect sysfs handler from invalid memory access

Use zram->init_lock to protect access to zram->meta, otherwise it
may cause invalid memory access if zram->meta has been freed by
zram_reset_device().

This issue may be triggered by:
Thread 1:
while true; do cat mem_used_total; done
Thread 2:
while true; do echo 8M > disksize; echo 1 > reset; done

Signed-off-by: Jiang Liu <jiang.liu@huawei.com>
Acked-by: Minchan Kim <minchan@kernel.org>
Cc: stable@vger.kernel.org
Acked-by: Jerome Marchand <jmarchan@redhat.com>
zram: simplify and optimize dev_to_zram()

Simplify and optimize dev_to_zram() without walking the zram_devices
array.

Signed-off-by: Jiang Liu <jiang.liu@huawei.com>
zram: kill unused zram_get_num_devices()

Now there's no caller of zram_get_num_devices(), so kill it.
And change zram_devices to static because it's only used in zram_drv.c.

Signed-off-by: Jiang Liu <jiang.liu@huawei.com>
zram: optimize memory operations with clear_page()/copy_page()

Some architectures provides architecture-specific, optimized version of
clear_page()/copy_page(), which may have better performance than
memset()/memcpy(). So use clear_page()/copy_page() to optimize zram
performance if possible.

Signed-off-by: Jiang Liu <jiang.liu@huawei.com>
journal.c: Fix uninitialized warning
xc5000.c: Fix uninitialized warnings
af_unix.c: Fix uninitialized warning
xdr.c: Fix uninitialized warnings
wlan_hdd_ftm.c: Fix array subscript is above array bounds warning
csrUtil.c: Fix 'phyModeInBssDesc' uninitialized warning
csrApiScan.c: Fix 'Num2GChannels' uninitialized warning
csrApiRoam.c: Fix uninitialized warnings
wlan_qct_tl.c: Fix 'usEtherType' uninitialized warning
csrApiRoam.c: Fix array subscript is above array bounds warning
wlan_qct_wda.c: Fix uninitialized warnings
cgroup.c: Fix 'it.task' uninitialized warning
adreno.c: Do not use highest optimization level
l2cap_core.c: Do not -fipa-cp-clone