From patchwork Wed Sep 25 17:10:20 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kairui Song X-Patchwork-Id: 13812341 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7D662CCF9E8 for ; Wed, 25 Sep 2024 17:10:52 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 162746B0082; Wed, 25 Sep 2024 13:10:52 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 011436B00BE; Wed, 25 Sep 2024 13:10:51 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D94AF6B00BF; Wed, 25 Sep 2024 13:10:51 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id B54C16B00BD for ; Wed, 25 Sep 2024 13:10:51 -0400 (EDT) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 68A061A04E5 for ; Wed, 25 Sep 2024 17:10:51 +0000 (UTC) X-FDA: 82603900302.09.1CE1022 Received: from mail-pf1-f181.google.com (mail-pf1-f181.google.com [209.85.210.181]) by imf27.hostedemail.com (Postfix) with ESMTP id 85E184000E for ; Wed, 25 Sep 2024 17:10:49 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=Inj0Spkm; spf=pass (imf27.hostedemail.com: domain of ryncsn@gmail.com designates 209.85.210.181 as permitted sender) smtp.mailfrom=ryncsn@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1727284129; h=from:from:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=tHDnLKuWCJO8lD59bH5pDYUmAjiCtEIbfbAcM4YyCyY=; b=UnSwJzTCqN+u2HEg90ETbnN677CzwFN+XgNaHTVNWf7F1zl5nOYGG8J5BaG944SSe2CtT6 4f7hTMkDXiPbPzphWF6NdbhOnN5GQYP5ENEViLbf2/SLTb8tiDkI4vRAEI90swGB3xOsij C1HW228zQZlz8jOP/MGXJnq/vvoWb8M= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1727284129; a=rsa-sha256; cv=none; b=HaV3K03czNxiXEuW7dZpJO7xA2nAC8FASA9gXrbraGgrBT0hYuiA7dIOU6gIUhv5fPxd4B JVOuEgyHUx+Udh87gUjPbIQvH9arL2pAM8MA1ypVJlhR94OkHsH0zyPx4MlMtJNBJ1GjuE 9qm/WzkDByNEQ1GbUl2Jgy70towBP2A= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=Inj0Spkm; spf=pass (imf27.hostedemail.com: domain of ryncsn@gmail.com designates 209.85.210.181 as permitted sender) smtp.mailfrom=ryncsn@gmail.com; dmarc=pass (policy=none) header.from=gmail.com Received: by mail-pf1-f181.google.com with SMTP id d2e1a72fcca58-71798a15ce5so953969b3a.0 for ; Wed, 25 Sep 2024 10:10:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1727284248; x=1727889048; darn=kvack.org; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=tHDnLKuWCJO8lD59bH5pDYUmAjiCtEIbfbAcM4YyCyY=; b=Inj0SpkmJtneLD/uWfj+uEfGo4xD7eKy2UJezl1YXlV/klQzcPVjL8/Y4dFQrYeHpy K01PnpoyFEbaQnFjxppocgSGGu4Qru9FVgPognkAMi8wwcRGRWPZO0XuLkegvHwv4DSq rBYdpG59mX1aIrcwPT6vCsQzIEQ2tib007dZX+M0doulDfoHHA/FssvP1Y+XN2/kpf87 Cwi7mQCPfwYJVx4Y64bLPpU0lyyiMhN9Y13UmmSDeAGh/vYdo/1fXK90Srd6Y5K+DVdx akTCu2liICwYpb0ssAaF8CxpjXLlQNLBC5fUKLXkjFiymc1hvDswzzDcaBiSJeJ6A0Br xgYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1727284248; x=1727889048; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=tHDnLKuWCJO8lD59bH5pDYUmAjiCtEIbfbAcM4YyCyY=; b=uVH9WcXyDk+inqtm/aErdutm3Zz/Wb/NJR6zjgvIFaMRNHdEv3JOGR8PemLguqGumq euuT+vkqhUtNsVuuLTPxQELoM4mJ/PPmWhRGjKIPMgsRrttyXvAUTPEIlD+4WRdbml/f Jw7KawLqCTSTr4EZGv+4lTv9Cp08wak9WmB7Wg7/CEt/UGYKuhdr7mqmQ3do+jyuUJPj Hg8oEMMc3PUEMJc3hQuVANQEZnBG9ZFaWzmVIdpPwp8/T0Hglx1t98n2acW6ZVGdJzv3 ZO3XImRR+pp8jz1M0yrp0yd5+k3eGO/42gUy9vi+otogCEn28Yewzxy1+G/XWfOIHPc8 aq5A== X-Gm-Message-State: AOJu0YxwEJv2I8BcHo0J4DfwEgx8PLwllxthNDLuIeSa4pNNyBRF8r43 1zV+Ffjlj8EdTeRWfPSh3F/QtKT/pUKVAyI53ULh94M6MieghNH27cog6j/Q X-Google-Smtp-Source: AGHT+IHl5TlJGqUV7QZcRMHcoyLSb9layNcgIUW2Mhg5L2SzE46tJMBi/RiISzclYIlyjHoys1XewQ== X-Received: by 2002:a05:6a20:4391:b0:1d2:e793:cc0 with SMTP id adf61e73a8af0-1d4ebe3560dmr487927637.7.1727284247785; Wed, 25 Sep 2024 10:10:47 -0700 (PDT) Received: from KASONG-MC4.tencent.com ([101.32.222.185]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-71b032eb4f7sm2437900b3a.181.2024.09.25.10.10.44 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Wed, 25 Sep 2024 10:10:47 -0700 (PDT) From: Kairui Song To: linux-mm@kvack.org Cc: Andrew Morton , Matthew Wilcox , Johannes Weiner , Roman Gushchin , Waiman Long , Shakeel Butt , Michal Hocko , Chengming Zhou , Qi Zheng , Muchun Song , Kairui Song Subject: [PATCH v2 6/6] mm/list_lru: Simplify the list_lru walk callback function Date: Thu, 26 Sep 2024 01:10:20 +0800 Message-ID: <20240925171020.32142-7-ryncsn@gmail.com> X-Mailer: git-send-email 2.46.1 In-Reply-To: <20240925171020.32142-1-ryncsn@gmail.com> References: <20240925171020.32142-1-ryncsn@gmail.com> Reply-To: Kairui Song MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 85E184000E X-Stat-Signature: 4tkxirppjgixtwb6kb79wac79e9k8jyi X-HE-Tag: 1727284249-310215 X-HE-Meta: U2FsdGVkX19A4Q95CdQVZsQBrCsyhmwHGkGdcGPtvhlQetG6GFBCgrab3Q9kUntpycJL30uhNYRtw+pRbP1QG7RPvQiHSqVrjKow8IFK7hJh7WJi+j2ttjj1knENBdhF10i3n/X+FzsPz0OYgsCtYaxMDFMZ4DaHqS+hAJckgFHtdw/s87gJ3O/b4vfsxHMhfennXCuWc1aXnUZ8aoT41Y8exbYkUwF+gJ1D96oCPd+lLjhhBmLox5luOGb2YuRrQVxPCf5X8bomsShc5RxtnyysCbXjV5ZreXcgxLgkR/OCSUgIcnBLAe7tJKSgqV5kQ3CFYVoqU/hCzf6cgbOxiS1M5+lZv65txxmsmCAJogH+MuApmHMcMD6gq7XiB+zR/vwVeeVSm3MbXzpxZ8fN/zwriCvsfKaotFt/V6gM8KLZFNe0nFFLbxA4VYmRfCEyI7Y+GtEm3g33STc/gBiflg6/bv/uvr8tXpHO4w7iajx3gfNllZI8QdV3tAOuc0k7FRKI9EWg9yPlK48/jJFtgoLqiyMAmWdSdoBfo6g0y3XD29Gv2hy8jpiu09AIH/4ASkZaofwln+oHISG/AcE5t3P5hHyQASIHZpICzH2YfO8m8ZB2JGoCYWEeYrQtZlCmim0qJ8aXDWJFDb1c9wH+68L9anXgqSIZdJoSyO9XgcDl7OU1ZSMQ1K3lbbadpkT8QTiWuoRW7kACYbyb6BSbU5DsyeNm7GJDYzR8+32W2qb3ltT4ulJQZccg2wam84ev9eIDcSPL9P4ZXTcHU2YXcLzTA8tiNFBgJ1ABGBhNKgAPz9rFAjSE2mX59L1PETFrrTz38SCpbfL4w/st+OjAQcUqFokDnTYxgBa4GvFaVxdPBq//v8sia76GDy2vFhg6KzVPXsi4J9jAGsfxiZNuWcnO46/onMNwnMTYRAOgPRiJincyk41UNv8UaEvs8E9G8DazrsWjsOGSr1xxWPu avh8xRWO 1Mh+qp1zaeYQBsPxw5w9MQ2roKjbOLfG/almJR8oc+eXn6fB+Ulsw7YUEv8zDn9ryUojp7doNWnHG1zhBUB8A/JrEIHAKS9UWb4rQiffJsxGpJHCPcZRZPyPL3jJR3zH0g5ikr2NlH9fx++yaPvDzKM4AIt9CD7ULdA9+L4p6fn2aUdByEcWAxCE+Vave3otYT8RBHOqW3BsDGTLHklxB1D+xJrHAK2RVX5CUYFkcEFxU9mbsj80AMoOI3q3Q15DsLTOPkXMihJoc0ymPnVfyTddnYcJxCWKrPoxNOTEbnxHKUSg0HN1EPeBg4RE5fjp85A0tykv/VdlR62HCnoH93bVcnoulFvuXUI4Er9xQZ/v/9xY2oV79cR/ar3qnfFTUScSRpkHHiF34vaqq0R5e9C4rZ197eLZdEN8tdvaJ7INcPt/SJDOUsEU1G0Os2nxyenm9/TzNIjHX6OQdWwM0KJBzXGTnyWkTMVhuok+i3PCWSrlRFCEt6/waUz1XlLfa1z4e4qnw19vEKSPgv2WeUuZNBTwe86e3QqH552Qq+mNoizjAtqjrLWXMSF0UHzlj+CGH X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: Kairui Song Now isolation no longer takes the list_lru global node lock, only use the per-cgroup lock instead. And this lock is inside the list_lru_one being walked, no longer needed to pass the lock explicitly. Signed-off-by: Kairui Song --- drivers/android/binder_alloc.c | 7 +++---- drivers/android/binder_alloc.h | 2 +- fs/dcache.c | 4 ++-- fs/gfs2/quota.c | 2 +- fs/inode.c | 4 ++-- fs/nfs/nfs42xattr.c | 4 ++-- fs/nfsd/filecache.c | 5 +---- fs/xfs/xfs_buf.c | 2 -- fs/xfs/xfs_qm.c | 5 ++--- include/linux/list_lru.h | 2 +- mm/list_lru.c | 2 +- mm/workingset.c | 15 +++++++-------- mm/zswap.c | 4 ++-- 13 files changed, 25 insertions(+), 33 deletions(-) diff --git a/drivers/android/binder_alloc.c b/drivers/android/binder_alloc.c index 86bbe40f4bcd..a738e7745865 100644 --- a/drivers/android/binder_alloc.c +++ b/drivers/android/binder_alloc.c @@ -1047,7 +1047,7 @@ void binder_alloc_vma_close(struct binder_alloc *alloc) /** * binder_alloc_free_page() - shrinker callback to free pages * @item: item to free - * @lock: lock protecting the item + * @lru: list_lru instance of the item * @cb_arg: callback argument * * Called from list_lru_walk() in binder_shrink_scan() to free @@ -1055,9 +1055,8 @@ void binder_alloc_vma_close(struct binder_alloc *alloc) */ enum lru_status binder_alloc_free_page(struct list_head *item, struct list_lru_one *lru, - spinlock_t *lock, void *cb_arg) - __must_hold(lock) + __must_hold(&lru->lock) { struct binder_lru_page *page = container_of(item, typeof(*page), lru); struct binder_alloc *alloc = page->alloc; @@ -1092,7 +1091,7 @@ enum lru_status binder_alloc_free_page(struct list_head *item, list_lru_isolate(lru, item); spin_unlock(&alloc->lock); - spin_unlock(lock); + spin_unlock(&lru->lock); if (vma) { trace_binder_unmap_user_start(alloc, index); diff --git a/drivers/android/binder_alloc.h b/drivers/android/binder_alloc.h index 70387234477e..c02c8ebcb466 100644 --- a/drivers/android/binder_alloc.h +++ b/drivers/android/binder_alloc.h @@ -118,7 +118,7 @@ static inline void binder_selftest_alloc(struct binder_alloc *alloc) {} #endif enum lru_status binder_alloc_free_page(struct list_head *item, struct list_lru_one *lru, - spinlock_t *lock, void *cb_arg); + void *cb_arg); struct binder_buffer *binder_alloc_new_buf(struct binder_alloc *alloc, size_t data_size, size_t offsets_size, diff --git a/fs/dcache.c b/fs/dcache.c index 0f6b16ba30d0..d7f6866f5f52 100644 --- a/fs/dcache.c +++ b/fs/dcache.c @@ -1089,7 +1089,7 @@ void shrink_dentry_list(struct list_head *list) } static enum lru_status dentry_lru_isolate(struct list_head *item, - struct list_lru_one *lru, spinlock_t *lru_lock, void *arg) + struct list_lru_one *lru, void *arg) { struct list_head *freeable = arg; struct dentry *dentry = container_of(item, struct dentry, d_lru); @@ -1170,7 +1170,7 @@ long prune_dcache_sb(struct super_block *sb, struct shrink_control *sc) } static enum lru_status dentry_lru_isolate_shrink(struct list_head *item, - struct list_lru_one *lru, spinlock_t *lru_lock, void *arg) + struct list_lru_one *lru, void *arg) { struct list_head *freeable = arg; struct dentry *dentry = container_of(item, struct dentry, d_lru); diff --git a/fs/gfs2/quota.c b/fs/gfs2/quota.c index 2e6bc77f4f81..72b48f6f5561 100644 --- a/fs/gfs2/quota.c +++ b/fs/gfs2/quota.c @@ -149,7 +149,7 @@ static void gfs2_qd_list_dispose(struct list_head *list) static enum lru_status gfs2_qd_isolate(struct list_head *item, - struct list_lru_one *lru, spinlock_t *lru_lock, void *arg) + struct list_lru_one *lru, void *arg) { struct list_head *dispose = arg; struct gfs2_quota_data *qd = diff --git a/fs/inode.c b/fs/inode.c index b95d80cb140b..e88c199111ea 100644 --- a/fs/inode.c +++ b/fs/inode.c @@ -879,7 +879,7 @@ void invalidate_inodes(struct super_block *sb) * with this flag set because they are the inodes that are out of order. */ static enum lru_status inode_lru_isolate(struct list_head *item, - struct list_lru_one *lru, spinlock_t *lru_lock, void *arg) + struct list_lru_one *lru, void *arg) { struct list_head *freeable = arg; struct inode *inode = container_of(item, struct inode, i_lru); @@ -921,7 +921,7 @@ static enum lru_status inode_lru_isolate(struct list_head *item, if (inode_has_buffers(inode) || !mapping_empty(&inode->i_data)) { inode_pin_lru_isolating(inode); spin_unlock(&inode->i_lock); - spin_unlock(lru_lock); + spin_unlock(&lru->lock); if (remove_inode_buffers(inode)) { unsigned long reap; reap = invalidate_mapping_pages(&inode->i_data, 0, -1); diff --git a/fs/nfs/nfs42xattr.c b/fs/nfs/nfs42xattr.c index b6e3d8f77b91..37d79400e5f4 100644 --- a/fs/nfs/nfs42xattr.c +++ b/fs/nfs/nfs42xattr.c @@ -802,7 +802,7 @@ static struct shrinker *nfs4_xattr_large_entry_shrinker; static enum lru_status cache_lru_isolate(struct list_head *item, - struct list_lru_one *lru, spinlock_t *lru_lock, void *arg) + struct list_lru_one *lru, void *arg) { struct list_head *dispose = arg; struct inode *inode; @@ -867,7 +867,7 @@ nfs4_xattr_cache_count(struct shrinker *shrink, struct shrink_control *sc) static enum lru_status entry_lru_isolate(struct list_head *item, - struct list_lru_one *lru, spinlock_t *lru_lock, void *arg) + struct list_lru_one *lru, void *arg) { struct list_head *dispose = arg; struct nfs4_xattr_bucket *bucket; diff --git a/fs/nfsd/filecache.c b/fs/nfsd/filecache.c index 24e8f1fbcebb..18d82e258853 100644 --- a/fs/nfsd/filecache.c +++ b/fs/nfsd/filecache.c @@ -459,7 +459,6 @@ void nfsd_file_net_dispose(struct nfsd_net *nn) * nfsd_file_lru_cb - Examine an entry on the LRU list * @item: LRU entry to examine * @lru: controlling LRU - * @lock: LRU list lock (unused) * @arg: dispose list * * Return values: @@ -469,9 +468,7 @@ void nfsd_file_net_dispose(struct nfsd_net *nn) */ static enum lru_status nfsd_file_lru_cb(struct list_head *item, struct list_lru_one *lru, - spinlock_t *lock, void *arg) - __releases(lock) - __acquires(lock) + void *arg) { struct list_head *head = arg; struct nfsd_file *nf = list_entry(item, struct nfsd_file, nf_lru); diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c index aa4dbda7b536..43b914c1f621 100644 --- a/fs/xfs/xfs_buf.c +++ b/fs/xfs/xfs_buf.c @@ -1857,7 +1857,6 @@ static enum lru_status xfs_buftarg_drain_rele( struct list_head *item, struct list_lru_one *lru, - spinlock_t *lru_lock, void *arg) { @@ -1956,7 +1955,6 @@ static enum lru_status xfs_buftarg_isolate( struct list_head *item, struct list_lru_one *lru, - spinlock_t *lru_lock, void *arg) { struct xfs_buf *bp = container_of(item, struct xfs_buf, b_lru); diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c index 665d26990b78..8413ac368042 100644 --- a/fs/xfs/xfs_qm.c +++ b/fs/xfs/xfs_qm.c @@ -412,9 +412,8 @@ static enum lru_status xfs_qm_dquot_isolate( struct list_head *item, struct list_lru_one *lru, - spinlock_t *lru_lock, void *arg) - __releases(lru_lock) __acquires(lru_lock) + __releases(&lru->lock) __acquires(&lru->lock) { struct xfs_dquot *dqp = container_of(item, struct xfs_dquot, q_lru); @@ -460,7 +459,7 @@ xfs_qm_dquot_isolate( trace_xfs_dqreclaim_dirty(dqp); /* we have to drop the LRU lock to flush the dquot */ - spin_unlock(lru_lock); + spin_unlock(&lru->lock); error = xfs_qm_dqflush(dqp, &bp); if (error) diff --git a/include/linux/list_lru.h b/include/linux/list_lru.h index 10ba9a54d42c..05c166811f6b 100644 --- a/include/linux/list_lru.h +++ b/include/linux/list_lru.h @@ -184,7 +184,7 @@ void list_lru_isolate_move(struct list_lru_one *list, struct list_head *item, struct list_head *head); typedef enum lru_status (*list_lru_walk_cb)(struct list_head *item, - struct list_lru_one *list, spinlock_t *lock, void *cb_arg); + struct list_lru_one *list, void *cb_arg); /** * list_lru_walk_one: walk a @lru, isolating and disposing freeable items. diff --git a/mm/list_lru.c b/mm/list_lru.c index 6d1c187d9019..79c2d21504a2 100644 --- a/mm/list_lru.c +++ b/mm/list_lru.c @@ -295,7 +295,7 @@ __list_lru_walk_one(struct list_lru *lru, int nid, struct mem_cgroup *memcg, break; --*nr_to_walk; - ret = isolate(item, l, &l->lock, cb_arg); + ret = isolate(item, l, cb_arg); switch (ret) { /* * LRU_RETRY and LRU_REMOVED_RETRY will drop the lru lock, diff --git a/mm/workingset.c b/mm/workingset.c index 8c4b6738dcad..4b58ef535a17 100644 --- a/mm/workingset.c +++ b/mm/workingset.c @@ -712,8 +712,7 @@ static unsigned long count_shadow_nodes(struct shrinker *shrinker, static enum lru_status shadow_lru_isolate(struct list_head *item, struct list_lru_one *lru, - spinlock_t *lru_lock, - void *arg) __must_hold(lru_lock) + void *arg) __must_hold(lru->lock) { struct xa_node *node = container_of(item, struct xa_node, private_list); struct address_space *mapping; @@ -722,20 +721,20 @@ static enum lru_status shadow_lru_isolate(struct list_head *item, /* * Page cache insertions and deletions synchronously maintain * the shadow node LRU under the i_pages lock and the - * lru_lock. Because the page cache tree is emptied before - * the inode can be destroyed, holding the lru_lock pins any + * &lru->lock. Because the page cache tree is emptied before + * the inode can be destroyed, holding the &lru->lock pins any * address_space that has nodes on the LRU. * * We can then safely transition to the i_pages lock to * pin only the address_space of the particular node we want - * to reclaim, take the node off-LRU, and drop the lru_lock. + * to reclaim, take the node off-LRU, and drop the &lru->lock. */ mapping = container_of(node->array, struct address_space, i_pages); /* Coming from the list, invert the lock order */ if (!xa_trylock(&mapping->i_pages)) { - spin_unlock_irq(lru_lock); + spin_unlock_irq(&lru->lock); ret = LRU_RETRY; goto out; } @@ -744,7 +743,7 @@ static enum lru_status shadow_lru_isolate(struct list_head *item, if (mapping->host != NULL) { if (!spin_trylock(&mapping->host->i_lock)) { xa_unlock(&mapping->i_pages); - spin_unlock_irq(lru_lock); + spin_unlock_irq(&lru->lock); ret = LRU_RETRY; goto out; } @@ -753,7 +752,7 @@ static enum lru_status shadow_lru_isolate(struct list_head *item, list_lru_isolate(lru, item); __dec_node_page_state(virt_to_page(node), WORKINGSET_NODES); - spin_unlock(lru_lock); + spin_unlock(&lru->lock); /* * The nodes should only contain one or more shadow entries, diff --git a/mm/zswap.c b/mm/zswap.c index cb37a25fd00c..efad4e941e44 100644 --- a/mm/zswap.c +++ b/mm/zswap.c @@ -1096,7 +1096,7 @@ static int zswap_writeback_entry(struct zswap_entry *entry, * for reclaim by this ratio. */ static enum lru_status shrink_memcg_cb(struct list_head *item, struct list_lru_one *l, - spinlock_t *lock, void *arg) + void *arg) { struct zswap_entry *entry = container_of(item, struct zswap_entry, lru); bool *encountered_page_in_swapcache = (bool *)arg; @@ -1152,7 +1152,7 @@ static enum lru_status shrink_memcg_cb(struct list_head *item, struct list_lru_o * It's safe to drop the lock here because we return either * LRU_REMOVED_RETRY or LRU_RETRY. */ - spin_unlock(lock); + spin_unlock(&l->lock); writeback_result = zswap_writeback_entry(entry, swpentry);