Received: by 10.192.245.15 with SMTP id i15csp999409imn; Sat, 10 Mar 2018 18:16:14 -0800 (PST) X-Google-Smtp-Source: AG47ELsV85pWU1DE+zGe3Wfr1nUhz4B3qqDzCWSuVmdNGN+VovgyEBVzmL5tiVPAscW8i2mtplh/ X-Received: by 10.101.97.79 with SMTP id o15mr2898964pgv.31.1520734574283; Sat, 10 Mar 2018 18:16:14 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1520734574; cv=none; d=google.com; s=arc-20160816; b=BRJsR7KTg0H+XVyycSloak4DFf6lBCra76AIfSgymhkXEpzydyxLtUB0974FusQQdW Jpl2kf0/5rTPzowf7/3mDKGOrnQIQUREAZlE0EbsWpr6M2C/pL7YVuPgZNmFJsAHlEO/ XvACm7NQrdWMZO42plAZ4OkvAHGn6UvE7VwqS+1k3rXb4h+k9JAGl71Gx74eXMz/V8wf ON43PnUg6pa9//3XU2e9bxVyT5GvqYLMNYLYdhdNFCu50B2oOl1JpgK96INWcY0GKNck 6R8DawXcJArv6UG/qQvaOZtAgf/33HMa/DaU11hbg2ZYuakJbbU/KhNajm+2wMgNbsmJ E+jA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:mail-followup-to :message-id:subject:cc:to:from:date:dkim-signature :arc-authentication-results; bh=dCF2LILaeoTAH/QNkIwEmzRx+XuPNIrEr+cfLRCUaok=; b=ahNxjqZY2R5hVhY5e06rB1QSjeQhPMV+LeCmETHtOp1pmHPVADuEyibpckLguOyDhX ZOcjtgrdRv3K89sSoeJsmgR3NgowJQ7gt4BRngEVfduj97QK/P9nArkFqafTibRD7Za2 14EcVUilAncNivztM7f6L6JcLs6qiv30SIFPhhFlgNyF4nOnZNjQsYqyFCI9wnq5VLgm jLOOJQen/jBSeVYG8qiddgdQ5ePUrueT1omuitt9G+6VDkHHNTZT66OEM1Vrxbp0GuGT fart6VUv+y+rwi2dwlYBbIXiPiiQjIFqJAqMffbtJ+HgTHWWZlkWubVdCXwRDrvONdGE UvRQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@thunk.org header.s=ef5046eb header.b=cwV2YLEo; 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 a63-v6si3712621pla.44.2018.03.10.18.15.48; Sat, 10 Mar 2018 18:16:14 -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=@thunk.org header.s=ef5046eb header.b=cwV2YLEo; 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 S932093AbeCKCO1 (ORCPT + 99 others); Sat, 10 Mar 2018 21:14:27 -0500 Received: from imap.thunk.org ([74.207.234.97]:53002 "EHLO imap.thunk.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751206AbeCKCO0 (ORCPT ); Sat, 10 Mar 2018 21:14:26 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=thunk.org; s=ef5046eb; h=In-Reply-To:Content-Type:MIME-Version:References:Message-ID: Subject:Cc:To:From:Date:Sender:Reply-To: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=dCF2LILaeoTAH/QNkIwEmzRx+XuPNIrEr+cfLRCUaok=; b=cwV2YLEovBVSG+VD7b54G5QlU2 lcVxtvFA4E+R1x4kRWq8XE9dTx74oGu1cpfAKDajErC61/+vrssFIx3zomAqTXyq+rbMmLY9El24U wFMk6WwYqfifRt3TYJe3AK0k2p/vbEzn6DN2JItOInIRi81thKj++9lMZOOmDadVS8Vw=; Received: from root (helo=callcc.thunk.org) by imap.thunk.org with local-esmtp (Exim 4.89) (envelope-from ) id 1euqUy-0002sW-1M; Sun, 11 Mar 2018 02:14:08 +0000 Received: by callcc.thunk.org (Postfix, from userid 15806) id EB1057A41A3; Sat, 10 Mar 2018 21:14:06 -0500 (EST) Date: Sat, 10 Mar 2018 21:14:06 -0500 From: "Theodore Y. Ts'o" To: Andiry Xu Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-nvdimm@lists.01.org, 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 Subject: Re: [RFC v2 00/83] NOVA: a new file system for persistent memory Message-ID: <20180311021406.GA388@thunk.org> Mail-Followup-To: "Theodore Y. Ts'o" , Andiry Xu , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-nvdimm@lists.01.org, 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> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1520705944-6723-1-git-send-email-jix024@eng.ucsd.edu> User-Agent: Mutt/1.9.4 (2018-02-28) X-SA-Exim-Connect-IP: X-SA-Exim-Mail-From: tytso@thunk.org X-SA-Exim-Scanned: No (on imap.thunk.org); SAEximRunCond expanded to false Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org FYI, your patch set doesn't even compile for me without these fixups. I'm not sure why you were trying to declare inline functions in a header file without the function body? - Ted diff --git a/fs/nova/balloc.c b/fs/nova/balloc.c index 8e992156f28c..9c7b74aa712e 100644 --- a/fs/nova/balloc.c +++ b/fs/nova/balloc.c @@ -74,12 +74,12 @@ static void nova_init_free_list(struct super_block *sb, free_list->block_end -= sbi->tail_reserved_blocks; } -inline struct nova_range_node *nova_alloc_blocknode(struct super_block *sb) +struct nova_range_node *nova_alloc_blocknode(struct super_block *sb) { return nova_alloc_range_node(sb); } -inline void nova_free_blocknode(struct super_block *sb, +void nova_free_blocknode(struct super_block *sb, struct nova_range_node *node) { nova_free_range_node(node); @@ -206,7 +206,7 @@ int nova_insert_range_node(struct rb_root *tree, return 0; } -inline int nova_insert_blocktree(struct nova_sb_info *sbi, +int nova_insert_blocktree(struct nova_sb_info *sbi, struct rb_root *tree, struct nova_range_node *new_node) { int ret; @@ -659,7 +659,7 @@ static int nova_new_blocks(struct super_block *sb, unsigned long *blocknr, // Allocate data blocks. The offset for the allocated block comes back in // blocknr. Return the number of blocks allocated. -inline int nova_new_data_blocks(struct super_block *sb, +int nova_new_data_blocks(struct super_block *sb, struct nova_inode_info_header *sih, unsigned long *blocknr, unsigned long start_blk, unsigned int num, enum nova_alloc_init zero, int cpu, diff --git a/fs/nova/balloc.h b/fs/nova/balloc.h index 463fbac99eff..aca7e8c18dde 100644 --- a/fs/nova/balloc.h +++ b/fs/nova/balloc.h @@ -62,18 +62,18 @@ enum alloc_type { int nova_alloc_block_free_lists(struct super_block *sb); void nova_delete_free_lists(struct super_block *sb); -inline struct nova_range_node *nova_alloc_blocknode(struct super_block *sb); -inline void nova_free_blocknode(struct super_block *sb, +struct nova_range_node *nova_alloc_blocknode(struct super_block *sb); +void nova_free_blocknode(struct super_block *sb, struct nova_range_node *bnode); extern void nova_init_blockmap(struct super_block *sb, int recovery); extern unsigned long nova_count_free_blocks(struct super_block *sb); -inline int nova_insert_blocktree(struct nova_sb_info *sbi, +int nova_insert_blocktree(struct nova_sb_info *sbi, struct rb_root *tree, struct nova_range_node *new_node); extern int nova_free_data_blocks(struct super_block *sb, struct nova_inode_info_header *sih, unsigned long blocknr, int num); extern int nova_free_log_blocks(struct super_block *sb, struct nova_inode_info_header *sih, unsigned long blocknr, int num); -extern inline int nova_new_data_blocks(struct super_block *sb, +extern int nova_new_data_blocks(struct super_block *sb, struct nova_inode_info_header *sih, unsigned long *blocknr, unsigned long start_blk, unsigned int num, enum nova_alloc_init zero, int cpu, diff --git a/fs/nova/inode.c b/fs/nova/inode.c index 21be31a05d26..31ef258978ba 100644 --- a/fs/nova/inode.c +++ b/fs/nova/inode.c @@ -440,7 +440,7 @@ struct inode *nova_iget(struct super_block *sb, unsigned long ino) return ERR_PTR(err); } -inline int nova_insert_inodetree(struct nova_sb_info *sbi, +int nova_insert_inodetree(struct nova_sb_info *sbi, struct nova_range_node *new_node, int cpu) { struct rb_root *tree; diff --git a/fs/nova/inode.h b/fs/nova/inode.h index 086a7cba8ac3..1097e15ff7af 100644 --- a/fs/nova/inode.h +++ b/fs/nova/inode.h @@ -254,7 +254,7 @@ int nova_init_inode_table(struct super_block *sb); int nova_get_inode_address(struct super_block *sb, u64 ino, u64 *pi_addr, int extendable); struct inode *nova_iget(struct super_block *sb, unsigned long ino); -inline int nova_insert_inodetree(struct nova_sb_info *sbi, +int nova_insert_inodetree(struct nova_sb_info *sbi, struct nova_range_node *new_node, int cpu); u64 nova_new_nova_inode(struct super_block *sb, u64 *pi_addr); struct inode *nova_new_vfs_inode(enum nova_new_inode_type type, diff --git a/fs/nova/super.c b/fs/nova/super.c index 039c003b698b..9f06ec847c95 100644 --- a/fs/nova/super.c +++ b/fs/nova/super.c @@ -795,23 +795,23 @@ 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) +void nova_free_range_node(struct nova_range_node *node) { kmem_cache_free(nova_range_node_cachep, node); } -inline void nova_free_inode_node(struct super_block *sb, +void nova_free_inode_node(struct super_block *sb, struct nova_range_node *node) { nova_free_range_node(node); } -inline void nova_free_file_write_item(struct nova_file_write_item *item) +void nova_free_file_write_item(struct nova_file_write_item *item) { kmem_cache_free(nova_file_write_item_cachep, item); } -inline struct nova_file_write_item * +struct nova_file_write_item * nova_alloc_file_write_item(struct super_block *sb) { struct nova_file_write_item *p; diff --git a/fs/nova/super.h b/fs/nova/super.h index bcbe862ac914..dc98346266e1 100644 --- a/fs/nova/super.h +++ b/fs/nova/super.h @@ -160,11 +160,11 @@ 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 inline struct nova_range_node *nova_alloc_inode_node(struct super_block *sb); +extern struct nova_range_node *nova_alloc_inode_node(struct super_block *sb); extern struct nova_file_write_item * nova_alloc_file_write_item(struct super_block *sb); extern void nova_free_range_node(struct nova_range_node *node); -extern inline void nova_free_inode_node(struct super_block *sb, +extern void nova_free_inode_node(struct super_block *sb, struct nova_range_node *node); void nova_free_file_write_item(struct nova_file_write_item *item);