Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751040AbbK0FRw (ORCPT ); Fri, 27 Nov 2015 00:17:52 -0500 Received: from h2.hallyn.com ([78.46.35.8]:50559 "EHLO h2.hallyn.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750739AbbK0FRs (ORCPT ); Fri, 27 Nov 2015 00:17:48 -0500 Date: Thu, 26 Nov 2015 23:17:45 -0600 From: "Serge E. Hallyn" To: Tejun Heo Cc: serge@hallyn.com, linux-kernel@vger.kernel.org, adityakali@google.com, linux-api@vger.kernel.org, containers@lists.linux-foundation.org, cgroups@vger.kernel.org, lxc-devel@lists.linuxcontainers.org, akpm@linux-foundation.org, ebiederm@xmission.com Subject: Re: [PATCH 7/8] cgroup: mount cgroupns-root when inside non-init cgroupns Message-ID: <20151127051745.GA24521@mail.hallyn.com> References: <1447703505-29672-1-git-send-email-serge@hallyn.com> <1447703505-29672-8-git-send-email-serge@hallyn.com> <20151124171610.GS17033@mtj.duckdns.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20151124171610.GS17033@mtj.duckdns.org> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1899 Lines: 61 On Tue, Nov 24, 2015 at 12:16:10PM -0500, Tejun Heo wrote: > Hello, > > On Mon, Nov 16, 2015 at 01:51:44PM -0600, serge@hallyn.com wrote: > > +struct dentry *kernfs_obtain_root(struct super_block *sb, > > + struct kernfs_node *kn) > > +{ > > + struct dentry *dentry; > > + struct inode *inode; > > + > > + BUG_ON(sb->s_op != &kernfs_sops); > > + > > + /* inode for the given kernfs_node should already exist. */ > > + inode = ilookup(sb, kn->ino); > > + if (!inode) { > > + pr_debug("kernfs: could not get inode for '"); > > + pr_cont_kernfs_path(kn); > > + pr_cont("'.\n"); > > + return ERR_PTR(-EINVAL); > > + } > > Hmmm... but inode might not have been instantiated yet. Why not use > kernfs_get_inode()? > > > + /* instantiate and link root dentry */ > > + dentry = d_obtain_root(inode); > > + if (!dentry) { > > + pr_debug("kernfs: could not get dentry for '"); > > + pr_cont_kernfs_path(kn); > > + pr_cont("'.\n"); > > + return ERR_PTR(-ENOMEM); > > + } > > + > > + /* If this is a new dentry, set it up. We need kernfs_mutex because this > > + * may be called by callers other than kernfs_fill_super. */ > > Formatting. > > > + mutex_lock(&kernfs_mutex); > > + if (!dentry->d_fsdata) { > > + kernfs_get(kn); > > + dentry->d_fsdata = kn; > > + } else { > > + WARN_ON(dentry->d_fsdata != kn); > > + } > > + mutex_unlock(&kernfs_mutex); > > + > > + return dentry; > > +} > > Wouldn't it be simpler to walk dentry from kernfs root than > duplicating dentry instantiation? Sorry I don't think I'm following. Are you suggesting walking the kn->parent chain backward and doing d_lookup() at each point starting with sb->s_root? -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/