Received: by 10.192.245.15 with SMTP id i15csp1141076imn; Sun, 11 Mar 2018 04:57:32 -0700 (PDT) X-Google-Smtp-Source: AG47ELtJEIBaRbnOVWSbGtp1euGTM3RWpUP/pI/79FNBxA7+SruCPVIQXjmeB7WptCfEIPMxwmN6 X-Received: by 2002:a17:902:7290:: with SMTP id d16-v6mr4682539pll.31.1520769452128; Sun, 11 Mar 2018 04:57:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1520769452; cv=none; d=google.com; s=arc-20160816; b=Uae1EtGM3hckFyjNuvSKE1d0s72IC+TIjb5DnKK+epaZZUt3DLvj7AH/f3EQwS54wq 2/XrY5hcL2Kywm2FrfRtbs+nmTt9n7IHafOVH9IxynzJmqFFZkW4WP17SuAAnAsNwyKT fl2KzeLoO+bKIzOWDgZ1hTX3kBqiTcVImIFEa5uVonQO2+BAYciDzH3mBOH+X647RC3r UVCEr9+MlfgRVJ8WlHeHP2hqRi5LYyEbtJ7fdSvD+I8Of481130IEX8LWMl14I18sU+G MSndljBWbXwZNWKsdiRHbKKiTOKQZ6droOAa1R8A1KQACjWjjx9SdQBO/OanKESk6ggl XZZA== 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 :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:dkim-signature :arc-authentication-results; bh=i3cY9mfRcZK/rSH+ZOBljh7cNz9kr7Qp5xIdH/fSm3Y=; b=XPDV7zW9AkWmmS1KId7bj5FojlTp4tdbGGt/HYpOFTrKcquc1zVH0DHx0CtcGsQYEA nmMKVjY/Y4SdCpkmu6hr99XFdJ78yWSKq6ni63Gf/CQCGjGWhXcc0nD0ixMNk5CiVS7b aLJDyK3MeSH9D5TmSbYTSwML1CJg96WZHSaZrSpIknF2F0YVC7pwG9d1vjFlFRLAd+H6 B8xO3WvLMFkWCtDUJPw94WoxnV9mfXV9v/6SqOC0WhXNOLvf1+YjO3aI06NUlYMDQn7l rlat1LFuKb9+Gejodyr94xCTVujTxV6rojG/5IeEJ+WlGN77kUTNDH6xOtQ4D3vRrgHE GbXQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=TyXCQnZA; 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=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o63si4102340pfg.347.2018.03.11.04.57.05; Sun, 11 Mar 2018 04:57:32 -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=@gmail.com header.s=20161025 header.b=TyXCQnZA; 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=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932171AbeCKLzi (ORCPT + 99 others); Sun, 11 Mar 2018 07:55:38 -0400 Received: from mail-wr0-f196.google.com ([209.85.128.196]:36368 "EHLO mail-wr0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932126AbeCKLzg (ORCPT ); Sun, 11 Mar 2018 07:55:36 -0400 Received: by mail-wr0-f196.google.com with SMTP id d10so505512wrf.3; Sun, 11 Mar 2018 04:55:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=i3cY9mfRcZK/rSH+ZOBljh7cNz9kr7Qp5xIdH/fSm3Y=; b=TyXCQnZAgO8zGgFCXBd+YOmhD/8qIC6oXcB/ParEhShU0kc8wuu0oAEuLP/pwNukEC 2en7tbK3KYVc8IsuCmkXmOCC9jNI4AVYwSfOVwMyymqj9WR+EGmYV7nNnXyNFl/xd24/ lCBur7V8sOSA0Mbw7IHk8SuhHX46yFHMicGLz8aE+oktGWweoVTV90NIGpy4yG4z/MO1 Z3SA/oPAGmE9X7/IQ3WCq9XKjbQcZUl6nUM53HqrJgdmTlhv8mWWDS0SZTry8CY2omS8 a0fun97XMqsLAXF7fYNRsQ1b0IlcNwazH0PdVJTqdrtbavL5Yq9Gg4Vmw15RiactfRHK sRfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=i3cY9mfRcZK/rSH+ZOBljh7cNz9kr7Qp5xIdH/fSm3Y=; b=putLnY8z9u3mzeFzpH5N6c6buzj2E6F+tGaDmk9SNCuTBeZzo1tQWp8p4edsjCBOuA earrE2eMOyAfZMYkdkwNu3r2HxWe0Gy1nm4kuYSrFbX3Vv8pC3s2fiqZmW6er5JMZ45p o4+pPh9Kd/LDQCU0zIYn9ttmkI+8lwW5m+zjeOSkIDl5x64jcgeh+sEBauFAfuvN06V3 nftp//zHCJt0HJdHZHUNMvWguncYIDOYqGeX1QgoMrMBALVvhI9MEFbaEau8Vt9I0y0m V6fOB87Jzhc8vMu7Kla/KPbhqYXBwr4rALnttWXr5bK/K+pA4GZltK3ubluUNo0UGB5w WoEQ== X-Gm-Message-State: AElRT7H+fmwVanF+Nm8HD7QX3GGpnL6PtNWvm2eyygCPcQqYDjd1MBSZ 8H/7F6XqGIn4qAMQkSWybxg= X-Received: by 10.223.199.137 with SMTP id l9mr3823417wrg.6.1520769335397; Sun, 11 Mar 2018 04:55:35 -0700 (PDT) Received: from [10.20.1.223] (ivokamhome.ddns.nbis.net. [87.120.136.31]) by smtp.gmail.com with ESMTPSA id i127sm4425897wmf.33.2018.03.11.04.55.33 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 11 Mar 2018 04:55:34 -0700 (PDT) Subject: Re: [RFC v2 14/83] Add range node kmem cache. To: Andiry Xu , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-nvdimm@lists.01.org Cc: dan.j.williams@intel.com, andy.rudoff@intel.com, coughlan@redhat.com, swanson@cs.ucsd.edu, david@fromorbit.com, jack@suse.com, swhiteho@redhat.com, miklos@szeredi.hu, andiry.xu@gmail.com, Andiry Xu References: <1520705944-6723-1-git-send-email-jix024@eng.ucsd.edu> <1520705944-6723-15-git-send-email-jix024@eng.ucsd.edu> From: Nikolay Borisov Message-ID: <73dae166-2e71-7fc9-7985-89cc44b38bf6@gmail.com> Date: Sun, 11 Mar 2018 13:55:32 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0 MIME-Version: 1.0 In-Reply-To: <1520705944-6723-15-git-send-email-jix024@eng.ucsd.edu> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 10.03.2018 20:17, Andiry Xu wrote: > From: Andiry Xu > > Range node specifies a range of [start, end]. and is managed by a red-black tree. > NOVA uses range node to manage NVM allocator and inodes being used. > > Signed-off-by: Andiry Xu > --- > fs/nova/nova.h | 8 ++++++++ > fs/nova/super.c | 45 ++++++++++++++++++++++++++++++++++++++++++--- > fs/nova/super.h | 2 ++ > 3 files changed, 52 insertions(+), 3 deletions(-) > > diff --git a/fs/nova/nova.h b/fs/nova/nova.h > index ba7ffca..e0e85fb 100644 > --- a/fs/nova/nova.h > +++ b/fs/nova/nova.h > @@ -301,6 +301,14 @@ static inline u64 nova_get_epoch_id(struct super_block *sb) > } > > #include "inode.h" > + > +/* A node in the RB tree representing a range of pages */ > +struct nova_range_node { > + struct rb_node node; > + unsigned long range_low; > + unsigned long range_high; > +}; > + > #include "bbuild.h" > > /* ====================================================== */ > diff --git a/fs/nova/super.c b/fs/nova/super.c > index f41cc04..aec1cd3 100644 > --- a/fs/nova/super.c > +++ b/fs/nova/super.c > @@ -52,6 +52,7 @@ MODULE_PARM_DESC(nova_dbgmask, "Control debugging output"); > static struct super_operations nova_sops; > > static struct kmem_cache *nova_inode_cachep; > +static struct kmem_cache *nova_range_node_cachep; > > > /* FIXME: should the following variable be one per NOVA instance? */ > @@ -686,6 +687,20 @@ static void nova_put_super(struct super_block *sb) > sb->s_fs_info = NULL; > } > > +inline void nova_free_range_node(struct nova_range_node *node) > +{ > + kmem_cache_free(nova_range_node_cachep, node); > +} > + > +inline struct nova_range_node *nova_alloc_range_node(struct super_block *sb) > +{ > + struct nova_range_node *p; > + > + p = (struct nova_range_node *) nit: needless cast > + kmem_cache_zalloc(nova_range_node_cachep, GFP_NOFS); > + return p; > +} > + > static struct inode *nova_alloc_inode(struct super_block *sb) > { > struct nova_inode_info *vi; > @@ -719,6 +734,17 @@ static void init_once(void *foo) > inode_init_once(&vi->vfs_inode); > } > > +static int __init init_rangenode_cache(void) > +{ > + nova_range_node_cachep = kmem_cache_create("nova_range_node_cache", > + sizeof(struct nova_range_node), > + 0, (SLAB_RECLAIM_ACCOUNT | > + SLAB_MEM_SPREAD), NULL); > + if (nova_range_node_cachep == NULL) > + return -ENOMEM; > + return 0; > +} > + > static int __init init_inodecache(void) > { > nova_inode_cachep = kmem_cache_create("nova_inode_cache", > @@ -740,6 +766,11 @@ static void destroy_inodecache(void) > kmem_cache_destroy(nova_inode_cachep); > } > > +static void destroy_rangenode_cache(void) > +{ > + kmem_cache_destroy(nova_range_node_cachep); > +} > + > > /* > * the super block writes are all done "on the fly", so the > @@ -781,20 +812,27 @@ static int __init init_nova_fs(void) > nova_info("Arch new instructions support: CLWB %s\n", > support_clwb ? "YES" : "NO"); > > - rc = init_inodecache(); > + rc = init_rangenode_cache(); > if (rc) > goto out; > > - rc = register_filesystem(&nova_fs_type); > + rc = init_inodecache(); > if (rc) > goto out1; > > + rc = register_filesystem(&nova_fs_type); > + if (rc) > + goto out2; > + > out: > NOVA_END_TIMING(init_t, init_time); > return rc; > > -out1: > +out2: > destroy_inodecache(); > + > +out1: > + destroy_rangenode_cache(); > goto out; > } > > @@ -802,6 +840,7 @@ static void __exit exit_nova_fs(void) > { > unregister_filesystem(&nova_fs_type); > destroy_inodecache(); > + destroy_rangenode_cache(); > } > > MODULE_AUTHOR("Andiry Xu "); > diff --git a/fs/nova/super.h b/fs/nova/super.h > index cb53908..b478080 100644 > --- a/fs/nova/super.h > +++ b/fs/nova/super.h > @@ -145,5 +145,7 @@ static inline struct nova_super_block *nova_get_super(struct super_block *sb) > } > > extern void nova_error_mng(struct super_block *sb, const char *fmt, ...); > +extern struct nova_range_node *nova_alloc_range_node(struct super_block *sb); > +extern void nova_free_range_node(struct nova_range_node *node); > > #endif >