Received: by 2002:ad5:4acb:0:0:0:0:0 with SMTP id n11csp3898253imw; Mon, 11 Jul 2022 19:10:21 -0700 (PDT) X-Google-Smtp-Source: AGRyM1uLpJoQenoB4loxfMdki/1VX0YopfXiqr1kwQtYL9XAYhj24QaMbAsIPkAbzKVsFhu+uQmm X-Received: by 2002:a05:6402:3881:b0:43a:691f:8e3b with SMTP id fd1-20020a056402388100b0043a691f8e3bmr28240573edb.217.1657591821771; Mon, 11 Jul 2022 19:10:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1657591821; cv=none; d=google.com; s=arc-20160816; b=SIUq042hWbufco2HU3BaUfctV+azodt2WrCmJsGSZR7yUS4YK+s2mIsAFxBzv/N6VQ rVfSdS0CW4+VLiJOjZwVuEn2YGfbEyhQbyE/ZKHtELSHpnjWHoAFpP62TPwD3+4fl6sF Lxn3A4GHibPrKvZvOo05jlQIXZML6smHHoR8x7ZOXNte9TCBFGprbx00sSWIC2GkQ++V tu1WB58k5tH1Hh3PBCeEZZaTRBw+ALSJiHI36BrFUZ6MgpSS+QI1DErHemGFRkKviySo vJzg4cD4yV6yPhZOxy3l6gNXQkcvdw7D/Ra5TeVb36Akrbx7vqfm0pBcHoIXgOzi7xzw AOyA== 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 :content-language:references:cc:to:subject:from:user-agent :mime-version:date:message-id; bh=3MwnYbDwl1GKaPYc6FJy/Nmmx2SkjcBysp5XGEMWJkE=; b=X86nqo0kNpWlqcM8Z7PeS0Vtj3p8JhuLt0qXAmXishTGCrp3yI8urb/bS4uiX8BYPI Dq2m9VTaIB0d3kxDET6RU/4mVwa1MQCm0+piKTU41nelWY1puLczStzytko3YNXjeS7e OBw7gncOSXIQfuVmhuk5PYSn2UChysZktluv49fV+KLVg9EVVOTk9LJepsO5KbVWjo1X To/oBqPu+H+Naq1sDYNc61DNzhVJ+Xol2OhjF+v2RxKzcAFZKJnuWLM6Lu9lUmYl/eaZ Gq61/3LfHoWbh9WQJC5kD33jJydpoaVzrrDEs2mx0JvQUj3ImQfxlufbH+ExyscxUTnS z4lg== 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 ey4-20020a0564022a0400b0043a2c76581dsi11674279edb.420.2022.07.11.19.09.56; Mon, 11 Jul 2022 19:10:21 -0700 (PDT) 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 S232102AbiGLBwc (ORCPT + 99 others); Mon, 11 Jul 2022 21:52:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37682 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229721AbiGLBwa (ORCPT ); Mon, 11 Jul 2022 21:52:30 -0400 Received: from www262.sakura.ne.jp (www262.sakura.ne.jp [202.181.97.72]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6B1C42AC5D for ; Mon, 11 Jul 2022 18:52:29 -0700 (PDT) Received: from fsav311.sakura.ne.jp (fsav311.sakura.ne.jp [153.120.85.142]) by www262.sakura.ne.jp (8.15.2/8.15.2) with ESMTP id 26C1qRx9011160; Tue, 12 Jul 2022 10:52:27 +0900 (JST) (envelope-from penguin-kernel@I-love.SAKURA.ne.jp) Received: from www262.sakura.ne.jp (202.181.97.72) by fsav311.sakura.ne.jp (F-Secure/fsigk_smtp/550/fsav311.sakura.ne.jp); Tue, 12 Jul 2022 10:52:27 +0900 (JST) X-Virus-Status: clean(F-Secure/fsigk_smtp/550/fsav311.sakura.ne.jp) Received: from [192.168.1.9] (M106072142033.v4.enabler.ne.jp [106.72.142.33]) (authenticated bits=0) by www262.sakura.ne.jp (8.15.2/8.15.2) with ESMTPSA id 26C1qQNS011156 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NO); Tue, 12 Jul 2022 10:52:27 +0900 (JST) (envelope-from penguin-kernel@I-love.SAKURA.ne.jp) Message-ID: <7ad25274-fa10-c5f1-44f4-fe7786169fa1@I-love.SAKURA.ne.jp> Date: Tue, 12 Jul 2022 10:52:22 +0900 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 From: Tetsuo Handa Subject: Re: [PATCH v2 3/4] PM: hibernate: allow wait_for_device_probe() to timeout when resuming from hibernation To: "Rafael J. Wysocki" , Arjan van de Ven Cc: Greg KH , "Rafael J. Wysocki" , Oliver Neukum , Wedson Almeida Filho , Len Brown , Dmitry Vyukov , Linux PM , LKML References: <03096156-3478-db03-c015-28643479116c@I-love.SAKURA.ne.jp> <48d01ce7-e028-c103-ea7f-5a4ea4c8930b@I-love.SAKURA.ne.jp> <2646e8a3-cc9f-c2c5-e4d6-c86de6e1b739@I-love.SAKURA.ne.jp> <601436f2-b13e-6c24-bcfd-29548e288f23@I-love.SAKURA.ne.jp> Content-Language: en-US In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,NICE_REPLY_A, SPF_HELO_NONE,SPF_NONE,T_SCC_BODY_TEXT_LINE 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 On 2022/07/12 3:14, Rafael J. Wysocki wrote: > On Mon, Jul 11, 2022 at 1:21 PM Tetsuo Handa > wrote: >> >> On 2022/07/11 17:12, Greg KH wrote: >>> creating a >>> locking loop like this should be resolved first, >> >> Rafael and Arjan, can we agree with removing wait_for_device_probe() from snapshot_open() ? > > No, we can't. Then, can we defer wait_for_device_probe() till first write()/ioctl() which is called without locks? kernel/power/user.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/kernel/power/user.c b/kernel/power/user.c index a00a728ddfc1..92aecb989c76 100644 --- a/kernel/power/user.c +++ b/kernel/power/user.c @@ -26,6 +26,7 @@ #include "power.h" +static bool need_wait; static struct snapshot_data { struct snapshot_handle handle; @@ -78,7 +79,7 @@ static int snapshot_open(struct inode *inode, struct file *filp) * Resuming. We may need to wait for the image device to * appear. */ - wait_for_device_probe(); + need_wait = true; data->swap = -1; data->mode = O_WRONLY; @@ -168,6 +169,11 @@ static ssize_t snapshot_write(struct file *filp, const char __user *buf, ssize_t res; loff_t pg_offp = *offp & ~PAGE_MASK; + if (need_wait) { + wait_for_device_probe(); + need_wait = false; + } + lock_system_sleep(); data = filp->private_data; @@ -244,6 +250,11 @@ static long snapshot_ioctl(struct file *filp, unsigned int cmd, loff_t size; sector_t offset; + if (need_wait) { + wait_for_device_probe(); + need_wait = false; + } + if (_IOC_TYPE(cmd) != SNAPSHOT_IOC_MAGIC) return -ENOTTY; if (_IOC_NR(cmd) > SNAPSHOT_IOC_MAXNR) -- 2.18.4