Received: by 10.223.185.116 with SMTP id b49csp4137757wrg; Mon, 19 Feb 2018 11:51:13 -0800 (PST) X-Google-Smtp-Source: AH8x224y2CcXBz7my1NSoD/ixqiYeyKZ16qFxmwkON/uZ4IrfhrbJV9JSL7A6Ohl7DIJrwF1mWHp X-Received: by 2002:a17:902:8d8a:: with SMTP id v10-v6mr3745616plo.164.1519069873203; Mon, 19 Feb 2018 11:51:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519069873; cv=none; d=google.com; s=arc-20160816; b=M6ZMxjhfqzBZGBNXu0OgYDolL1H7g8Ek2LscmRFb7W6w0do5Gte27jlvQd8THHzTzq rvyg9VODGJgS7OdWl0fexcxepiXLZmNWufXK6StJ0Lgy4HGDFPMD6tHTlk9u5kiaMKzu sOhk/jqXvh5opHUIcsibUtaLl/0uvd/QXgH0BLsX8WyO82OF+IQ6SF4fYey8qAdxxdVp LeF7rmZghwvbTEvdLClgt0YiDfAC6z9l5fG/IUs5S9svf7KJlxEsMOV9qbvJAqfvZyFX PlNtJ4eR3OTKH+/XLaKH5BqcqfTwKDWZrnjHYtSMghsvYyrSqyuJZMh6Fvk9qsv7LQ8A ETtg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=7lIJpHGuUi0hFIkiKLvbjYUyh5RbJU18jcZ2Qtq2fHI=; b=xdJJRTFNIZFuNfhFBS7KKBQqbld4RQ8T4+K3fTb+2V/C4hKnhtN4o1JXstRWoChTKV 9M9b/93EnR3p1+iMHVtv+DGKOqZkkJVOK3aqIHGtrqTOUHsbWkQi3weDHXw7SO4dC6Ku 2flz7erNtlduRj1n5hLbKRU//juwkiPc6fT+OwHlZs44JMph1U9vPALDALMXaH9UWIqC FNM1C+Oq1qG9VHRs9X2svsCZ71+yhoyNZOG7Sm/dn1bIv4ECJ0pvs/YwlBrUNCOAuDVK IUCfxzjT4YnxKsVEjkE4i0bmHt4Yjab0RrWdV7Qzy39C+QEonV57U4rhsGzanWvbRtNy GiMQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@infradead.org header.s=bombadil.20170209 header.b=eQ3dazH2; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j3-v6si33511pld.676.2018.02.19.11.50.59; Mon, 19 Feb 2018 11:51:13 -0800 (PST) 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=fail header.i=@infradead.org header.s=bombadil.20170209 header.b=eQ3dazH2; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932167AbeBSTtp (ORCPT + 99 others); Mon, 19 Feb 2018 14:49:45 -0500 Received: from bombadil.infradead.org ([198.137.202.133]:44990 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753808AbeBSTq1 (ORCPT ); Mon, 19 Feb 2018 14:46:27 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20170209; h=References:In-Reply-To:Message-Id: Date:Subject:Cc:To:From:Sender:Reply-To:MIME-Version:Content-Type: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=7lIJpHGuUi0hFIkiKLvbjYUyh5RbJU18jcZ2Qtq2fHI=; b=eQ3dazH20GoukvNupOx1LyPrS X1B7t1gp8DyP1UNJXHgLobSoS0JNDpkYrxFFYrcnrJXNXyeqOsXiKVuR3ye/MjUxldg37Gi/wZIG1 aKftE9gxJ2e5APJ9qDypxWDByZXa1UruBbh9W9RlcKDyVUH0SScLTXUUsEi7qmdHk0TF5T4i5/Epp mGdO1XeCKIWIpqlgKOyT0bjJOAU7phf3YPMQPxnWE/D+vmy84rSGHSavyW+aLSQ027YvLSquxHT1Y N+Rg9HGcuuwBNkhPi78PL2SvLtrEK9pOq8Sb2lLt7AMxpyCA+cLIluRa6YNtoLG6661xYwMTOI8cx iHkjomRZw==; Received: from willy by bombadil.infradead.org with local (Exim 4.89 #1 (Red Hat Linux)) id 1enrOL-0001uZ-TY; Mon, 19 Feb 2018 19:46:25 +0000 From: Matthew Wilcox To: Andrew Morton Cc: Matthew Wilcox , linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org Subject: [PATCH v7 47/61] shmem: Convert shmem_tag_pins to XArray Date: Mon, 19 Feb 2018 11:45:42 -0800 Message-Id: <20180219194556.6575-48-willy@infradead.org> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180219194556.6575-1-willy@infradead.org> References: <20180219194556.6575-1-willy@infradead.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Matthew Wilcox Simplify the locking by taking the spinlock while we walk the tree on the assumption that many acquires and releases of the lock will be worse than holding the lock for a (potentially) long time. We could replicate the same locking behaviour with the xarray, but would have to be careful that the xa_node wasn't RCU-freed under us before we took the lock. Signed-off-by: Matthew Wilcox --- mm/shmem.c | 39 ++++++++++++++++----------------------- 1 file changed, 16 insertions(+), 23 deletions(-) diff --git a/mm/shmem.c b/mm/shmem.c index 0179f9aa7d0e..5b70fbdec605 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -2601,35 +2601,28 @@ static loff_t shmem_file_llseek(struct file *file, loff_t offset, int whence) static void shmem_tag_pins(struct address_space *mapping) { - struct radix_tree_iter iter; - void **slot; - pgoff_t start; + XA_STATE(xas, &mapping->pages, 0); struct page *page; + unsigned int tagged = 0; lru_add_drain(); - start = 0; - rcu_read_lock(); - radix_tree_for_each_slot(slot, &mapping->pages, &iter, start) { - page = radix_tree_deref_slot(slot); - if (!page || radix_tree_exception(page)) { - if (radix_tree_deref_retry(page)) { - slot = radix_tree_iter_retry(&iter); - continue; - } - } else if (page_count(page) - page_mapcount(page) > 1) { - xa_lock_irq(&mapping->pages); - radix_tree_tag_set(&mapping->pages, iter.index, - SHMEM_TAG_PINNED); - xa_unlock_irq(&mapping->pages); - } + xas_lock_irq(&xas); + xas_for_each(&xas, page, ULONG_MAX) { + if (xa_is_value(page)) + continue; + if (page_count(page) - page_mapcount(page) > 1) + xas_set_tag(&xas, SHMEM_TAG_PINNED); - if (need_resched()) { - slot = radix_tree_iter_resume(slot, &iter); - cond_resched_rcu(); - } + if (++tagged % XA_CHECK_SCHED) + continue; + + xas_pause(&xas); + xas_unlock_irq(&xas); + cond_resched(); + xas_lock_irq(&xas); } - rcu_read_unlock(); + xas_unlock_irq(&xas); } /* -- 2.16.1