Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp2726906imm; Mon, 24 Sep 2018 08:58:48 -0700 (PDT) X-Google-Smtp-Source: ACcGV62MTmC9lBbToBsHGSA6ytKOfy0V5p1ZM+5f2BKtGhnisex+hkL3k8qlmMGfE8LngSbz1cS8 X-Received: by 2002:a63:4384:: with SMTP id q126-v6mr10147713pga.142.1537804728720; Mon, 24 Sep 2018 08:58:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1537804728; cv=none; d=google.com; s=arc-20160816; b=PIHhNGnv+MS4P2WpgyqbyCtlfdqISY72K1XllvYYeRLjY+HyHBGhdEIqhqcpqeBAde lWITS037rxEyONGYvmBaF8l7r5pOEyBT1oiVaYFd9SYiitY6s8wXheJqM4X6NSOauoxZ ixahsczFrDJdSOORzr+kf0kb1KW9XCw5MXgyChS/M/RFIJR5PJ+fyFnMkus4b//7OqrC 5b9efVX+g+o1uOY6vfXMdqwN2nPQWMYAgJ1P0yLWPIbQlsHCpaLOUKROqqn0rSopKk/7 6VBUcHA/jCk+hK8GQQH0AwIkZu5yT/gdLsDpARLcdH5vBoW/o6fWgk+p1JLzLTiHj2pk ZdKg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:subject:cc:to:from:date :dkim-signature; bh=DX6rTJ0P0f3icnTttKpQ6SjAx2eqre7JFlPIUgZayKc=; b=ausCa49G1sHcC+W0nfy6iudy7kHE2g9dIUCTn+RYLwcrkLL2Xdrgdh6eOXVfv0rZES 1hWJf+y24i0W87cPpT06B7uS3rO6Zfc78sCzCLVtAc+JH/RsSLfiSYN8qJjjeTTBh14k JenUQl7flJCxXPZ4n0/8pAkBXgMGKjJZ/AAR/ErCB3MNNLEZNFUAq6cEV/m+Ed00nG16 muukl0AZvM1kVFzOudi2veZL+Xg132aWJG2QJeN+/LpJdHSDPutoAJD05LGZf3T648E4 2XhiyMqKv9hm2SX/Wu1evckDTp1nVS/+PlBfkyoZXBg/MRx2ZKGE8NYXEmC1IR5D1o69 gCiA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=sssD5hjw; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e9-v6si34981610pfg.87.2018.09.24.08.58.33; Mon, 24 Sep 2018 08:58:48 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=sssD5hjw; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730422AbeIXWAP (ORCPT + 99 others); Mon, 24 Sep 2018 18:00:15 -0400 Received: from mail-pl1-f195.google.com ([209.85.214.195]:41661 "EHLO mail-pl1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728280AbeIXWAP (ORCPT ); Mon, 24 Sep 2018 18:00:15 -0400 Received: by mail-pl1-f195.google.com with SMTP id a7-v6so158629pla.8 for ; Mon, 24 Sep 2018 08:57:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:from:to:cc:subject:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=DX6rTJ0P0f3icnTttKpQ6SjAx2eqre7JFlPIUgZayKc=; b=sssD5hjwnq1zvW/a/ogAYpWbvPZeLNOZcosCEiuTEZskzN99+TH+FrkpLNbqMciihL lQXZm5UlmB8izlMdoZwafLsBJj+fHEiwbpFmWnvwp6wgtxETYt0uhWQRjkAGtbCovrU4 RPnGbDwr2KwIjJlkhEpkUVtAwCKcHAXMFgf1B4lK5Nurq5VVli941K8z1IgHd/jGN6Wz OqmCcltHOzjvL1Ie+IgF7mhngA2Z1kCbfWEwbxENqnCB0YbEDpIEE5siHtWCNnyfjkiQ gnEW/mICKx2+T7Mqm9jVlbnyU2Kcq22YDzMxNfYNjsL5PpBqGMpqxz93P3ya0fD5h7t1 2I1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=DX6rTJ0P0f3icnTttKpQ6SjAx2eqre7JFlPIUgZayKc=; b=ck6pvz4Auxh1KEn8VHPS+PXJGNBAC4N8YSmg4moKL87Dl1CpwPE4v8bMujm+hoRAPB 2XHSt5FF/1S2mNLEN6prSs6R+eXaTTpG/FO+y5CK5v3sg628AFUI/6iMfODYbsP7aey2 3fOGLKvPc+BLo+nhGfKqY4uj/TXyWizTeOMxFekLBUQgavs2objywV50EKIzUAUMUzob +hI1lcBRJm//Y+5ByCzAg0dXGQHh6PRN7A3FBbAGUmI25+oGzIwUEjEv9h2JnKeBC1iu tQbxds0J1N4I4hWoSC3+f0VMRwycfC2ityhvu2OHLd00NW61OjXZGBr6Dd1a+YSqTEWf IdRg== X-Gm-Message-State: ABuFfoj+vBSE14FTIR+YqqT9HoosAH+WBo/qECJJjOibym1aaoqbcHmX 5Hw70hmZj2AEsPaoeFdV7HzPPv9uV9A= X-Received: by 2002:a17:902:b7c3:: with SMTP id v3-v6mr10169526plz.182.1537804645322; Mon, 24 Sep 2018 08:57:25 -0700 (PDT) Received: from gnomeregan.cam.corp.google.com ([2620:15c:6:14:ad22:1cbb:d8fa:7d55]) by smtp.gmail.com with ESMTPSA id p4-v6sm52332755pfd.65.2018.09.24.08.57.24 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 24 Sep 2018 08:57:25 -0700 (PDT) Date: Mon, 24 Sep 2018 11:57:21 -0400 From: Barret Rhoden To: Dan Williams Cc: linux-nvdimm@lists.01.org, hch@lst.de, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, jack@suse.cz, ross.zwisler@linux.intel.com Subject: Re: [PATCH v5 07/11] filesystem-dax: Introduce dax_lock_mapping_entry() Message-ID: <20180924115721.75893931@gnomeregan.cam.corp.google.com> In-Reply-To: <153074046078.27838.5465590228767136915.stgit@dwillia2-desk3.amr.corp.intel.com> References: <153074042316.27838.17319837331947007626.stgit@dwillia2-desk3.amr.corp.intel.com> <153074046078.27838.5465590228767136915.stgit@dwillia2-desk3.amr.corp.intel.com> X-Mailer: Claws Mail 3.16.0 (GTK+ 2.24.31; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Dan - On 2018-07-04 at 14:41 Dan Williams wrote: [snip] > diff --git a/fs/dax.c b/fs/dax.c > index 4de11ed463ce..57ec272038da 100644 > --- a/fs/dax.c > +++ b/fs/dax.c [snip] > +bool dax_lock_mapping_entry(struct page *page) > +{ > + pgoff_t index; > + struct inode *inode; > + bool did_lock = false; > + void *entry = NULL, **slot; > + struct address_space *mapping; > + > + rcu_read_lock(); > + for (;;) { > + mapping = READ_ONCE(page->mapping); > + > + if (!dax_mapping(mapping)) > + break; > + > + /* > + * In the device-dax case there's no need to lock, a > + * struct dev_pagemap pin is sufficient to keep the > + * inode alive, and we assume we have dev_pagemap pin > + * otherwise we would not have a valid pfn_to_page() > + * translation. > + */ > + inode = mapping->host; > + if (S_ISCHR(inode->i_mode)) { > + did_lock = true; > + break; > + } > + > + xa_lock_irq(&mapping->i_pages); > + if (mapping != page->mapping) { > + xa_unlock_irq(&mapping->i_pages); > + continue; > + } > + index = page->index; > + > + entry = __get_unlocked_mapping_entry(mapping, index, &slot, > + entry_wait_revalidate); > + if (!entry) { > + xa_unlock_irq(&mapping->i_pages); > + break; > + } else if (IS_ERR(entry)) { > + WARN_ON_ONCE(PTR_ERR(entry) != -EAGAIN); > + continue; In the IS_ERR case, do you need to xa_unlock the mapping? It looks like you'll deadlock the next time around the loop. > + } > + lock_slot(mapping, slot); > + did_lock = true; > + xa_unlock_irq(&mapping->i_pages); > + break; > + } > + rcu_read_unlock(); > + > + return did_lock; > +}