From mboxrd@z Thu Jan 1 00:00:00 1970 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 A62C0C6FA8E for ; Sun, 26 Feb 2023 04:10:03 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 361566B0072; Sat, 25 Feb 2023 23:10:03 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 311696B0073; Sat, 25 Feb 2023 23:10:03 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1B1CA6B0074; Sat, 25 Feb 2023 23:10:03 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 075296B0072 for ; Sat, 25 Feb 2023 23:10:03 -0500 (EST) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 9DAF84058F for ; Sun, 26 Feb 2023 04:10:02 +0000 (UTC) X-FDA: 80508115044.30.7B88EE9 Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) by imf08.hostedemail.com (Postfix) with ESMTP id B54C8160014 for ; Sun, 26 Feb 2023 04:10:00 +0000 (UTC) Authentication-Results: imf08.hostedemail.com; dkim=pass header.d=chromium.org header.s=google header.b=iDqG1LSb; spf=pass (imf08.hostedemail.com: domain of senozhatsky@chromium.org designates 209.85.214.181 as permitted sender) smtp.mailfrom=senozhatsky@chromium.org; dmarc=pass (policy=none) header.from=chromium.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1677384600; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=oG85UY3exoCKYxhLzbBvh8IvJHkJe4lKut/jy7cNC+A=; b=M5tFU03QsPtNlK1Zzw4iRi5fL0xJiCwtx4S70x8ZdFM8SUtgeaWsOBkILkEJFkomTZW5oW +GHu498Posc5Tq53+FLJ9EZFtqpq8+1NLAi693xIB1rBmyoVBmFenNqL+agXMqlbdduFf4 qIVTkx6rfsc9G6GcE83Bz1hw5T1n0XA= ARC-Authentication-Results: i=1; imf08.hostedemail.com; dkim=pass header.d=chromium.org header.s=google header.b=iDqG1LSb; spf=pass (imf08.hostedemail.com: domain of senozhatsky@chromium.org designates 209.85.214.181 as permitted sender) smtp.mailfrom=senozhatsky@chromium.org; dmarc=pass (policy=none) header.from=chromium.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1677384600; a=rsa-sha256; cv=none; b=2Jnlg3CkH4cZccUkV8PWIH3z7nTaBhTzLvj5p4FAnvTxderl/Y49xOHCc6CNSniXZ3Clo9 JA4jDJATBO6CGm+xkJ+jInuIDJRp5K2PGm0UOpgeqUwwjzgT1nkSCtmwPUhKcsRpLQ6kTc zQiKGApf1I/zZrUesgjxkPQgIj2mEOg= Received: by mail-pl1-f181.google.com with SMTP id ky4so3543278plb.3 for ; Sat, 25 Feb 2023 20:10:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=oG85UY3exoCKYxhLzbBvh8IvJHkJe4lKut/jy7cNC+A=; b=iDqG1LSbkkz6go3LRUm4otXKpZiZ3jN9DR9C5Bt5Mo/PPbZK0paSq10/j8Ah3emPur xJ/tLB2qVgHbpfYWW1InphQ+P9zTtVJ/IJNYlnj6cJOCz//lVKpIqo3EAsIbeTF2ExT1 WV4lxTF8KNS79dX16PH7IQKqrum0E2FZ/tJ2I= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=oG85UY3exoCKYxhLzbBvh8IvJHkJe4lKut/jy7cNC+A=; b=pZ1pcP006++9IlQI0Cm78Fl9gDX8H8lr9WpSKH0VR2ZKYMraLmMR7E6LwXKQo+7+wr vWg9/EbrZ5foCPxlBdybcheqzIbcwbsl4FudBSSC1kT3Y4738+oy5FY0saUQ/mOJwQMA q8Qg8pwuj4OWwjqAbJHEkLWBMRnEuwbABxsrB+/sOlW9WhM3SZysN0qPbsCpmd3pTxB4 MTj2LZ7wKWfhhPy5AbMdznJil1qtAhdxj0fk1tBzWg4wXn630iHe6LSakAEA9LFJjJDH DFLtaBgqTWlaIKTyOSL0HrdqG5g2VG9nwGgqLy7OnWd4wzDhv3vLQoi8ucSSIRM/WJzW 9UWA== X-Gm-Message-State: AO0yUKVs56ue5eh23bBl7snljQQ4hS3qA9g5fpD9HOnvibFIgocue2oz JV6V9M0FmzcIrSqcHytrToDshpbPOpjC2Cj6 X-Google-Smtp-Source: AK7set9HK0gGLeLYDgcMVVNSfKMfoyjNCjjQhFkeXNMa/fJjha1Ui9KvxJcfBZPqs6ZED3JnLhcsZA== X-Received: by 2002:a17:902:e884:b0:198:dd3f:2847 with SMTP id w4-20020a170902e88400b00198dd3f2847mr27274559plg.21.1677384599577; Sat, 25 Feb 2023 20:09:59 -0800 (PST) Received: from google.com (KD124209188001.ppp-bb.dion.ne.jp. [124.209.188.1]) by smtp.gmail.com with ESMTPSA id w11-20020a1709029a8b00b0019a7363e752sm1930345plp.276.2023.02.25.20.09.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 25 Feb 2023 20:09:59 -0800 (PST) Date: Sun, 26 Feb 2023 13:09:55 +0900 From: Sergey Senozhatsky To: Minchan Kim Cc: Sergey Senozhatsky , Andrew Morton , Yosry Ahmed , linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: Re: [PATCHv2 4/6] zsmalloc: rework compaction algorithm Message-ID: References: <20230223030451.543162-1-senozhatsky@chromium.org> <20230223030451.543162-5-senozhatsky@chromium.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: B54C8160014 X-Rspam-User: X-Stat-Signature: jn5k78jmd9yuwgppp4akqmzx7nkjpzm8 X-HE-Tag: 1677384600-90354 X-HE-Meta: U2FsdGVkX18s4Xnd+nvUQ4IPf0frOXwC3OEcCRa3cXQ2mk80ByE5gwL+m1UrNiD9N1WxdAef2IJSqqWeZPClpRhJ4p7EMjDCAFFVVjbBHWJioPjJPTzYNHfuMt2Lq9O7EUUFog5fZ5rsWlpKdkKGCw3f83hQKFyjyxnrwKzQV9JBNny+QlDpuojAU34Nhd6z9BlakGea1R/HrpC8D6JESWwWJjWlvqb+WaX5QuosGi9nUz7PySOAuVSaeRQADMGhfejqtQIXGoO4O0fw68A7GJft9X5xyflJc3wmYQgidKYCJQA8nT438MGGcI1J1GKdqzv4iId5FOzHGQzvtAvcowVKy3CUog86JQXWzwVN8sDOhoW8Cb6nJl4vit9dQ3ME/EExBInQWi7ev/rF+Hp3NJEb5A8CwMg/grzJiFlVo6C8IR3y+OebS6fCwH67br2MuKAS3eWaid4yxYxhPvWuDSaNK6qGnDtKdFdPWl8aLTSvOuRYFiIIN+gdXbWsAXMw705w8adOQRBx03gWcEK+vkUwTDYzWMqXrIjbLj/01Mkc1ZH4XlJwQpWR+wT+sTJYGZ1ttnpXlWPPdw4S2XWPGIjf/4/Ker6dCSgiQS4QlC8dccEoYnDUIKbJZNNhnihVm7NMAelZaKqDzwOeTGY9nBD3Miv8ZLsoz49brTj6L9CTqhWN8N/i/DYARe5ngLCaCbvlXw6hllcHUze3OCTtmmiUmdCAMg0aBRGsnHeafG36I24BnIl3/zkHZizER+YIJIGogpU9+dABPa1KcLuEOaMOOojjhTLh0DRkr8OKZL7cAl3TsSWE2d+UPIS6lOI5emeTNdn91kZwePyC+6XwmdQJ+y00NpRgEZehDWpAPbxBtmMbLG6IfbHra8Q1KafYI9zvRq7RMnFw+/O3WpgavmKUJ9UU4wm0IF1cqWjCELtYzCscSp57vJVjEE+nOjE9aiKzzS6pZXQJXbYM0ew 2nf+jbsk QSt3jh0+eBkXySPr8zQQLySqiQkY0hmhq1Viw1Fin+5HGr0p3k1QfST1SuFyKfHjaky8HXmXRDAFBPluF+WC5TRRaQKOaC4n2K4UQZgRRQ9aHMoW5xVjmGkxXb+//xfoJ/OksAsweel3mYPWOvZj46TJA6REwpKihERjDP6zRwXfO9QA0iN+vlf7OV4/xT+tlginMJFjXM6dLPsMan+lSEPYqMp0cyf19ahUNWbFPLBUaSJo59d9o1qeIvBETmm+HSOljoBkV6OM1Jxg1AGfyT+z09q0+gkGpEPRngIZOq+GhZfEjGt87E/dYsWVFK32O+CeB3ubB4/y1EsA= 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: On (23/02/23 15:46), Minchan Kim wrote: > > spin_lock(&pool->lock); > > - while ((src_zspage = isolate_src_zspage(class))) { > > - /* protect someone accessing the zspage(i.e., zs_map_object) */ > > - migrate_write_lock(src_zspage); > > - > > - if (!zs_can_compact(class)) > > - break; > > - > > - cc.obj_idx = 0; > > - cc.s_page = get_first_page(src_zspage); > > - > > - while ((dst_zspage = isolate_dst_zspage(class))) { > > - migrate_write_lock_nested(dst_zspage); > > - > > + while (1) { > > Hmm, I preferred the old loop structure. Did you see any problem > to keep old code structure? Unfortunately we cannot keep the current structure as it will create conflicting/reverse locking patterns. What we currently have is that source page is isolated first and its migration lock is the outter lock: migrate_write_lock src Destination page is isolated second and its migration lock is nested: migrate_write_lock_nested dst Since destination page lock is nested we always need to unlock it before we unlock the outer lock (source page migrate lock). If we keep destination locked (nested lock, which will be a bug) then on the next iteration we will isolate a new source page and try to migrate_write_lock it except that now source page migration lock is in fact nested which we take under another nested lock (which is another bug). Hence we need to flip the structure: we isolate destination page, its lock is outter lock, we keep it locked as long as we need and source page lock becomes nested. I think that's the simplest way.