From nobody Fri Sep 25 23:54:32 2026 Received: from mail-pj1-f53.google.com (mail-pj1-f53.google.com [209.85.216.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 07C0646A611 for ; Mon, 7 Sep 2026 10:58:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788778686; cv=none; b=Ff8zk0q4hRL8UopMirD3QeALU9CM19MUD4zLRoSiF0SXEBqWLuDkkzI4osQpdic9/7JdrhdtRHW4DenC1DFRIegkTb83T66C0mLO9W0WYee7Bn8ewcm2RI2iSDlW3htuByEEVViNPca9WFejNlyZx4abl8MtFQOgZ+izWYG8xE8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788778686; c=relaxed/simple; bh=m2rcYK+BTakjJNcINhugxAWmEoCjJRF8nvtwJOYlq9Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=byEZlyE6xLqIkrRW+uwZ+UrwLKcVU/9QipsJYU3LR7owsp1+vmIEFA59nDYUn4vkDDJ9mEuRktp+/c+IQP4mMMucRDwytyqnAEJwyqvyJlbFfdNKYHSv/a/64rID6liezLUdI2tGrvPWPRG22qQdW9WCmESZLvv2a7wTXL39C3E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=d0n5NkQr; arc=none smtp.client-ip=209.85.216.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="d0n5NkQr" Received: by mail-pj1-f53.google.com with SMTP id 98e67ed59e1d1-3856d6fbcb3so2707958a91.2 for ; Mon, 07 Sep 2026 03:58:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1788778684; x=1789383484; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=QaUctYgsKexv76T3vPQS88gPu5aYrdy0F+NCE/op3Bo=; b=d0n5NkQrzVm3sMYNTR7mCHlL8EJjO3fG+KXcSeDHIMhXCqnNu6yGARbQrFiDgijlik lXbQNIVHsM8jpXQwiA2/a6PDVrknUGVSLUphAtNvWwKJ2ZeZWqCH107w4U859UtY6IxF UA6PPq84hzR0a7z/mSKs8WT4PtZpcn8S4wCzI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788778684; x=1789383484; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=QaUctYgsKexv76T3vPQS88gPu5aYrdy0F+NCE/op3Bo=; b=ikBvaAkWK62FlCPK5unQ98Fhi3G76x38BnvUT6K8wRJNmuWalLi7f2OdPcf7zOIfqb aCkdkCCkyexUXrn8gU7aD2VSOZgL70rn93spGOsnlTW5SX68IuacbmnnSMkhFZBNJOJv Yu/Z97oSLd5UvStsBgvhMhsVAl7KIX8ti41skdx5mK5HkWduDClcnYtvTyEiLL2CPLsl EQGK2lghkvPuVvsbcwc0NDlUDReCWHUP0aYf9rzwgxPxBXjfxKoTyTwL+suw5+efcpim s348KT5Jq24nJAs/atwjTGzm3painlBFnBY7Ys1ZMd9BKN6LAPuh4aOgDzNc1QCmihXa gQ5Q== X-Forwarded-Encrypted: i=1; AKwUvBzT5ffS83uPLT2GjdrG+S+TAhwzZHiuf7xY0yoKnNhSCE9pxu+aQ6LsgEHiXwppex0zWdZ4zjSCPnvU/80=@vger.kernel.org X-Gm-Message-State: AFuF++moszK4fA0s/TGnZtpck+sbcrR1HKxRexbSLRwcsVO1cXL0tcK1 vy6+sdpRm0DRehZvdX9KPlPaYOYsiAOobCN2v0PHJoXBJZFSP82cGRj1VKxBUoWf5Q== X-Gm-Gg: AYBFou0Xv8ndjFEQk0VpahNSwyWdBdGObWv90ligHuBdKUJEqcaH30CpLLDHBgf0qZs lMSvK5jQ/FU89CxOlPZBfMFjOfGV6IVA9kn+hWQcbt/exoLyTHVi2NUMiJIYRBNK/87eOCC/bAz MYWfM4WbbgNxWkBsdPdqj+YaDUGqWSGrJzx3P8Vw+Ubyl7KT6cQCfBPOIRqUCRsefJ9Uhk2CADl ewFl6XWaB830MP7V3Nn14dnHWaj95lehLPrSj9BtQcmbnXn7Nv46UnkRvGu/jHRpWZanytbFDim L3qrmII8addQ8jxJO0eHD6XXhD1sElr0c1JM4yYhiODEWVaN8f0qydEB6pUfPBDaYW926nXYUPP m8BgR7kgcOoRVZ5HE/OjdlBnmOLi1iCgKPXzqcp+lzJmDBBvNYUSUudxf3yPAvC231rCqdGzlfm Psrntb/mXtHZ0FT+ntM3Upn4u0OfdOD8zZ86yjVz6X9Ad9SqkjR2Ard6gA17bXI+W3Uu29rJOca 4fpG+k9A2f5llbJNtYBKqMtjn/JNmVPzgvphdMhSnqCpsosuPWc X-Received: by 2002:a17:90b:2884:b0:398:e86b:ce14 with SMTP id 98e67ed59e1d1-39b262ab44emr32170153a91.20.1788778684370; Mon, 07 Sep 2026 03:58:04 -0700 (PDT) Received: from tigeriii.tok.corp.google.com ([2a00:79e0:2031:6:7fc7:d8d5:4877:bc3f]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39b51eb40e6sm10343714a91.16.2026.09.07.03.58.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Sep 2026 03:58:03 -0700 (PDT) From: Sergey Senozhatsky To: Andrew Morton Cc: Minchan Kim , Yosry Ahmed , Nhat Pham , linux-kernel@vger.kernel.org, linux-mm@kvack.org, Sergey Senozhatsky Subject: [PATCH 1/2] zram: convert to SG-list zsmalloc object read API Date: Mon, 7 Sep 2026 19:57:28 +0900 Message-ID: <20260907105739.1793316-2-senozhatsky@chromium.org> X-Mailer: git-send-email 2.55.0.979.g7e5102b832-goog In-Reply-To: <20260907105739.1793316-1-senozhatsky@chromium.org> References: <20260907105739.1793316-1-senozhatsky@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" zram remains the last user of old zsmalloc object read API, that performed linearisation on the zsmalloc side. There is a new SG-list API, that has a bunch of benefits. Switch zram to SG-list zsmalloc object read API. Signed-off-by: Sergey Senozhatsky --- drivers/block/zram/zcomp.c | 23 ++++++++++++-- drivers/block/zram/zcomp.h | 4 ++- drivers/block/zram/zram_drv.c | 56 ++++++++++++++++++++--------------- 3 files changed, 55 insertions(+), 28 deletions(-) diff --git a/drivers/block/zram/zcomp.c b/drivers/block/zram/zcomp.c index 974c4691887e..028e2f0f587e 100644 --- a/drivers/block/zram/zcomp.c +++ b/drivers/block/zram/zcomp.c @@ -7,6 +7,8 @@ #include #include #include +#include +#include #include #include =20 @@ -158,17 +160,32 @@ int zcomp_compress(struct zcomp *comp, struct zcomp_s= trm *zstrm, } =20 int zcomp_decompress(struct zcomp *comp, struct zcomp_strm *zstrm, - const void *src, unsigned int src_len, void *dst) + struct scatterlist *sg, unsigned int src_len, void *dst) { struct zcomp_req req =3D { - .src =3D src, .dst =3D dst, .src_len =3D src_len, .dst_len =3D PAGE_SIZE, }; + void *src =3D NULL; + int ret; =20 might_sleep(); - return comp->ops->decompress(comp->params, &zstrm->ctx, &req); + + if (sg_is_last(sg)) { + /* the object is contained within one page, read it in-place */ + src =3D kmap_local_page(sg_page(sg)); + req.src =3D src + sg->offset; + } else { + /* the object spans two pages, linearize it into local copy */ + sg_copy_to_buffer(sg, 2, zstrm->local_copy, src_len); + req.src =3D zstrm->local_copy; + } + + ret =3D comp->ops->decompress(comp->params, &zstrm->ctx, &req); + if (src) + kunmap_local(src); + return ret; } =20 int zcomp_cpu_up_prepare(unsigned int cpu, struct hlist_node *node) diff --git a/drivers/block/zram/zcomp.h b/drivers/block/zram/zcomp.h index 81a0f3f6ff48..f38fd31f9e4e 100644 --- a/drivers/block/zram/zcomp.h +++ b/drivers/block/zram/zcomp.h @@ -5,6 +5,8 @@ =20 #include =20 +struct scatterlist; + #define ZCOMP_PARAM_NOT_SET INT_MIN =20 struct deflate_params { @@ -91,6 +93,6 @@ void zcomp_stream_put(struct zcomp_strm *zstrm); int zcomp_compress(struct zcomp *comp, struct zcomp_strm *zstrm, const void *src, unsigned int *dst_len); int zcomp_decompress(struct zcomp *comp, struct zcomp_strm *zstrm, - const void *src, unsigned int src_len, void *dst); + struct scatterlist *sg, unsigned int src_len, void *dst); =20 #endif /* _ZCOMP_H_ */ diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c index a9b3bb1d3bef..5431b16f2f45 100644 --- a/drivers/block/zram/zram_drv.c +++ b/drivers/block/zram/zram_drv.c @@ -32,6 +32,7 @@ #include #include #include +#include #include #include =20 @@ -1342,9 +1343,9 @@ static int decompress_bdev_page(struct zram *zram, st= ruct page *page, unsigned long index) { struct zcomp_strm *zstrm; + struct scatterlist sg[1]; unsigned int size; int ret, prio; - void *src; =20 slot_lock(zram, index); /* Since slot was unlocked we need to make sure it's still ZRAM_WB */ @@ -1363,13 +1364,18 @@ static int decompress_bdev_page(struct zram *zram, = struct page *page, size =3D get_slot_size(zram, index); prio =3D get_slot_comp_priority(zram, index); =20 + sg_init_table(sg, 1); + sg_set_page(sg, page, size, 0); + zstrm =3D zcomp_stream_get(zram->comps[prio]); - src =3D kmap_local_page(page); - ret =3D zcomp_decompress(zram->comps[prio], zstrm, src, size, + ret =3D zcomp_decompress(zram->comps[prio], zstrm, sg, size, zstrm->local_copy); - if (!ret) - copy_page(src, zstrm->local_copy); - kunmap_local(src); + if (!ret) { + void *dst =3D kmap_local_page(page); + + copy_page(dst, zstrm->local_copy); + kunmap_local(dst); + } zcomp_stream_put(zstrm); slot_unlock(zram, index); =20 @@ -2086,15 +2092,19 @@ static int read_same_filled_page(struct zram *zram,= struct page *page, static int read_incompressible_page(struct zram *zram, struct page *page, unsigned long index) { + struct scatterlist sg[2]; unsigned long handle; void *src, *dst; =20 handle =3D get_slot_handle(zram, index); - src =3D zs_obj_read_begin(zram->mem_pool, handle, PAGE_SIZE, NULL); + zs_obj_read_sg_begin(zram->mem_pool, handle, sg, PAGE_SIZE); + /* an incompressible object never spans two pages */ + src =3D kmap_local_page(sg_page(sg)); dst =3D kmap_local_page(page); copy_page(dst, src); kunmap_local(dst); - zs_obj_read_end(zram->mem_pool, handle, PAGE_SIZE, src); + kunmap_local(src); + zs_obj_read_sg_end(zram->mem_pool, handle); =20 return 0; } @@ -2103,9 +2113,10 @@ static int read_compressed_page(struct zram *zram, s= truct page *page, unsigned long index) { struct zcomp_strm *zstrm; + struct scatterlist sg[2]; unsigned long handle; unsigned int size; - void *src, *dst; + void *dst; int ret, prio; =20 handle =3D get_slot_handle(zram, index); @@ -2113,12 +2124,11 @@ static int read_compressed_page(struct zram *zram, = struct page *page, prio =3D get_slot_comp_priority(zram, index); =20 zstrm =3D zcomp_stream_get(zram->comps[prio]); - src =3D zs_obj_read_begin(zram->mem_pool, handle, size, - zstrm->local_copy); + zs_obj_read_sg_begin(zram->mem_pool, handle, sg, size); dst =3D kmap_local_page(page); - ret =3D zcomp_decompress(zram->comps[prio], zstrm, src, size, dst); + ret =3D zcomp_decompress(zram->comps[prio], zstrm, sg, size, dst); kunmap_local(dst); - zs_obj_read_end(zram->mem_pool, handle, size, src); + zs_obj_read_sg_end(zram->mem_pool, handle); zcomp_stream_put(zstrm); =20 return ret; @@ -2128,25 +2138,23 @@ static int read_compressed_page(struct zram *zram, = struct page *page, static int read_from_zspool_raw(struct zram *zram, struct page *page, unsigned long index) { - struct zcomp_strm *zstrm; + struct scatterlist sg[2]; unsigned long handle; unsigned int size; - void *src; + void *dst; =20 handle =3D get_slot_handle(zram, index); size =3D get_slot_size(zram, index); =20 /* - * We need to get stream just for ->local_copy buffer, in - * case if object spans two physical pages. No decompression - * takes place here, as we read raw compressed data. + * No decompression takes place here, we copy out raw compressed + * data directly into the destination page. */ - zstrm =3D zcomp_stream_get(zram->comps[ZRAM_PRIMARY_COMP]); - src =3D zs_obj_read_begin(zram->mem_pool, handle, size, - zstrm->local_copy); - memcpy_to_page(page, 0, src, size); - zs_obj_read_end(zram->mem_pool, handle, size, src); - zcomp_stream_put(zstrm); + zs_obj_read_sg_begin(zram->mem_pool, handle, sg, size); + dst =3D kmap_local_page(page); + sg_copy_to_buffer(sg, sg_nents(sg), dst, size); + kunmap_local(dst); + zs_obj_read_sg_end(zram->mem_pool, handle); =20 memzero_page(page, size, PAGE_SIZE - size); =20 --=20 2.55.0.979.g7e5102b832-goog From nobody Fri Sep 25 23:54:32 2026 Received: from mail-pj1-f41.google.com (mail-pj1-f41.google.com [209.85.216.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 701D8486BBA for ; Mon, 7 Sep 2026 10:58:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788778696; cv=none; b=jYVVyIL4aYkYp4atEULENjOjGaCwoApcMA5/uE4xJCvAJLV55i/WO5KTfiJkAm5xh/uCwPU3zEaHt/vtXym+b9PLRKa4pyHMWGeH16QYHxBZptIyPEom0TSljlcmGKIBtlYt0FO7Gih03yQ3IEBFwHVLTq88EM6kxzOXbVVTCsE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788778696; c=relaxed/simple; bh=nvRqfcTNrhKWsgYEYqserFC6aFy/Ypxd/ECdksDw0KQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=uA3ln2a0kyFfuEI34UsNRluJwh+DCrtdWPpfQP6JLhQorXrzA+M+PgO364ccw44v0q8HiQwpvKSx5XbiO7pYoqqNJkauyYtc/pTWHiNq7ZiLFy9Vi+nV2aE4+OEhV35gB18P4mlr7Ul6OpVNAX4ADRDe3mS00AmTpzzxDE/BhsY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=ImEf6mle; arc=none smtp.client-ip=209.85.216.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="ImEf6mle" Received: by mail-pj1-f41.google.com with SMTP id 98e67ed59e1d1-38ec1402b05so3114543a91.2 for ; Mon, 07 Sep 2026 03:58:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1788778695; x=1789383495; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Y1AN/04P+M2MfSUIh9oyME08cOW6o5tz/4VT3PS1ydI=; b=ImEf6mleRfoRs7G7Qp9RzPadxnMuARp5ySbJs+LfCs+Yeao1WVPXUMyHRqq16mJY4M TSIkg+AQQ5iBXQDAlt0QIr6m6xijElJonvMrUaZOVjDD7LEvgtfjDOG6/hwug20yVJnf rY+ehCPIbtwRlAUYzs+vYvwMfOSU+QB1S4qD8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788778695; x=1789383495; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=Y1AN/04P+M2MfSUIh9oyME08cOW6o5tz/4VT3PS1ydI=; b=BhdiHv0SnOiFtlvcmA4AjgdeJiFJVCIqtq5Q2sVai5rYaUVzOh3jHcR6pva4fJL9LH xEREkf5RQugPY3LuZxCfcp/4Y4W9/bMGN89ZSFqXq7qoAEUcTr7brOjC7Z5/JT8rkFkd A/NAzAQ2BHy8UmV3nuPMKb7PA5n4yH3KIS9xz3i2NSknobyMq9+OH2VfJIF1P3EiiXlY JdNRaerUcDu0MnZ8/Q2TE3mhcEYYH2zUzL0H5bk13SOibkHfcmVaEk3wnbGWyoNLGJFl WFlQ1y00FdgzOlNhUfsjzmaRC01eQNatKUdfEOj90dwnF1yZeTfWhWp60rawc43YMM+B JmtQ== X-Forwarded-Encrypted: i=1; AKwUvBzw6Mihty5aoTzHh7IbhK3ZJdkxr/83oBDb35ouL8LtDqHeo9v4EjqRgF2HqCQ64HmW5Oolh9REx7vokrY=@vger.kernel.org X-Gm-Message-State: AFuF++mmLJXLalJAg0sFBlGJJ5i94cjuPXj01ofJm382Utw5Rj5PujE0 nWm29t1KaLuXlRmxb7UZ2x1C5NnmNlAFataoUG8FuDYeQ7PB/7lD/Y/6eVaFkepc1g== X-Gm-Gg: AYBFou3vpLnuxIfS36fXTxeZDMbo9F8irAK9Dz+Y+s6L2AzrD4cK7sUAIVxsshY5po+ UZDZPhk/Hj8wup06IO8LkU9yJ9+7zpjouF6Jn32pS+8cfXsjS8xpoi0lGlsHzxo77OoYC7YXzO2 X7akuehTeudnNO7nUM4n28B0GKdaYqJRAzeSC8JQFWamTHz7w19e8NE9IUY7O0+IG8mp1+rH2lL GJOLLaVurQfvhtvPMgSpYviCi8EzRq0xgoobAptEUR5R1hp6AYDwLqQSyqn4EPT10cTCezAdBwd 4Ts8odVZgklRMcVjA40mPgLDDURCzoMVnl5fXcT6JK4F4DiX3rmYX58CMMgJsIYmUabaCgjDa0t uWCp92obh3vCs7Z8TQ1p5A25HpK1z4eAN162wa7/UPgk72UTrBdt/RYu3f7xhK4/Ai41ReRArlc IUanXFwC0b4sutw+Czr/3Zqk0A06mEfGe6cpkK3jDfusOXyahQs5JA4DL930oLy5ekI9h2cheiW yDViQZ9I8WOUQ1Dfaw57wO909h8g0OXFy+HHfhJTr2+8jS2zjgXzjFcRDKRKuk= X-Received: by 2002:a17:90b:4fca:b0:38e:5b59:c2ff with SMTP id 98e67ed59e1d1-39b260dd278mr33380803a91.3.1788778694774; Mon, 07 Sep 2026 03:58:14 -0700 (PDT) Received: from tigeriii.tok.corp.google.com ([2a00:79e0:2031:6:7fc7:d8d5:4877:bc3f]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39b51eb40e6sm10343714a91.16.2026.09.07.03.58.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Sep 2026 03:58:14 -0700 (PDT) From: Sergey Senozhatsky To: Andrew Morton Cc: Minchan Kim , Yosry Ahmed , Nhat Pham , linux-kernel@vger.kernel.org, linux-mm@kvack.org, Sergey Senozhatsky Subject: [PATCH 2/2] zsmalloc: remove old object read API Date: Mon, 7 Sep 2026 19:57:29 +0900 Message-ID: <20260907105739.1793316-3-senozhatsky@chromium.org> X-Mailer: git-send-email 2.55.0.979.g7e5102b832-goog In-Reply-To: <20260907105739.1793316-1-senozhatsky@chromium.org> References: <20260907105739.1793316-1-senozhatsky@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" There are no users left of the old API, all have switched to SG-list object read API. Remove it. Signed-off-by: Sergey Senozhatsky --- include/linux/zsmalloc.h | 4 --- mm/zsmalloc.c | 77 ---------------------------------------- 2 files changed, 81 deletions(-) diff --git a/include/linux/zsmalloc.h b/include/linux/zsmalloc.h index 478410c880b1..5b7298a5026b 100644 --- a/include/linux/zsmalloc.h +++ b/include/linux/zsmalloc.h @@ -40,10 +40,6 @@ unsigned int zs_lookup_class_index(struct zs_pool *pool,= unsigned int size); =20 void zs_pool_stats(struct zs_pool *pool, struct zs_pool_stats *stats); =20 -void *zs_obj_read_begin(struct zs_pool *pool, unsigned long handle, - size_t mem_len, void *local_copy); -void zs_obj_read_end(struct zs_pool *pool, unsigned long handle, - size_t mem_len, void *handle_mem); void zs_obj_read_sg_begin(struct zs_pool *pool, unsigned long handle, struct scatterlist *sg, size_t mem_len); void zs_obj_read_sg_end(struct zs_pool *pool, unsigned long handle); diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index 825022a7a328..11be37c43171 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -1134,83 +1134,6 @@ unsigned long zs_get_total_pages(struct zs_pool *poo= l) } EXPORT_SYMBOL_GPL(zs_get_total_pages); =20 -void *zs_obj_read_begin(struct zs_pool *pool, unsigned long handle, - size_t mem_len, void *local_copy) -{ - struct zspage *zspage; - struct zpdesc *zpdesc; - unsigned long obj, off; - unsigned int obj_idx; - struct size_class *class; - void *addr; - - /* Guarantee we can get zspage from handle safely */ - read_lock(&pool->lock); - obj =3D handle_to_obj(handle); - obj_to_location(obj, &zpdesc, &obj_idx); - zspage =3D get_zspage(zpdesc); - - /* Make sure migration doesn't move any pages in this zspage */ - zspage_read_lock(zspage); - read_unlock(&pool->lock); - - class =3D zspage_class(pool, zspage); - off =3D offset_in_page(class->size * obj_idx); - - if (!ZsHugePage(zspage)) - off +=3D ZS_HANDLE_SIZE; - - if (off + mem_len <=3D PAGE_SIZE) { - /* this object is contained entirely within a page */ - addr =3D kmap_local_zpdesc(zpdesc); - addr +=3D off; - } else { - size_t sizes[2]; - - /* this object spans two pages */ - sizes[0] =3D PAGE_SIZE - off; - sizes[1] =3D mem_len - sizes[0]; - addr =3D local_copy; - - memcpy_from_page(addr, zpdesc_page(zpdesc), - off, sizes[0]); - zpdesc =3D get_next_zpdesc(zpdesc); - memcpy_from_page(addr + sizes[0], - zpdesc_page(zpdesc), - 0, sizes[1]); - } - - return addr; -} -EXPORT_SYMBOL_GPL(zs_obj_read_begin); - -void zs_obj_read_end(struct zs_pool *pool, unsigned long handle, - size_t mem_len, void *handle_mem) -{ - struct zspage *zspage; - struct zpdesc *zpdesc; - unsigned long obj, off; - unsigned int obj_idx; - struct size_class *class; - - obj =3D handle_to_obj(handle); - obj_to_location(obj, &zpdesc, &obj_idx); - zspage =3D get_zspage(zpdesc); - class =3D zspage_class(pool, zspage); - off =3D offset_in_page(class->size * obj_idx); - - if (!ZsHugePage(zspage)) - off +=3D ZS_HANDLE_SIZE; - - if (off + mem_len <=3D PAGE_SIZE) { - handle_mem -=3D off; - kunmap_local(handle_mem); - } - - zspage_read_unlock(zspage); -} -EXPORT_SYMBOL_GPL(zs_obj_read_end); - void zs_obj_read_sg_begin(struct zs_pool *pool, unsigned long handle, struct scatterlist *sg, size_t mem_len) { --=20 2.55.0.979.g7e5102b832-goog