Received: by 2002:a05:6a10:17d3:0:0:0:0 with SMTP id hz19csp3548140pxb; Wed, 14 Apr 2021 08:01:04 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyOhnuxZEyXZI9Ia1FIIHj4qZEzmA9pDWQIIhWk0SBs4b5sYcJA2kZzW4On8nCGbUs2Et3z X-Received: by 2002:a05:6402:280c:: with SMTP id h12mr40518262ede.332.1618412464622; Wed, 14 Apr 2021 08:01:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1618412464; cv=none; d=google.com; s=arc-20160816; b=BA9RKPDge3fNXGMt9CDvFTCvqORYQ+Sdfqx7fA0IONlaWaHMGVp5ZtBAOpB62J/HWZ PpfgDRvXo1VuQCrl2C1wXnCHUufOlF5Q0eacfhd4B6GsepeL1WbrwpyLe0lAWhplZCwe 8h4FV3ZrLbxDJB2u2b0zYhj/dUoKs+dvm3x9jV8MgMGfXgpO2h6BZueEKGbXcwygxxv2 TDeRhiN3a5MdOENV+Ew3S0mdqdmndz+IYTEe7iqd0qRpKggwcQ0f82ZawdqJNHT4PR1R VPR+O0QtSlI5CAgx31n7q9j1J22QiVymYCN/0c4ixC6o/WfkFA0ua3pPX1E006NDTy5n 80uw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to :mime-version:user-agent:date:message-id:from:references:cc:to :subject; bh=kE7CTTKXy52CxcU7xyZDAn3nSpPL9Q1uytWuaGCwHWY=; b=E+nIW4oQee3nPIh3EP4yrkOvBGXEE1anSija0prxqb2AmBz1+6d6rEr0PDyGF4I+/O x4IWXFBkhAjTcmV+LHdzYYDBfKuusAT+jJ6bcrQdhx+C0ovrQRcdVJlYcMmVFBfc8bo/ heebZkSJyxQ3lb2JtmRvBYW2g3UCBIYUAXbD/p8gZLU2iY6mRPIOPR/u8/3Xf1OwOPbE BrP+1EXRvz60xcpfAPL4kOEByMNhh+SKRLHt+JJiBqyou5eSA1q21ycCIOKj3uM5fejJ +BEQjR58a0KnJldVdSJc37deuRCf3xqMp4BREKJmEOG9ZfV0h+LhwUVsMRZeByju862+ JpQw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alibaba.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id b21si12519356eds.152.2021.04.14.08.00.36; Wed, 14 Apr 2021 08:01:04 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alibaba.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1348500AbhDNJWu (ORCPT + 99 others); Wed, 14 Apr 2021 05:22:50 -0400 Received: from out4436.biz.mail.alibaba.com ([47.88.44.36]:1060 "EHLO out4436.biz.mail.alibaba.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230247AbhDNJWq (ORCPT ); Wed, 14 Apr 2021 05:22:46 -0400 X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R751e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=e01e04423;MF=baolin.wang@linux.alibaba.com;NM=1;PH=DS;RN=4;SR=0;TI=SMTPD_---0UVXq55I_1618392139; Received: from 30.21.164.69(mailfrom:baolin.wang@linux.alibaba.com fp:SMTPD_---0UVXq55I_1618392139) by smtp.aliyun-inc.com(127.0.0.1); Wed, 14 Apr 2021 17:22:19 +0800 Subject: Re: [PATCH v2 1/2] fuse: Fix possible deadlock when writing back dirty pages To: Miklos Szeredi Cc: Peng Tao , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org References: <807bb470f90bae5dcd80a29020d38f6b5dd6ef8e.1616826872.git.baolin.wang@linux.alibaba.com> From: Baolin Wang Message-ID: <0fdb09fa-9b0f-1115-2540-6016ce664370@linux.alibaba.com> Date: Wed, 14 Apr 2021 17:22:34 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.9.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 在 2021/4/14 17:02, Miklos Szeredi 写道: > On Wed, Apr 14, 2021 at 10:42 AM Baolin Wang > wrote: > >> Sorry I missed this patch before, and I've tested this patch, it seems >> can solve the deadlock issue I met before. > > Great, thanks for testing. > >> But look at this patch in detail, I think this patch only reduced the >> deadlock window, but did not remove the possible deadlock scenario >> completely like I explained in the commit log. >> >> Since the fuse_fill_write_pages() can still lock the partitail page in >> your patch, and will be wait for the partitail page waritehack is >> completed if writeback is set in fuse_send_write_pages(). >> >> But at the same time, a writeback worker thread may be waiting for >> trying to lock the partitail page to write a bunch of dirty pages by >> fuse_writepages(). > > As you say, fuse_fill_write_pages() will lock a partial page. This > page cannot become dirty, only after being read completely, which > first requires the page lock. So dirtying this page can only happen > after the writeback of the fragment was completed. What I mean is the writeback worker had looked up the dirty pages in write_cache_pages() and stored them into a temporary pagevec, then try to lock dirty page one by one and write them. For example, suppose it looked up 2 dirty pages (named page 1 and page 2), and writed down page 1 by fuse_writepages_fill(), unlocked page 1. Then try to lock page 2. At the same time, suppose the fuse_fill_write_pages() will write the same page 1 and partitail page 2, and it will lock partital page 2 and wait for the page 1's writeback is completed. But page 1's writeback can not be completed, since the writeback worker is waiting for locking page 2, which was already locked by fuse_fill_write_pages(). Does that make sense to you? Or I missed something else?