Received: by 2002:a05:6358:d09b:b0:dc:cd0c:909e with SMTP id jc27csp685023rwb; Thu, 15 Dec 2022 00:41:38 -0800 (PST) X-Google-Smtp-Source: AA0mqf4qLd7a6H2TZJ19I7QkGbaHfjC4LxRQntoWAbguW3NSufzZSfyL2hfIUcwV4yECI8JB4WfF X-Received: by 2002:a17:90b:1e53:b0:219:f624:2979 with SMTP id pi19-20020a17090b1e5300b00219f6242979mr28123489pjb.26.1671093697862; Thu, 15 Dec 2022 00:41:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1671093697; cv=none; d=google.com; s=arc-20160816; b=cu4CyifohHnv0ojjyqK5NMxKcCUGlUz7aoLkLNwy+BO2mFwZA5Bjj9d9rdW8UUE4q6 RCwfC5So5W2c4vn6hbzyUd2uNWK2LZsxsdaqiKjDBQSG8dEJkwreKK+oIdrTPz5j6RY/ iPybb13cA+/t2A173Ahnjww+UWHB2e8uDfA7jnWCU9cmOfOU5J+X1PBl9X5YfnkDL+k2 oCpJ8wQkSVUewf89l/ocjMlQIlKzG2e+aK9ImdV4WhsbeSWMIO99wPF1viIQ16YukGlD WdlfUKMpr2z3OzdjrVoIVbX8+vLfbRgt9a22FBXIwyDE/6y/DpJfAKXE8d/P+rPGyYH3 l+KQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-language:content-transfer-encoding :in-reply-to:mime-version:user-agent:date:message-id:references:cc :to:subject:from; bh=85p3DblDoQ9RBavbRDv57pJ9FtJTvvTD9JkoS/iQNAY=; b=P5W/2kqyDfCY2unQUI4+1gZ3ZjfKHztjHifhNWDJSDe7CuFpK0ZW5/2cbQRXl/URUs tv7aaWwitrxOHQ/C9paQ+M8/kVpCR4i5/SoaKn0NqhL74absIAH9T9KmjcW0Uij1wtoj AO0HeQ7jRwIYuW7KRi9v9YFS+JLvG2csiAY/fprwxGBiMnnutXmWGDReAvSXRFeWZYEY N3SG7Aw1R5Xk74ffS+HxJZqbx4kYtQTO5liy5uqeYQYqumlmghSNTgH1Z81PP3jF6Rcb t02t2Yd6lriDSLSIOnQ0YXBrts52q8CE008q4nUwK7iOiib3la2kp9OdtjMvFLK+nzn7 pa2Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id mv20-20020a17090b199400b0021945f60e1asi4190363pjb.61.2022.12.15.00.41.24; Thu, 15 Dec 2022 00:41:37 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229513AbiLOI2l (ORCPT + 69 others); Thu, 15 Dec 2022 03:28:41 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34078 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229459AbiLOI2j (ORCPT ); Thu, 15 Dec 2022 03:28:39 -0500 Received: from dggsgout11.his.huawei.com (dggsgout11.his.huawei.com [45.249.212.51]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E72275FB8 for ; Thu, 15 Dec 2022 00:28:38 -0800 (PST) Received: from mail02.huawei.com (unknown [172.30.67.153]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTP id 4NXlk93YQyz4f3mVZ for ; Thu, 15 Dec 2022 16:28:33 +0800 (CST) Received: from [10.174.176.117] (unknown [10.174.176.117]) by APP4 (Coremail) with SMTP id gCh0CgB359Sw2ppjBKcRCQ--.35114S2; Thu, 15 Dec 2022 16:28:36 +0800 (CST) From: Hou Tao Subject: Re: [PATCH] fscache: Use wake_up_var() to wake up pending volume acquisition To: David Howells Cc: linux-cachefs@redhat.com, Jeff Layton , linux-erofs@lists.ozlabs.org, linux-kernel@vger.kernel.org, "houtao1@huawei.com" , Jingbo Xu References: <42b33792-50e9-77d7-4d3e-ac5ce1adeda6@huaweicloud.com> <20221128031929.3918348-1-houtao@huaweicloud.com> <2308529.1670585211@warthog.procyon.org.uk> Message-ID: Date: Thu, 15 Dec 2022 16:28:32 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.6.0 MIME-Version: 1.0 In-Reply-To: <2308529.1670585211@warthog.procyon.org.uk> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Content-Language: en-US X-CM-TRANSID: gCh0CgB359Sw2ppjBKcRCQ--.35114S2 X-Coremail-Antispam: 1UD129KBjvJXoWxJr1UWF4UCryDZrWxAw4kCrg_yoW8Zw1fp3 yj9Fyftws7X3Wqv3yDJw18uF4SgFn0yw4ru3yrCFZrC345KryfuF1fGayDCay8urs5Wr15 tF4UG398CFyqqaDanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUyKb4IE77IF4wAFF20E14v26r4j6ryUM7CY07I20VC2zVCF04k2 6cxKx2IYs7xG6rWj6s0DM7CIcVAFz4kK6r1j6r18M28lY4IEw2IIxxk0rwA2F7IY1VAKz4 vEj48ve4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_Ar0_tr1l84ACjcxK6xIIjxv20xvEc7Cj xVAFwI0_Cr0_Gr1UM28EF7xvwVC2z280aVAFwI0_GcCE3s1l84ACjcxK6I8E87Iv6xkF7I 0E14v26rxl6s0DM2AIxVAIcxkEcVAq07x20xvEncxIr21l5I8CrVACY4xI64kE6c02F40E x7xfMcIj6xIIjxv20xvE14v26r1j6r18McIj6I8E87Iv67AKxVWUJVW8JwAm72CE4IkC6x 0Yz7v_Jr0_Gr1lF7xvr2IY64vIr41lc7I2V7IY0VAS07AlzVAYIcxG8wCF04k20xvY0x0E wIxGrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E74 80Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_JF0_Jw1lIxkGc2Ij64vIr41lIxAIcVC0 I7IYx2IY67AKxVWUJVWUCwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Jr0_Gr1lIxAIcVCF04 k26cxKx2IYs7xG6rW3Jr0E3s1lIxAIcVC2z280aVAFwI0_Jr0_Gr1lIxAIcVC2z280aVCY 1x0267AKxVWUJVW8JbIYCTnIWIevJa73UjIFyTuYvjxUrR6zUUUUU X-CM-SenderInfo: xkrx3t3r6k3tpzhluzxrxghudrp/ X-CFilter-Loop: Reflected X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,NICE_REPLY_A, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi David, Sorry for the late reply. Busy for other business in work. On 12/9/2022 7:26 PM, David Howells wrote: > Hou Tao wrote: > >>> clear_bit(FSCACHE_VOLUME_ACQUIRE_PENDING, &cursor->flags); > Maybe this should be clear_bit_unlock() instead. I'm not sure about that. In my understanding, clear_bit_unlock() is usually paired with test_and_set_bit_lock() to implement bit lock to make sure the writes before clear_bit_unlock() are visible to read access in concurrent process, right ? But now the caller of fscache_wake_pending_volume() only modify cursor->flags and nothing else, so I don't think it is needed here. If its intended purpose is to provide the missing smp_mb() for wake_up_bit(), I also don't think it is right, because the release barrier provided by clear_bit_unlock() doesn't guarantee the order of cursor->flags and wq_head, so I think one extra smp_mb_after_atomic() is also needed after clear_bit(FSCACHE_VOLUME_ACQUIRE_PENDING, &cursor->flags). If the above reasoning makes sense to you, I think we also need to add smp_mb_after_atomic() for wake_up_bit() in fscache_create_volume_work(). > And I wonder if: > > set_bit(FSCACHE_VOLUME_ACQUIRE_PENDING, &candidate->flags); > > in fscache_hash_volume() needs a barrier before it. I also don't get it. The barrier is used to guarantee the order between cursor->flags and candidate->flags, right ? But the write and read of cursor->flags and candidate->flags are protected by the same hash lock. > >>> - wake_up_bit(&cursor->flags, FSCACHE_VOLUME_ACQUIRE_PENDING); >>> + /* >>> + * Paired with barrier in wait_var_event(). Check >>> + * waitqueue_active() and wake_up_var() for details. >>> + */ >>> + smp_mb__after_atomic(); >>> + wake_up_var(&cursor->flags); > That doesn't seem right. > > wake_up_bit() is more selective, so should be preferred to wake_up_var(). OK. Will update fscache_wait_on_volume_collision() to use wait_on_bit() accordingly. > David > > > .