| From | David Howells <> | Subject | [PATCH 45/73] union-mount: Build union stack in __lookup_union() [ver #2] | Date | Tue, 21 Feb 2012 18:03:07 +0000 |
| |
From: Valerie Aurora <vaurora@redhat.com>
Build the union stack for directories as we look them up. Create the topmost directory if it doesn't exist.
Original-author: Valerie Aurora <vaurora@redhat.com> Signed-off-by: David Howells <dhowells@redhat.com> ---
fs/namei.c | 17 +++++++++++++++-- 1 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/fs/namei.c b/fs/namei.c index f81f24e..3ac07be 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -1190,8 +1190,21 @@ 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;
|