From: Andrew Morton <akpm@linux-foundation.org>
To: adrien+dev@schischi.me, akpm@linux-foundation.org,
bernd.amend@gmail.com, drosen@google.com, groeck@chromium.org,
hch@lst.de, mm-commits@vger.kernel.org, phillip@squashfs.org.uk,
pliard@google.com
Subject: + revert-squashfs-migrate-from-ll_rw_block-usage-to-bio.patch added to -mm tree
Date: Thu, 16 Jul 2020 18:53:24 -0700 [thread overview]
Message-ID: <20200717015324.dNxVKbBWs%akpm@linux-foundation.org> (raw)
In-Reply-To: <20200703151445.b6a0cfee402c7c5c4651f1b1@linux-foundation.org>
The patch titled
Subject: revert "squashfs: migrate from ll_rw_block usage to BIO"
has been added to the -mm tree. Its filename is
revert-squashfs-migrate-from-ll_rw_block-usage-to-bio.patch
This patch should soon appear at
http://ozlabs.org/~akpm/mmots/broken-out/revert-squashfs-migrate-from-ll_rw_block-usage-to-bio.patch
and later at
http://ozlabs.org/~akpm/mmotm/broken-out/revert-squashfs-migrate-from-ll_rw_block-usage-to-bio.patch
Before you just go and hit "reply", please:
a) Consider who else should be cc'ed
b) Prefer to cc a suitable mailing list as well
c) Ideally: find the original patch on the mailing list and do a
reply-to-all to that, adding suitable additional cc's
*** Remember to use Documentation/process/submit-checklist.rst when testing your code ***
The -mm tree is included into linux-next and is updated
there every 3-4 working days
------------------------------------------------------
From: Andrew Morton <akpm@linux-foundation.org>
Subject: revert "squashfs: migrate from ll_rw_block usage to BIO"
Revert 93e72b3c612adc ("squashfs: migrate from ll_rw_block usage to BIO")
due to a regression reported by Bernd Amend.
Link: http://lkml.kernel.org/r/CAF31+H5ZB7zn73obrc5svLzgfsTnyYe5TKvr7-6atUOqrRY+2w@mail.gmail.com
Reported-by: Bernd Amend <bernd.amend@gmail.com>
Cc: Philippe Liard <pliard@google.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Adrien Schildknecht <adrien+dev@schischi.me>
Cc: Phillip Lougher <phillip@squashfs.org.uk>
Cc: Guenter Roeck <groeck@chromium.org>
Cc: Daniel Rosenberg <drosen@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
---
fs/squashfs/block.c | 273 ++++++++++------------
fs/squashfs/decompressor.h | 5
fs/squashfs/decompressor_multi.c | 9
fs/squashfs/decompressor_multi_percpu.c | 6
fs/squashfs/decompressor_single.c | 9
fs/squashfs/lz4_wrapper.c | 17 -
fs/squashfs/lzo_wrapper.c | 17 -
fs/squashfs/squashfs.h | 4
fs/squashfs/xz_wrapper.c | 51 +---
fs/squashfs/zlib_wrapper.c | 63 ++---
fs/squashfs/zstd_wrapper.c | 62 ++--
11 files changed, 237 insertions(+), 279 deletions(-)
--- a/fs/squashfs/block.c~revert-squashfs-migrate-from-ll_rw_block-usage-to-bio
+++ a/fs/squashfs/block.c
@@ -13,7 +13,6 @@
* datablocks and metadata blocks.
*/
-#include <linux/blkdev.h>
#include <linux/fs.h>
#include <linux/vfs.h>
#include <linux/slab.h>
@@ -28,104 +27,45 @@
#include "page_actor.h"
/*
- * Returns the amount of bytes copied to the page actor.
+ * Read the metadata block length, this is stored in the first two
+ * bytes of the metadata block.
*/
-static int copy_bio_to_actor(struct bio *bio,
- struct squashfs_page_actor *actor,
- int offset, int req_length)
-{
- void *actor_addr = squashfs_first_page(actor);
- struct bvec_iter_all iter_all = {};
- struct bio_vec *bvec = bvec_init_iter_all(&iter_all);
- int copied_bytes = 0;
- int actor_offset = 0;
-
- if (WARN_ON_ONCE(!bio_next_segment(bio, &iter_all)))
- return 0;
-
- while (copied_bytes < req_length) {
- int bytes_to_copy = min_t(int, bvec->bv_len - offset,
- PAGE_SIZE - actor_offset);
-
- bytes_to_copy = min_t(int, bytes_to_copy,
- req_length - copied_bytes);
- memcpy(actor_addr + actor_offset,
- page_address(bvec->bv_page) + bvec->bv_offset + offset,
- bytes_to_copy);
-
- actor_offset += bytes_to_copy;
- copied_bytes += bytes_to_copy;
- offset += bytes_to_copy;
-
- if (actor_offset >= PAGE_SIZE) {
- actor_addr = squashfs_next_page(actor);
- if (!actor_addr)
- break;
- actor_offset = 0;
- }
- if (offset >= bvec->bv_len) {
- if (!bio_next_segment(bio, &iter_all))
- break;
- offset = 0;
- }
- }
- squashfs_finish_page(actor);
- return copied_bytes;
-}
-
-static int squashfs_bio_read(struct super_block *sb, u64 index, int length,
- struct bio **biop, int *block_offset)
+static struct buffer_head *get_block_length(struct super_block *sb,
+ u64 *cur_index, int *offset, int *length)
{
struct squashfs_sb_info *msblk = sb->s_fs_info;
- const u64 read_start = round_down(index, msblk->devblksize);
- const sector_t block = read_start >> msblk->devblksize_log2;
- const u64 read_end = round_up(index + length, msblk->devblksize);
- const sector_t block_end = read_end >> msblk->devblksize_log2;
- int offset = read_start - round_down(index, PAGE_SIZE);
- int total_len = (block_end - block) << msblk->devblksize_log2;
- const int page_count = DIV_ROUND_UP(total_len + offset, PAGE_SIZE);
- int error, i;
- struct bio *bio;
-
- bio = bio_alloc(GFP_NOIO, page_count);
- if (!bio)
- return -ENOMEM;
+ struct buffer_head *bh;
- bio_set_dev(bio, sb->s_bdev);
- bio->bi_opf = READ;
- bio->bi_iter.bi_sector = block * (msblk->devblksize >> SECTOR_SHIFT);
-
- for (i = 0; i < page_count; ++i) {
- unsigned int len =
- min_t(unsigned int, PAGE_SIZE - offset, total_len);
- struct page *page = alloc_page(GFP_NOIO);
-
- if (!page) {
- error = -ENOMEM;
- goto out_free_bio;
- }
- if (!bio_add_page(bio, page, len, offset)) {
- error = -EIO;
- goto out_free_bio;
+ bh = sb_bread(sb, *cur_index);
+ if (bh == NULL)
+ return NULL;
+
+ if (msblk->devblksize - *offset == 1) {
+ *length = (unsigned char) bh->b_data[*offset];
+ put_bh(bh);
+ bh = sb_bread(sb, ++(*cur_index));
+ if (bh == NULL)
+ return NULL;
+ *length |= (unsigned char) bh->b_data[0] << 8;
+ *offset = 1;
+ } else {
+ *length = (unsigned char) bh->b_data[*offset] |
+ (unsigned char) bh->b_data[*offset + 1] << 8;
+ *offset += 2;
+
+ if (*offset == msblk->devblksize) {
+ put_bh(bh);
+ bh = sb_bread(sb, ++(*cur_index));
+ if (bh == NULL)
+ return NULL;
+ *offset = 0;
}
- offset = 0;
- total_len -= len;
}
- error = submit_bio_wait(bio);
- if (error)
- goto out_free_bio;
-
- *biop = bio;
- *block_offset = index & ((1 << msblk->devblksize_log2) - 1);
- return 0;
-
-out_free_bio:
- bio_free_pages(bio);
- bio_put(bio);
- return error;
+ return bh;
}
+
/*
* Read and decompress a metadata block or datablock. Length is non-zero
* if a datablock is being read (the size is stored elsewhere in the
@@ -136,88 +76,129 @@ out_free_bio:
* algorithms).
*/
int squashfs_read_data(struct super_block *sb, u64 index, int length,
- u64 *next_index, struct squashfs_page_actor *output)
+ u64 *next_index, struct squashfs_page_actor *output)
{
struct squashfs_sb_info *msblk = sb->s_fs_info;
- struct bio *bio = NULL;
- int compressed;
- int res;
- int offset;
+ struct buffer_head **bh;
+ int offset = index & ((1 << msblk->devblksize_log2) - 1);
+ u64 cur_index = index >> msblk->devblksize_log2;
+ int bytes, compressed, b = 0, k = 0, avail, i;
+
+ bh = kcalloc(((output->length + msblk->devblksize - 1)
+ >> msblk->devblksize_log2) + 1, sizeof(*bh), GFP_KERNEL);
+ if (bh == NULL)
+ return -ENOMEM;
if (length) {
/*
* Datablock.
*/
+ bytes = -offset;
compressed = SQUASHFS_COMPRESSED_BLOCK(length);
length = SQUASHFS_COMPRESSED_SIZE_BLOCK(length);
+ if (next_index)
+ *next_index = index + length;
+
TRACE("Block @ 0x%llx, %scompressed size %d, src size %d\n",
index, compressed ? "" : "un", length, output->length);
+
+ if (length < 0 || length > output->length ||
+ (index + length) > msblk->bytes_used)
+ goto read_failure;
+
+ for (b = 0; bytes < length; b++, cur_index++) {
+ bh[b] = sb_getblk(sb, cur_index);
+ if (bh[b] == NULL)
+ goto block_release;
+ bytes += msblk->devblksize;
+ }
+ ll_rw_block(REQ_OP_READ, 0, b, bh);
} else {
/*
* Metadata block.
*/
- const u8 *data;
- struct bvec_iter_all iter_all = {};
- struct bio_vec *bvec = bvec_init_iter_all(&iter_all);
-
- if (index + 2 > msblk->bytes_used) {
- res = -EIO;
- goto out;
- }
- res = squashfs_bio_read(sb, index, 2, &bio, &offset);
- if (res)
- goto out;
-
- if (WARN_ON_ONCE(!bio_next_segment(bio, &iter_all))) {
- res = -EIO;
- goto out_free_bio;
- }
- /* Extract the length of the metadata block */
- data = page_address(bvec->bv_page) + bvec->bv_offset;
- length = data[offset];
- if (offset <= bvec->bv_len - 1) {
- length |= data[offset + 1] << 8;
- } else {
- if (WARN_ON_ONCE(!bio_next_segment(bio, &iter_all))) {
- res = -EIO;
- goto out_free_bio;
- }
- data = page_address(bvec->bv_page) + bvec->bv_offset;
- length |= data[0] << 8;
- }
- bio_free_pages(bio);
- bio_put(bio);
+ if ((index + 2) > msblk->bytes_used)
+ goto read_failure;
+ bh[0] = get_block_length(sb, &cur_index, &offset, &length);
+ if (bh[0] == NULL)
+ goto read_failure;
+ b = 1;
+
+ bytes = msblk->devblksize - offset;
compressed = SQUASHFS_COMPRESSED(length);
length = SQUASHFS_COMPRESSED_SIZE(length);
- index += 2;
+ if (next_index)
+ *next_index = index + length + 2;
TRACE("Block @ 0x%llx, %scompressed size %d\n", index,
- compressed ? "" : "un", length);
+ compressed ? "" : "un", length);
+
+ if (length < 0 || length > output->length ||
+ (index + length) > msblk->bytes_used)
+ goto block_release;
+
+ for (; bytes < length; b++) {
+ bh[b] = sb_getblk(sb, ++cur_index);
+ if (bh[b] == NULL)
+ goto block_release;
+ bytes += msblk->devblksize;
+ }
+ ll_rw_block(REQ_OP_READ, 0, b - 1, bh + 1);
}
- if (next_index)
- *next_index = index + length;
- res = squashfs_bio_read(sb, index, length, &bio, &offset);
- if (res)
- goto out;
+ for (i = 0; i < b; i++) {
+ wait_on_buffer(bh[i]);
+ if (!buffer_uptodate(bh[i]))
+ goto block_release;
+ }
if (compressed) {
- if (!msblk->stream) {
- res = -EIO;
- goto out_free_bio;
- }
- res = squashfs_decompress(msblk, bio, offset, length, output);
+ if (!msblk->stream)
+ goto read_failure;
+ length = squashfs_decompress(msblk, bh, b, offset, length,
+ output);
+ if (length < 0)
+ goto read_failure;
} else {
- res = copy_bio_to_actor(bio, output, offset, length);
+ /*
+ * Block is uncompressed.
+ */
+ int in, pg_offset = 0;
+ void *data = squashfs_first_page(output);
+
+ for (bytes = length; k < b; k++) {
+ in = min(bytes, msblk->devblksize - offset);
+ bytes -= in;
+ while (in) {
+ if (pg_offset == PAGE_SIZE) {
+ data = squashfs_next_page(output);
+ pg_offset = 0;
+ }
+ avail = min_t(int, in, PAGE_SIZE -
+ pg_offset);
+ memcpy(data + pg_offset, bh[k]->b_data + offset,
+ avail);
+ in -= avail;
+ pg_offset += avail;
+ offset += avail;
+ }
+ offset = 0;
+ put_bh(bh[k]);
+ }
+ squashfs_finish_page(output);
}
-out_free_bio:
- bio_free_pages(bio);
- bio_put(bio);
-out:
- if (res < 0)
- ERROR("Failed to read block 0x%llx: %d\n", index, res);
+ kfree(bh);
+ return length;
- return res;
+block_release:
+ for (; k < b; k++)
+ put_bh(bh[k]);
+
+read_failure:
+ ERROR("squashfs_read_data failed to read block 0x%llx\n",
+ (unsigned long long) index);
+ kfree(bh);
+ return -EIO;
}
--- a/fs/squashfs/decompressor.h~revert-squashfs-migrate-from-ll_rw_block-usage-to-bio
+++ a/fs/squashfs/decompressor.h
@@ -10,14 +10,13 @@
* decompressor.h
*/
-#include <linux/bio.h>
-
struct squashfs_decompressor {
void *(*init)(struct squashfs_sb_info *, void *);
void *(*comp_opts)(struct squashfs_sb_info *, void *, int);
void (*free)(void *);
int (*decompress)(struct squashfs_sb_info *, void *,
- struct bio *, int, int, struct squashfs_page_actor *);
+ struct buffer_head **, int, int, int,
+ struct squashfs_page_actor *);
int id;
char *name;
int supported;
--- a/fs/squashfs/decompressor_multi.c~revert-squashfs-migrate-from-ll_rw_block-usage-to-bio
+++ a/fs/squashfs/decompressor_multi.c
@@ -6,7 +6,7 @@
#include <linux/types.h>
#include <linux/mutex.h>
#include <linux/slab.h>
-#include <linux/bio.h>
+#include <linux/buffer_head.h>
#include <linux/sched.h>
#include <linux/wait.h>
#include <linux/cpumask.h>
@@ -180,15 +180,14 @@ wait:
}
-int squashfs_decompress(struct squashfs_sb_info *msblk, struct bio *bio,
- int offset, int length,
- struct squashfs_page_actor *output)
+int squashfs_decompress(struct squashfs_sb_info *msblk, struct buffer_head **bh,
+ int b, int offset, int length, struct squashfs_page_actor *output)
{
int res;
struct squashfs_stream *stream = msblk->stream;
struct decomp_stream *decomp_stream = get_decomp_stream(msblk, stream);
res = msblk->decompressor->decompress(msblk, decomp_stream->stream,
- bio, offset, length, output);
+ bh, b, offset, length, output);
put_decomp_stream(decomp_stream, stream);
if (res < 0)
ERROR("%s decompression failed, data probably corrupt\n",
--- a/fs/squashfs/decompressor_multi_percpu.c~revert-squashfs-migrate-from-ll_rw_block-usage-to-bio
+++ a/fs/squashfs/decompressor_multi_percpu.c
@@ -75,8 +75,8 @@ void squashfs_decompressor_destroy(struc
}
}
-int squashfs_decompress(struct squashfs_sb_info *msblk, struct bio *bio,
- int offset, int length, struct squashfs_page_actor *output)
+int squashfs_decompress(struct squashfs_sb_info *msblk, struct buffer_head **bh,
+ int b, int offset, int length, struct squashfs_page_actor *output)
{
struct squashfs_stream *stream;
int res;
@@ -84,7 +84,7 @@ int squashfs_decompress(struct squashfs_
local_lock(&msblk->stream->lock);
stream = this_cpu_ptr(msblk->stream);
- res = msblk->decompressor->decompress(msblk, stream->stream, bio,
+ res = msblk->decompressor->decompress(msblk, stream->stream, bh, b,
offset, length, output);
local_unlock(&msblk->stream->lock);
--- a/fs/squashfs/decompressor_single.c~revert-squashfs-migrate-from-ll_rw_block-usage-to-bio
+++ a/fs/squashfs/decompressor_single.c
@@ -7,7 +7,7 @@
#include <linux/types.h>
#include <linux/mutex.h>
#include <linux/slab.h>
-#include <linux/bio.h>
+#include <linux/buffer_head.h>
#include "squashfs_fs.h"
#include "squashfs_fs_sb.h"
@@ -59,15 +59,14 @@ void squashfs_decompressor_destroy(struc
}
}
-int squashfs_decompress(struct squashfs_sb_info *msblk, struct bio *bio,
- int offset, int length,
- struct squashfs_page_actor *output)
+int squashfs_decompress(struct squashfs_sb_info *msblk, struct buffer_head **bh,
+ int b, int offset, int length, struct squashfs_page_actor *output)
{
int res;
struct squashfs_stream *stream = msblk->stream;
mutex_lock(&stream->mutex);
- res = msblk->decompressor->decompress(msblk, stream->stream, bio,
+ res = msblk->decompressor->decompress(msblk, stream->stream, bh, b,
offset, length, output);
mutex_unlock(&stream->mutex);
--- a/fs/squashfs/lz4_wrapper.c~revert-squashfs-migrate-from-ll_rw_block-usage-to-bio
+++ a/fs/squashfs/lz4_wrapper.c
@@ -4,7 +4,7 @@
* Phillip Lougher <phillip@squashfs.org.uk>
*/
-#include <linux/bio.h>
+#include <linux/buffer_head.h>
#include <linux/mutex.h>
#include <linux/slab.h>
#include <linux/vmalloc.h>
@@ -89,23 +89,20 @@ static void lz4_free(void *strm)
static int lz4_uncompress(struct squashfs_sb_info *msblk, void *strm,
- struct bio *bio, int offset, int length,
+ struct buffer_head **bh, int b, int offset, int length,
struct squashfs_page_actor *output)
{
- struct bvec_iter_all iter_all = {};
- struct bio_vec *bvec = bvec_init_iter_all(&iter_all);
struct squashfs_lz4 *stream = strm;
void *buff = stream->input, *data;
- int bytes = length, res;
+ int avail, i, bytes = length, res;
- while (bio_next_segment(bio, &iter_all)) {
- int avail = min(bytes, ((int)bvec->bv_len) - offset);
-
- data = page_address(bvec->bv_page) + bvec->bv_offset;
- memcpy(buff, data + offset, avail);
+ for (i = 0; i < b; i++) {
+ avail = min(bytes, msblk->devblksize - offset);
+ memcpy(buff, bh[i]->b_data + offset, avail);
buff += avail;
bytes -= avail;
offset = 0;
+ put_bh(bh[i]);
}
res = LZ4_decompress_safe(stream->input, stream->output,
--- a/fs/squashfs/lzo_wrapper.c~revert-squashfs-migrate-from-ll_rw_block-usage-to-bio
+++ a/fs/squashfs/lzo_wrapper.c
@@ -9,7 +9,7 @@
*/
#include <linux/mutex.h>
-#include <linux/bio.h>
+#include <linux/buffer_head.h>
#include <linux/slab.h>
#include <linux/vmalloc.h>
#include <linux/lzo.h>
@@ -63,24 +63,21 @@ static void lzo_free(void *strm)
static int lzo_uncompress(struct squashfs_sb_info *msblk, void *strm,
- struct bio *bio, int offset, int length,
+ struct buffer_head **bh, int b, int offset, int length,
struct squashfs_page_actor *output)
{
- struct bvec_iter_all iter_all = {};
- struct bio_vec *bvec = bvec_init_iter_all(&iter_all);
struct squashfs_lzo *stream = strm;
void *buff = stream->input, *data;
- int bytes = length, res;
+ int avail, i, bytes = length, res;
size_t out_len = output->length;
- while (bio_next_segment(bio, &iter_all)) {
- int avail = min(bytes, ((int)bvec->bv_len) - offset);
-
- data = page_address(bvec->bv_page) + bvec->bv_offset;
- memcpy(buff, data + offset, avail);
+ for (i = 0; i < b; i++) {
+ avail = min(bytes, msblk->devblksize - offset);
+ memcpy(buff, bh[i]->b_data + offset, avail);
buff += avail;
bytes -= avail;
offset = 0;
+ put_bh(bh[i]);
}
res = lzo1x_decompress_safe(stream->input, (size_t)length,
--- a/fs/squashfs/squashfs.h~revert-squashfs-migrate-from-ll_rw_block-usage-to-bio
+++ a/fs/squashfs/squashfs.h
@@ -40,8 +40,8 @@ extern void *squashfs_decompressor_setup
/* decompressor_xxx.c */
extern void *squashfs_decompressor_create(struct squashfs_sb_info *, void *);
extern void squashfs_decompressor_destroy(struct squashfs_sb_info *);
-extern int squashfs_decompress(struct squashfs_sb_info *, struct bio *,
- int, int, struct squashfs_page_actor *);
+extern int squashfs_decompress(struct squashfs_sb_info *, struct buffer_head **,
+ int, int, int, struct squashfs_page_actor *);
extern int squashfs_max_decompressors(void);
/* export.c */
--- a/fs/squashfs/xz_wrapper.c~revert-squashfs-migrate-from-ll_rw_block-usage-to-bio
+++ a/fs/squashfs/xz_wrapper.c
@@ -10,7 +10,7 @@
#include <linux/mutex.h>
-#include <linux/bio.h>
+#include <linux/buffer_head.h>
#include <linux/slab.h>
#include <linux/xz.h>
#include <linux/bitops.h>
@@ -117,12 +117,11 @@ static void squashfs_xz_free(void *strm)
static int squashfs_xz_uncompress(struct squashfs_sb_info *msblk, void *strm,
- struct bio *bio, int offset, int length,
+ struct buffer_head **bh, int b, int offset, int length,
struct squashfs_page_actor *output)
{
- struct bvec_iter_all iter_all = {};
- struct bio_vec *bvec = bvec_init_iter_all(&iter_all);
- int total = 0, error = 0;
+ enum xz_ret xz_err;
+ int avail, total = 0, k = 0;
struct squashfs_xz *stream = strm;
xz_dec_reset(stream->state);
@@ -132,23 +131,11 @@ static int squashfs_xz_uncompress(struct
stream->buf.out_size = PAGE_SIZE;
stream->buf.out = squashfs_first_page(output);
- for (;;) {
- enum xz_ret xz_err;
-
- if (stream->buf.in_pos == stream->buf.in_size) {
- const void *data;
- int avail;
-
- if (!bio_next_segment(bio, &iter_all)) {
- /* XZ_STREAM_END must be reached. */
- error = -EIO;
- break;
- }
-
- avail = min(length, ((int)bvec->bv_len) - offset);
- data = page_address(bvec->bv_page) + bvec->bv_offset;
+ do {
+ if (stream->buf.in_pos == stream->buf.in_size && k < b) {
+ avail = min(length, msblk->devblksize - offset);
length -= avail;
- stream->buf.in = data + offset;
+ stream->buf.in = bh[k]->b_data + offset;
stream->buf.in_size = avail;
stream->buf.in_pos = 0;
offset = 0;
@@ -163,17 +150,23 @@ static int squashfs_xz_uncompress(struct
}
xz_err = xz_dec_run(stream->state, &stream->buf);
- if (xz_err == XZ_STREAM_END)
- break;
- if (xz_err != XZ_OK) {
- error = -EIO;
- break;
- }
- }
+
+ if (stream->buf.in_pos == stream->buf.in_size && k < b)
+ put_bh(bh[k++]);
+ } while (xz_err == XZ_OK);
squashfs_finish_page(output);
- return error ? error : total + stream->buf.out_pos;
+ if (xz_err != XZ_STREAM_END || k < b)
+ goto out;
+
+ return total + stream->buf.out_pos;
+
+out:
+ for (; k < b; k++)
+ put_bh(bh[k]);
+
+ return -EIO;
}
const struct squashfs_decompressor squashfs_xz_comp_ops = {
--- a/fs/squashfs/zlib_wrapper.c~revert-squashfs-migrate-from-ll_rw_block-usage-to-bio
+++ a/fs/squashfs/zlib_wrapper.c
@@ -10,7 +10,7 @@
#include <linux/mutex.h>
-#include <linux/bio.h>
+#include <linux/buffer_head.h>
#include <linux/slab.h>
#include <linux/zlib.h>
#include <linux/vmalloc.h>
@@ -50,35 +50,21 @@ static void zlib_free(void *strm)
static int zlib_uncompress(struct squashfs_sb_info *msblk, void *strm,
- struct bio *bio, int offset, int length,
+ struct buffer_head **bh, int b, int offset, int length,
struct squashfs_page_actor *output)
{
- struct bvec_iter_all iter_all = {};
- struct bio_vec *bvec = bvec_init_iter_all(&iter_all);
- int zlib_init = 0, error = 0;
+ int zlib_err, zlib_init = 0, k = 0;
z_stream *stream = strm;
stream->avail_out = PAGE_SIZE;
stream->next_out = squashfs_first_page(output);
stream->avail_in = 0;
- for (;;) {
- int zlib_err;
-
- if (stream->avail_in == 0) {
- const void *data;
- int avail;
-
- if (!bio_next_segment(bio, &iter_all)) {
- /* Z_STREAM_END must be reached. */
- error = -EIO;
- break;
- }
-
- avail = min(length, ((int)bvec->bv_len) - offset);
- data = page_address(bvec->bv_page) + bvec->bv_offset;
+ do {
+ if (stream->avail_in == 0 && k < b) {
+ int avail = min(length, msblk->devblksize - offset);
length -= avail;
- stream->next_in = data + offset;
+ stream->next_in = bh[k]->b_data + offset;
stream->avail_in = avail;
offset = 0;
}
@@ -92,28 +78,37 @@ static int zlib_uncompress(struct squash
if (!zlib_init) {
zlib_err = zlib_inflateInit(stream);
if (zlib_err != Z_OK) {
- error = -EIO;
- break;
+ squashfs_finish_page(output);
+ goto out;
}
zlib_init = 1;
}
zlib_err = zlib_inflate(stream, Z_SYNC_FLUSH);
- if (zlib_err == Z_STREAM_END)
- break;
- if (zlib_err != Z_OK) {
- error = -EIO;
- break;
- }
- }
+
+ if (stream->avail_in == 0 && k < b)
+ put_bh(bh[k++]);
+ } while (zlib_err == Z_OK);
squashfs_finish_page(output);
- if (!error)
- if (zlib_inflateEnd(stream) != Z_OK)
- error = -EIO;
+ if (zlib_err != Z_STREAM_END)
+ goto out;
+
+ zlib_err = zlib_inflateEnd(stream);
+ if (zlib_err != Z_OK)
+ goto out;
+
+ if (k < b)
+ goto out;
+
+ return stream->total_out;
+
+out:
+ for (; k < b; k++)
+ put_bh(bh[k]);
- return error ? error : stream->total_out;
+ return -EIO;
}
const struct squashfs_decompressor squashfs_zlib_comp_ops = {
--- a/fs/squashfs/zstd_wrapper.c~revert-squashfs-migrate-from-ll_rw_block-usage-to-bio
+++ a/fs/squashfs/zstd_wrapper.c
@@ -9,7 +9,7 @@
*/
#include <linux/mutex.h>
-#include <linux/bio.h>
+#include <linux/buffer_head.h>
#include <linux/slab.h>
#include <linux/zstd.h>
#include <linux/vmalloc.h>
@@ -59,44 +59,33 @@ static void zstd_free(void *strm)
static int zstd_uncompress(struct squashfs_sb_info *msblk, void *strm,
- struct bio *bio, int offset, int length,
+ struct buffer_head **bh, int b, int offset, int length,
struct squashfs_page_actor *output)
{
struct workspace *wksp = strm;
ZSTD_DStream *stream;
size_t total_out = 0;
- int error = 0;
+ size_t zstd_err;
+ int k = 0;
ZSTD_inBuffer in_buf = { NULL, 0, 0 };
ZSTD_outBuffer out_buf = { NULL, 0, 0 };
- struct bvec_iter_all iter_all = {};
- struct bio_vec *bvec = bvec_init_iter_all(&iter_all);
stream = ZSTD_initDStream(wksp->window_size, wksp->mem, wksp->mem_size);
if (!stream) {
ERROR("Failed to initialize zstd decompressor\n");
- return -EIO;
+ goto out;
}
out_buf.size = PAGE_SIZE;
out_buf.dst = squashfs_first_page(output);
- for (;;) {
- size_t zstd_err;
+ do {
+ if (in_buf.pos == in_buf.size && k < b) {
+ int avail = min(length, msblk->devblksize - offset);
- if (in_buf.pos == in_buf.size) {
- const void *data;
- int avail;
-
- if (!bio_next_segment(bio, &iter_all)) {
- error = -EIO;
- break;
- }
-
- avail = min(length, ((int)bvec->bv_len) - offset);
- data = page_address(bvec->bv_page) + bvec->bv_offset;
length -= avail;
- in_buf.src = data + offset;
+ in_buf.src = bh[k]->b_data + offset;
in_buf.size = avail;
in_buf.pos = 0;
offset = 0;
@@ -108,8 +97,8 @@ static int zstd_uncompress(struct squash
/* Shouldn't run out of pages
* before stream is done.
*/
- error = -EIO;
- break;
+ squashfs_finish_page(output);
+ goto out;
}
out_buf.pos = 0;
out_buf.size = PAGE_SIZE;
@@ -118,20 +107,29 @@ static int zstd_uncompress(struct squash
total_out -= out_buf.pos;
zstd_err = ZSTD_decompressStream(stream, &out_buf, &in_buf);
total_out += out_buf.pos; /* add the additional data produced */
- if (zstd_err == 0)
- break;
- if (ZSTD_isError(zstd_err)) {
- ERROR("zstd decompression error: %d\n",
- (int)ZSTD_getErrorCode(zstd_err));
- error = -EIO;
- break;
- }
- }
+ if (in_buf.pos == in_buf.size && k < b)
+ put_bh(bh[k++]);
+ } while (zstd_err != 0 && !ZSTD_isError(zstd_err));
squashfs_finish_page(output);
- return error ? error : total_out;
+ if (ZSTD_isError(zstd_err)) {
+ ERROR("zstd decompression error: %d\n",
+ (int)ZSTD_getErrorCode(zstd_err));
+ goto out;
+ }
+
+ if (k < b)
+ goto out;
+
+ return (int)total_out;
+
+out:
+ for (; k < b; k++)
+ put_bh(bh[k]);
+
+ return -EIO;
}
const struct squashfs_decompressor squashfs_zstd_comp_ops = {
_
Patches currently in -mm which might be from akpm@linux-foundation.org are
mm-close-race-between-munmap-and-expand_upwards-downwards-fix.patch
revert-squashfs-migrate-from-ll_rw_block-usage-to-bio.patch
mm.patch
mm-handle-page-mapping-better-in-dump_page-fix.patch
mm-memcg-percpu-account-percpu-memory-to-memory-cgroups-fix.patch
mm-memcg-percpu-account-percpu-memory-to-memory-cgroups-fix-fix.patch
mm-thp-replace-http-links-with-https-ones-fix.patch
mm-vmstat-add-events-for-thp-migration-without-split-fix.patch
linux-next-rejects.patch
linux-next-git-rejects.patch
mm-migrate-clear-__gfp_reclaim-to-make-the-migration-callback-consistent-with-regular-thp-allocations-fix.patch
mm-madvise-introduce-process_madvise-syscall-an-external-memory-hinting-api-fix.patch
mm-madvise-introduce-process_madvise-syscall-an-external-memory-hinting-api-fix-2.patch
kernel-forkc-export-kernel_thread-to-modules.patch
next prev parent reply other threads:[~2020-07-17 1:53 UTC|newest]
Thread overview: 243+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-03 22:14 incoming Andrew Morton
2020-07-03 22:15 ` [patch 1/5] mm/hugetlb.c: fix pages per hugetlb calculation Andrew Morton
2020-07-03 22:15 ` [patch 2/5] samples/vfs: avoid warning in statx override Andrew Morton
2020-07-03 22:15 ` [patch 3/5] mm/cma.c: use exact_nid true to fix possible per-numa cma leak Andrew Morton
2020-07-03 22:15 ` [patch 4/5] vmalloc: fix the owner argument for the new __vmalloc_node_range callers Andrew Morton
2020-07-03 22:15 ` [patch 5/5] mm/page_alloc: fix documentation error Andrew Morton
2020-07-06 22:41 ` + kasan-remove-kasan_unpoison_stack_above_sp_to.patch added to -mm tree Andrew Morton
2020-07-06 22:41 ` Andrew Morton
2020-07-06 22:46 ` + kasan-fix-kasan-unit-tests-for-tag-based-kasan.patch " Andrew Morton
2020-07-06 22:49 ` + lib-test_bitops-do-the-full-test-during-module-init.patch " Andrew Morton
2020-07-06 23:03 ` [nacked] mm-mremap-format-the-check-in-move_normal_pmd-same-as-move_huge_pmd.patch removed from " Andrew Morton
2020-07-06 23:03 ` [to-be-updated] mm-mremap-it-is-sure-to-have-enough-space-when-extent-meets-requirement.patch " Andrew Morton
2020-07-06 23:03 ` [to-be-updated] mm-mremap-calculate-extent-in-one-place.patch " Andrew Morton
2020-07-06 23:04 ` [to-be-updated] mm-mremap-start-addresses-are-properly-aligned.patch " Andrew Morton
2020-07-06 23:04 ` Andrew Morton
2020-07-06 23:15 ` + mm-page_alloc-skip-setting-nodemask-when-we-are-in-interrupt.patch added to " Andrew Morton
2020-07-06 23:28 ` + mm-debug_vm_pgtable-add-tests-validating-arch-helpers-for-core-mm-features.patch " Andrew Morton
2020-07-06 23:28 ` + mm-debug_vm_pgtable-add-tests-validating-advanced-arch-page-table-helpers.patch " Andrew Morton
2020-07-06 23:28 ` + mm-debug_vm_pgtable-add-debug-prints-for-individual-tests.patch " Andrew Morton
2020-07-06 23:28 ` + documentation-mm-add-descriptions-for-arch-page-table-helpers.patch " Andrew Morton
2020-07-06 23:33 ` [merged] slub-drop-lockdep_assert_held-from-put_map.patch removed from " Andrew Morton
2020-07-06 23:33 ` Andrew Morton
2020-07-06 23:34 ` + slub-drop-lockdep_assert_held-from-put_map.patch added to " Andrew Morton
2020-07-06 23:34 ` Andrew Morton
2020-07-06 23:34 ` [merged] mailmap-add-entry-for-obsolete-email-address.patch removed from " Andrew Morton
2020-07-06 23:36 ` + mm-mmap-optimize-a-branch-judgment-in-ksys_mmap_pgoff.patch added to " Andrew Morton
2020-07-06 23:50 ` + vfs-xattr-mm-shmem-kernfs-release-simple-xattr-entry-in-a-right-way.patch " Andrew Morton
2020-07-06 23:52 ` [to-be-updated] mm-slab-check-gfp_slab_bug_mask-before-alloc_pages-in-kmalloc_order.patch removed from " Andrew Morton
2020-07-06 23:53 ` + mm-slab-check-gfp_slab_bug_mask-before-alloc_pages-in-kmalloc_order.patch added to " Andrew Morton
2020-07-07 1:53 ` mmotm 2020-07-06-18-53 uploaded Andrew Morton
2020-07-07 19:17 ` + mm-avoid-access-flag-update-tlb-flush-for-retried-page-fault.patch added to -mm tree Andrew Morton
2020-07-07 19:20 ` + mm-memcg-slab-remove-unused-argument-by-charge_slab_page.patch " Andrew Morton
2020-07-07 19:20 ` + mm-slab-rename-uncharge_slab_page-to-unaccount_slab_page.patch " Andrew Morton
2020-07-07 19:20 ` + mm-kmem-switch-to-static_branch_likely-in-memcg_kmem_enabled.patch " Andrew Morton
2020-07-07 19:25 ` + fs-minix-check-return-value-of-sb_getblk.patch " Andrew Morton
2020-07-07 19:25 ` + fs-minix-dont-allow-getting-deleted-inodes.patch " Andrew Morton
2020-07-07 19:25 ` + fs-minix-reject-too-large-maximum-file-size.patch " Andrew Morton
2020-07-07 19:25 ` + fs-minix-set-s_maxbytes-correctly.patch " Andrew Morton
2020-07-07 19:25 ` + fs-minix-fix-block-limit-check-for-v1-filesystems.patch " Andrew Morton
2020-07-07 19:25 ` + fs-minix-remove-expected-error-message-in-block_to_path.patch " Andrew Morton
2020-07-07 19:27 ` + mm-vmalloc-remove-redundant-asignmnet-in-unmap_kernel_range_noflush.patch " Andrew Morton
2020-07-07 19:28 ` + mm-zswap-move-to-use-crypto_acomp-api-for-hardware-acceleration.patch " Andrew Morton
2020-07-07 19:36 ` + kthread-remove-incorrect-comment-in-kthread_create_on_cpu.patch " Andrew Morton
2020-07-07 19:37 ` + lib-test_lockupc-make-symbol-test_works-static.patch " Andrew Morton
2020-07-07 19:39 ` [failures] kthread-work-could-not-be-queued-when-worker-being-destroyed.patch removed from " Andrew Morton
2020-07-07 19:47 ` [to-be-updated] mm-page_isolation-prefer-the-node-of-the-source-page.patch " Andrew Morton
2020-07-07 19:47 ` [to-be-updated] mm-migrate-move-migration-helper-from-h-to-c.patch " Andrew Morton
2020-07-07 19:47 ` [to-be-updated] mm-hugetlb-unify-migration-callbacks.patch " Andrew Morton
2020-07-07 19:47 ` [to-be-updated] mm-hugetlb-make-hugetlb-migration-callback-cma-aware.patch " Andrew Morton
2020-07-07 19:47 ` [to-be-updated] mm-migrate-make-a-standard-migration-target-allocation-function.patch " Andrew Morton
2020-07-07 19:47 ` [to-be-updated] mm-gup-use-a-standard-migration-target-allocation-callback.patch " Andrew Morton
2020-07-07 19:47 ` [to-be-updated] mm-mempolicy-use-a-standard-migration-target-allocation-callback.patch " Andrew Morton
2020-07-07 19:47 ` [to-be-updated] mm-page_alloc-remove-a-wrapper-for-alloc_migration_target.patch " Andrew Morton
2020-07-07 19:47 ` Andrew Morton
2020-07-07 19:56 ` + mm-hugetlb-avoid-hardcoding-while-checking-if-cma-is-enable.patch added to " Andrew Morton
2020-07-07 20:11 ` [folded-merged] mm-vmstat-add-events-for-pmd-based-thp-migration-without-split-fix.patch removed from " Andrew Morton
2020-07-07 20:11 ` [folded-merged] mm-vmstat-add-events-for-pmd-based-thp-migration-without-split-update.patch " Andrew Morton
2020-07-07 20:12 ` [to-be-updated] mm-vmstat-add-events-for-pmd-based-thp-migration-without-split.patch " Andrew Morton
2020-07-07 20:13 ` + mm-vmstat-add-events-for-thp-migration-without-split.patch added to " Andrew Morton
2020-07-07 22:18 ` + mm-memcg-fix-refcount-error-while-moving-and-swapping.patch " Andrew Morton
2020-07-08 21:48 ` + vfat-fat-msdos-filesystem-replace-http-links-with-https-ones.patch " Andrew Morton
2020-07-08 21:50 ` + kbuild-move-wtype-limits-to-w=2.patch " Andrew Morton
2020-07-08 22:17 ` [to-be-updated] mm-zswap-move-to-use-crypto_acomp-api-for-hardware-acceleration.patch removed from " Andrew Morton
2020-07-08 22:20 ` + mm-remove-unneeded-includes-of-asm-pgalloch-fix.patch added to " Andrew Morton
2020-07-08 22:25 ` + kasan-fix-kasan-unit-tests-for-tag-based-kasan-v4.patch " Andrew Morton
2020-07-08 23:12 ` + mailmap-add-entry-for-mike-rapoport.patch " Andrew Morton
2020-07-08 23:16 ` + mm-mremap-it-is-sure-to-have-enough-space-when-extent-meets-requirement.patch " Andrew Morton
2020-07-08 23:16 ` + mm-mremap-calculate-extent-in-one-place.patch " Andrew Morton
2020-07-08 23:16 ` + mm-mremap-start-addresses-are-properly-aligned.patch " Andrew Morton
2020-07-08 23:16 ` Andrew Morton
2020-07-08 23:16 ` + mm-mremap-use-pmd_addr_end-to-simplify-the-calculate-of-extent.patch " Andrew Morton
2020-07-08 23:41 ` + mm-swap-simplify-alloc_swap_slot_cache.patch " Andrew Morton
2020-07-08 23:41 ` + mm-swap-simplify-enable_swap_slots_cache.patch " Andrew Morton
2020-07-08 23:41 ` + mm-swap-remove-redundant-check-for-swap_slot_cache_initialized.patch " Andrew Morton
2020-07-09 0:06 ` + mm-do-page-fault-accounting-in-handle_mm_fault.patch " Andrew Morton
2020-07-09 0:06 ` Andrew Morton
2020-07-09 0:06 ` + mm-alpha-use-general-page-fault-accounting.patch " Andrew Morton
2020-07-09 0:06 ` + mm-arc-use-general-page-fault-accounting.patch " Andrew Morton
2020-07-09 0:06 ` + mm-arm-use-general-page-fault-accounting.patch " Andrew Morton
2020-07-09 0:06 ` + mm-arm64-use-general-page-fault-accounting.patch " Andrew Morton
2020-07-09 0:06 ` + mm-csky-use-general-page-fault-accounting.patch " Andrew Morton
2020-07-09 0:06 ` + mm-hexagon-use-general-page-fault-accounting.patch " Andrew Morton
2020-07-09 0:06 ` + mm-ia64-use-general-page-fault-accounting.patch " Andrew Morton
2020-07-09 0:06 ` + mm-m68k-use-general-page-fault-accounting.patch " Andrew Morton
2020-07-09 0:06 ` + mm-microblaze-use-general-page-fault-accounting.patch " Andrew Morton
2020-07-09 0:06 ` + mm-mips-use-general-page-fault-accounting.patch " Andrew Morton
2020-07-09 0:07 ` + mm-nds32-use-general-page-fault-accounting.patch " Andrew Morton
2020-07-09 0:07 ` + mm-nios2-use-general-page-fault-accounting.patch " Andrew Morton
2020-07-09 0:07 ` + mm-openrisc-use-general-page-fault-accounting.patch " Andrew Morton
2020-07-09 0:07 ` + mm-parisc-use-general-page-fault-accounting.patch " Andrew Morton
2020-07-09 0:07 ` + mm-powerpc-use-general-page-fault-accounting.patch " Andrew Morton
2020-07-09 0:07 ` + mm-riscv-use-general-page-fault-accounting.patch " Andrew Morton
2020-07-09 0:07 ` + mm-s390-use-general-page-fault-accounting.patch " Andrew Morton
2020-07-09 0:07 ` + mm-sh-use-general-page-fault-accounting.patch " Andrew Morton
2020-07-09 0:07 ` + mm-sparc32-use-general-page-fault-accounting.patch " Andrew Morton
2020-07-09 0:07 ` + mm-sparc64-use-general-page-fault-accounting.patch " Andrew Morton
2020-07-09 0:07 ` + mm-x86-use-general-page-fault-accounting.patch " Andrew Morton
2020-07-09 0:07 ` + mm-xtensa-use-general-page-fault-accounting.patch " Andrew Morton
2020-07-09 0:07 ` + mm-clean-up-the-last-pieces-of-page-fault-accountings.patch " Andrew Morton
2020-07-09 0:07 ` Andrew Morton
2020-07-09 0:07 ` + mm-gup-remove-task_struct-pointer-for-all-gup-code.patch " Andrew Morton
2020-07-09 2:04 ` + mm-vmstat-add-events-for-thp-migration-without-split-fix.patch " Andrew Morton
2020-07-09 2:29 ` mmotm 2020-07-08-19-28 uploaded Andrew Morton
2020-07-09 2:29 ` Andrew Morton
2020-07-09 23:09 ` + mm-handle-page-mapping-better-in-dump_page.patch added to -mm tree Andrew Morton
2020-07-09 23:09 ` + mm-dump-compound-page-information-on-a-second-line.patch " Andrew Morton
2020-07-09 23:09 ` + mm-print-head-flags-in-dump_page.patch " Andrew Morton
2020-07-09 23:09 ` + mm-switch-dump_page-to-get_kernel_nofault.patch " Andrew Morton
2020-07-09 23:09 ` + mm-print-the-inode-number-in-dump_page.patch " Andrew Morton
2020-07-09 23:09 ` + mm-print-hashed-address-of-struct-page.patch " Andrew Morton
2020-07-09 23:10 ` + mm-memcontrol-avoid-workload-stalls-when-lowering-memoryhigh.patch " Andrew Morton
2020-07-09 23:46 ` + mm-migrate-optimize-migrate_vma_setup-for-holes.patch " Andrew Morton
2020-07-09 23:46 ` + mm-migrate-add-migrate-shared-test-for-migrate_vma_.patch " Andrew Morton
2020-07-10 0:15 ` + mm-oom-make-the-calculation-of-oom-badness-more-accurate.patch " Andrew Morton
2020-07-10 0:23 ` + mm-close-race-between-munmap-and-expand_upwards-downwards.patch " Andrew Morton
2020-07-10 0:23 ` + mm-close-race-between-munmap-and-expand_upwards-downwards-fix.patch " Andrew Morton
2020-07-10 0:27 ` + mm-vmstat-add-events-for-thp-migration-without-split-fix-2.patch " Andrew Morton
2020-07-10 0:33 ` + iomap-constify-ioreadx-iomem-argument-as-in-generic-implementation.patch " Andrew Morton
2020-07-10 0:33 ` + rtl818x-constify-ioreadx-iomem-argument-as-in-generic-implementation.patch " Andrew Morton
2020-07-10 0:33 ` + ntb-intel-constify-ioreadx-iomem-argument-as-in-generic-implementation.patch " Andrew Morton
2020-07-10 0:33 ` + virtio-pci-constify-ioreadx-iomem-argument-as-in-generic-implementation.patch " Andrew Morton
2020-07-10 0:36 ` + doc-mm-sync-up-oom_score_adj-documentation.patch " Andrew Morton
2020-07-10 0:36 ` Andrew Morton
2020-07-10 0:36 ` + doc-mm-clarify-proc-pid-oom_score-value-range.patch " Andrew Morton
2020-07-10 0:38 ` [to-be-updated] proc-meminfo-avoid-open-coded-reading-of-vm_committed_as.patch removed from " Andrew Morton
2020-07-10 0:38 ` [to-be-updated] mm-utilc-make-vm_memory_committed-more-accurate.patch " Andrew Morton
2020-07-10 0:38 ` [to-be-updated] mm-adjust-vm_committed_as_batch-according-to-vm-overcommit-policy.patch " Andrew Morton
2020-07-10 4:00 ` mmotm 2020-07-09-21-00 uploaded Andrew Morton
2020-07-10 23:27 ` [to-be-updated] mm-hugetlb-avoid-hardcoding-while-checking-if-cma-is-enable.patch removed from -mm tree Andrew Morton
2020-07-10 23:29 ` + mm-hugetlb-avoid-hardcoding-while-checking-if-cma-is-enabled.patch added to " Andrew Morton
2020-07-10 23:32 ` + proc-sysctl-make-protected_-world-readable.patch " Andrew Morton
2020-07-10 23:32 ` [to-be-updated] mm-vmallocc-add-an-error-message-if-two-areas-overlap.patch removed from " Andrew Morton
2020-07-10 23:35 ` + rapidio-rio_mport_cdev-use-array_size-helper-in-copy_fromto_user.patch added to " Andrew Morton
2020-07-14 0:19 ` + mm-vmscan-consistent-update-to-pgrefill.patch " Andrew Morton
2020-07-14 0:24 ` + mm-handle-page-mapping-better-in-dump_page-fix.patch " Andrew Morton
2020-07-14 0:31 ` + tmpfs-per-superblock-i_ino-support.patch " Andrew Morton
2020-07-14 0:31 ` + tmpfs-support-64-bit-inums-per-sb.patch " Andrew Morton
2020-07-14 0:50 ` + mm-thp-replace-http-links-with-https-ones.patch " Andrew Morton
2020-07-14 1:00 ` + mm-memcg-reclaim-more-aggressively-before-high-allocator-throttling.patch " Andrew Morton
2020-07-14 1:00 ` + mm-memcg-unify-reclaim-retry-limits-with-page-allocator.patch " Andrew Morton
2020-07-14 1:03 ` + mm-memcg-avoid-stale-protection-values-when-cgroup-is-above-protection.patch " Andrew Morton
2020-07-14 1:03 ` + mm-memcg-decouple-elowmin-state-mutations-from-protection-checks.patch " Andrew Morton
2020-07-14 1:10 ` + scripts-deprecated_terms-sync-with-inclusive-terms.patch " Andrew Morton
2020-07-14 1:21 ` + mm-page_isolation-prefer-the-node-of-the-source-page.patch " Andrew Morton
2020-07-14 1:21 ` + mm-migrate-move-migration-helper-from-h-to-c.patch " Andrew Morton
2020-07-14 1:21 ` + mm-hugetlb-unify-migration-callbacks.patch " Andrew Morton
2020-07-14 1:21 ` + mm-migrate-clear-__gfp_reclaim-to-make-the-migration-callback-consistent-with-regular-thp-allocations.patch " Andrew Morton
2020-07-14 1:21 ` + mm-migrate-clear-__gfp_reclaim-to-make-the-migration-callback-consistent-with-regular-thp-allocations-fix.patch " Andrew Morton
2020-07-14 1:21 ` + mm-migrate-make-a-standard-migration-target-allocation-function.patch " Andrew Morton
2020-07-14 1:21 ` + mm-mempolicy-use-a-standard-migration-target-allocation-callback.patch " Andrew Morton
2020-07-14 1:21 ` + mm-page_alloc-remove-a-wrapper-for-alloc_migration_target.patch " Andrew Morton
2020-07-14 1:21 ` + mm-memory-failure-remove-a-wrapper-for-alloc_migration_target.patch " Andrew Morton
2020-07-14 1:22 ` + mm-memory_hotplug-remove-a-wrapper-for-alloc_migration_target.patch " Andrew Morton
2020-07-14 1:30 ` + mm-debug_vm_pgtable-add-tests-validating-advanced-arch-page-table-helpers-v5.patch " Andrew Morton
2020-07-14 1:30 ` + documentation-mm-add-descriptions-for-arch-page-table-helpers-v5.patch " Andrew Morton
2020-07-14 1:37 ` + mm-sparse-cleanup-the-code-surrounding-memory_present.patch " Andrew Morton
2020-07-14 1:38 ` + const_structscheckpatch-add-regulator_ops.patch " Andrew Morton
2020-07-14 1:40 ` + fat-fix-fat_ra_init-for-data-clusters-==-0.patch " Andrew Morton
2020-07-14 1:41 ` + mm-vmallocc-remove-bug-from-the-find_va_links.patch " Andrew Morton
2020-07-14 2:49 ` mmotm 2020-07-13-19-49 uploaded Andrew Morton
2020-07-16 0:41 ` + mm-avoid-access-flag-update-tlb-flush-for-retried-page-fault-v2.patch added to -mm tree Andrew Morton
2020-07-16 0:42 ` + fs-ufs-avoid-potential-u32-multiplication-overflow.patch " Andrew Morton
2020-07-16 0:50 ` + x86-mm-use-max-memory-block-size-on-bare-metal-v3.patch " Andrew Morton
2020-07-16 21:28 ` + mm-memcg-slab-fix-memory-leak-at-non-root-kmem_cache-destroy.patch " Andrew Morton
2020-07-16 21:45 ` + mmhwpoison-cleanup-unused-pagehuge-check.patch " Andrew Morton
2020-07-16 21:45 ` + mm-hwpoison-remove-recalculating-hpage.patch " Andrew Morton
2020-07-16 21:45 ` + mmmadvise-call-soft_offline_page-without-mf_count_increased.patch " Andrew Morton
2020-07-16 21:45 ` + mmmadvise-refactor-madvise_inject_error.patch " Andrew Morton
2020-07-16 21:45 ` + mmhwpoison-inject-dont-pin-for-hwpoison_filter.patch " Andrew Morton
2020-07-16 21:46 ` + mmhwpoison-un-export-get_hwpoison_page-and-make-it-static.patch " Andrew Morton
2020-07-16 21:46 ` + mmhwpoison-kill-put_hwpoison_page.patch " Andrew Morton
2020-07-16 21:46 ` + mmhwpoison-remove-mf_count_increased.patch " Andrew Morton
2020-07-16 21:46 ` + mmhwpoison-remove-flag-argument-from-soft-offline-functions.patch " Andrew Morton
2020-07-16 21:46 ` + mmhwpoison-unify-thp-handling-for-hard-and-soft-offline.patch " Andrew Morton
2020-07-16 21:46 ` + mmhwpoison-rework-soft-offline-for-free-pages.patch " Andrew Morton
2020-07-16 21:46 ` + mmhwpoison-rework-soft-offline-for-in-use-pages.patch " Andrew Morton
2020-07-16 21:46 ` + mmhwpoison-refactor-soft_offline_huge_page-and-__soft_offline_page.patch " Andrew Morton
2020-07-16 21:46 ` + mmhwpoison-return-0-if-the-page-is-already-poisoned-in-soft-offline.patch " Andrew Morton
2020-07-16 21:46 ` + mmhwpoison-introduce-mf_msg_unsplit_thp.patch " Andrew Morton
2020-07-16 22:51 ` + linux-sched-mmh-drop-duplicated-words-in-comments.patch " Andrew Morton
2020-07-16 22:51 ` + mm-drop-duplicated-words-in-linux-pgtableh.patch " Andrew Morton
2020-07-16 22:52 ` + mm-drop-duplicated-words-in-linux-mmh.patch " Andrew Morton
2020-07-16 22:52 ` + autofs-fix-doubled-word.patch " Andrew Morton
2020-07-16 23:08 ` + mm-vmstat-fix-proc-sys-vm-stat_refresh-generating-false-warnings.patch " Andrew Morton
2020-07-16 23:09 ` Andrew Morton
2020-07-16 23:28 ` + memcg-oom-check-memcg-margin-for-parallel-oom.patch " Andrew Morton
2020-07-16 23:32 ` + mm-memcg-percpu-account-percpu-memory-to-memory-cgroups-fix-2.patch " Andrew Morton
2020-07-16 23:42 ` + ipc-shmc-remove-the-superfluous-break.patch " Andrew Morton
2020-07-16 23:52 ` + mm-thp-replace-http-links-with-https-ones-fix.patch " Andrew Morton
2020-07-17 0:01 ` + scripts-spellingtxt-add-more-spellings-to-spellingtxt.patch " Andrew Morton
2020-07-17 1:53 ` Andrew Morton [this message]
2020-07-17 4:06 ` + revert-squashfs-migrate-from-ll_rw_block-usage-to-bio-fix.patch " Andrew Morton
2020-07-17 5:53 ` mmotm 2020-07-16-22-52 uploaded Andrew Morton
2020-07-17 20:18 ` [folded-merged] revert-squashfs-migrate-from-ll_rw_block-usage-to-bio-fix.patch removed from -mm tree Andrew Morton
2020-07-17 20:18 ` [obsolete] revert-squashfs-migrate-from-ll_rw_block-usage-to-bio.patch " Andrew Morton
2020-07-17 20:20 ` + squashfs-fix-length-field-overlap-check-in-metadata-reading.patch added to " Andrew Morton
2020-07-17 20:35 ` + mm-hugetlb-avoid-hardcoding-while-checking-if-cma-is-enabled-fix.patch " Andrew Morton
2020-07-17 20:49 ` + mm-vmstat-fix-proc-sys-vm-stat_refresh-generating-false-warnings-fix.patch " Andrew Morton
2020-07-17 21:11 ` + mm-pgtable-make-generic-pgprot_-macros-available-for-no-mmu.patch " Andrew Morton
2020-07-17 21:11 ` + riscv-use-generic-pgprot_-macros-from-linux-pgtableh.patch " Andrew Morton
2020-07-17 21:42 ` + uaccess-add-force_uaccess_beginend-helpers-v2.patch " Andrew Morton
2020-07-17 21:59 ` + mm-sparsemem-enable-vmem_altmap-support-in-vmemmap_populate_basepages.patch " Andrew Morton
2020-07-17 21:59 ` + mm-sparsemem-enable-vmem_altmap-support-in-vmemmap_alloc_block_buf.patch " Andrew Morton
2020-07-17 21:59 ` + arm64-mm-enable-vmem_altmap-support-for-vmemmap-mappings.patch " Andrew Morton
2020-07-17 22:00 ` + ocfs2-fix-remounting-needed-after-setfacl-command.patch " Andrew Morton
2020-07-17 23:03 ` + mm-memcg-slab-use-a-single-set-of-kmem_caches-for-all-allocations-fix.patch " Andrew Morton
2020-07-20 22:55 ` + scripts-decode_stacktrace-strip-basepath-from-all-paths.patch " Andrew Morton
2020-07-20 23:03 ` + mm-vmstat-fix-proc-sys-vm-stat_refresh-generating-false-warnings-fix-2.patch " Andrew Morton
2020-07-20 23:26 ` + mm-gupc-fix-the-comment-of-return-value-for-populate_vma_page_range.patch " Andrew Morton
2020-07-20 23:31 ` + ocfs2-suballoch-delete-a-duplicated-word.patch " Andrew Morton
2020-07-21 0:26 ` + ntfs-fix-ntfs_test_inode-and-ntfs_init_locked_inode-function-type.patch " Andrew Morton
2020-07-21 0:27 ` + highmem-linux-highmemh-fix-duplicated-words-in-a-comment.patch " Andrew Morton
2020-07-21 0:28 ` + clang-linux-compiler-clangh-drop-duplicated-word-in-a-comment.patch " Andrew Morton
2020-07-21 0:30 ` + linux-exportfsh-drop-duplicated-word-in-a-comment.patch " Andrew Morton
2020-07-21 0:30 ` + linux-async_txh-drop-duplicated-word-in-a-comment.patch " Andrew Morton
2020-07-21 0:31 ` + frontswap-linux-frontswaph-drop-duplicated-word-in-a-comment.patch " Andrew Morton
2020-07-21 0:33 ` + memcontrol-drop-duplicate-word-and-fix-spello-in-linux-memcontrolh.patch " Andrew Morton
2020-07-21 0:34 ` + xz-drop-duplicated-word-in-linux-xzh.patch " Andrew Morton
2020-07-21 2:07 ` mmotm 2020-07-20-19-06 uploaded Andrew Morton
2020-07-21 20:49 ` + fork-silence-a-false-postive-warning-in-__mmdrop.patch added to -mm tree Andrew Morton
2020-07-21 20:57 ` + io-mapping-indicate-mapping-failure.patch " Andrew Morton
2020-07-21 20:57 ` + io-mapping-indicate-mapping-failure-fix.patch " Andrew Morton
2020-07-21 21:06 ` + mm-fix-kthread_use_mm-vs-tlb-invalidate.patch " Andrew Morton
2020-07-21 21:06 ` + mm-fix-kthread_use_mm-vs-tlb-invalidate-fix.patch " Andrew Morton
2020-07-21 21:18 ` + kernel-add-a-kernel_wait-helper.patch " Andrew Morton
2020-07-21 21:20 ` + maintainers-add-kcov-section.patch " Andrew Morton
2020-07-21 21:21 ` + mm-hugetlb-avoid-hardcoding-while-checking-if-cma-is-enabled-fix-fix.patch " Andrew Morton
2020-07-24 0:26 ` + scripts-gdb-fix-lx-symbols-gdberror-while-loading-modules.patch " Andrew Morton
2020-07-24 0:47 ` + mm-vmscan-make-active-inactive-ratio-as-1-1-for-anon-lru.patch " Andrew Morton
2020-07-24 0:47 ` + mm-vmscan-protect-the-workingset-on-anonymous-lru.patch " Andrew Morton
2020-07-24 0:47 ` + mm-workingset-prepare-the-workingset-detection-infrastructure-for-anon-lru.patch " Andrew Morton
2020-07-24 0:47 ` + mm-swapcache-support-to-handle-the-shadow-entries.patch " Andrew Morton
2020-07-24 0:47 ` + mm-swap-implement-workingset-detection-for-anonymous-lru.patch " Andrew Morton
2020-07-24 0:47 ` + mm-vmscan-restore-active-inactive-ratio-for-anonymous-lru.patch " Andrew Morton
2020-07-24 0:57 ` + makefile-add-debug-option-to-enable-function-aligned-on-32-bytes.patch " Andrew Morton
2020-07-24 1:09 ` + mm-page_alloc-fix-memalloc_nocma_save-restore-apis.patch " Andrew Morton
2020-07-24 2:12 ` + panic-make-print_oops_end_marker-static.patch " Andrew Morton
2020-07-24 2:20 ` + lib-kconfigdebug-make-test_lockup-depend-on-module.patch " Andrew Morton
2020-07-24 2:20 ` + lib-test_lockupc-fix-return-value-of-test_lockup_init.patch " Andrew Morton
2020-07-24 2:25 ` [merged] sh-add-missing-export_symbol-for-__delay.patch removed from " Andrew Morton
2020-07-24 2:50 ` + revert-revert-mm-vmalloc-modify-struct-vmap_area-to-reduce-its-size.patch added to " Andrew Morton
2020-07-24 2:53 ` + khugepaged-fix-null-pointer-dereference-due-to-race.patch " Andrew Morton
2020-07-24 3:01 ` + mm-mmap-merge-vma-after-call_mmap-if-possible.patch " Andrew Morton
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200717015324.dNxVKbBWs%akpm@linux-foundation.org \
--to=akpm@linux-foundation.org \
--cc=adrien+dev@schischi.me \
--cc=bernd.amend@gmail.com \
--cc=drosen@google.com \
--cc=groeck@chromium.org \
--cc=hch@lst.de \
--cc=linux-kernel@vger.kernel.org \
--cc=mm-commits@vger.kernel.org \
--cc=phillip@squashfs.org.uk \
--cc=pliard@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).