From mboxrd@z Thu Jan 1 00:00:00 1970 From: Valerie Aurora Subject: [PATCH 48/74] union-mount: Build union stack in __lookup_union() Date: Tue, 22 Mar 2011 19:04:39 -0700 Message-ID: <1300845905-14433-5-git-send-email-valerie.aurora@gmail.com> References: <1300845905-14433-1-git-send-email-valerie.aurora@gmail.com> Cc: viro@zeniv.linux.org.uk, Valerie Aurora , Valerie Aurora To: linux-fsdevel@vger.kernel.org, linux@vger.kernel.org Return-path: Received: from mail-yx0-f174.google.com ([209.85.213.174]:49232 "EHLO mail-yx0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751707Ab1CWCFc (ORCPT ); Tue, 22 Mar 2011 22:05:32 -0400 In-Reply-To: <1300845905-14433-1-git-send-email-valerie.aurora@gmail.com> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: From: Valerie Aurora Build the union stack for directories as we look them up. Create the topmost directory if it doesn't exist. Signed-off-by: Valerie Aurora --- fs/namei.c | 18 ++++++++++++++++-- 1 files changed, 16 insertions(+), 2 deletions(-) diff --git a/fs/namei.c b/fs/namei.c index 3532ea9..4170f92 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -817,8 +817,22 @@ static int __lookup_union(struct nameidata *nd, struct qstr *name, goto out_found_file; } - /* XXX - do nothing, more in later patches */ - path_put(&lower); + /* + * Now we know the target is a directory. Create a + * matching topmost directory if one doesn't already + * exist, and add this layer's directory to the union + * stack for the topmost directory. + */ + if (!topmost->dentry->d_inode) { + err = union_create_topmost_dir(&parent, name, topmost, + &lower); + if (err) + goto out_err; + } + + err = union_add_dir(topmost, &lower, i); + if (err) + goto out_err; } return 0; -- 1.7.0.4