Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp3510336imm; Tue, 29 May 2018 08:26:29 -0700 (PDT) X-Google-Smtp-Source: AB8JxZq2ezuulQNh8zB3GtvHuUF7EWibLOub/ODvWsZYlgKcZD25mP2P/t3QivciE3JLGzMCx2D8 X-Received: by 2002:a17:902:b205:: with SMTP id t5-v6mr18071859plr.343.1527607589165; Tue, 29 May 2018 08:26:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527607589; cv=none; d=google.com; s=arc-20160816; b=gX3tTtS1e2JVzOxItomC9Fs1r3knMvdrcXFliK6JLZiloyyqJgBJRecBEJ2XoZFiDT BQM98eBkIi3E+fOeff5Mm2K1hEYNgnDCTwgujF2ojmjMnEsKnlM6vXDpF3TMXxJye+L6 5zRkOC1eKaBlijpvgFAdIHHhuy6SpNbbBXWMUzzWcOcBMfS3Fy3AOWaJ7sSwvIcuZlot cHJ6rM1it5JwERXhxyHmV0IZekjdWjFSIU0Y+mxD7ih7oEHjF37h6gZF8my5zMVl/4RR D92IqQGMHMJo7HjW+43PATbDmzeSJxpZKlMYViZ3MOV2PUSpmZINUWwpjYWqe4dKP4Rs Wz2Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature :arc-authentication-results; bh=5hdTE0sLA6gw5JmhGrx5rYhk/92ut5IyPMOaad9Ak6o=; b=N2OvbboTQ8LlVG3ND5ZQBAipJhATr07dMYBuyuMYSx6sEgcKzdw0wwnidz/6d6MUxk pOOY31gs/fRM4CQI8b3XbZiLWuzeUUxVXpUFcNXVFtz7+lYw94TWATZePPv4ueulb/D4 aZg7Yy9fi7GBxIC3r6A+ysBFrJ8ffsXaZogHbx9jpOWyWrwVh88Hg2Kq37uT9vLXON+c EOpTKgA4EUVMajLVMcmCfLAKBgJTD001rDBNQyGJx8QQTleb3eJtZ8L4STkdLzoWRbtG q2lr8rYzWAeZ8Zi7L4hsj6Flp6Y+ekYx6fX3B6WQ7+tyZYFlBN2J9Hl8z8cAkksjRdNh 5G0A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=uAu2sMwm; 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 205-v6si7575914pgg.687.2018.05.29.08.26.15; Tue, 29 May 2018 08:26:29 -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=uAu2sMwm; 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 S936504AbeE2PYQ (ORCPT + 99 others); Tue, 29 May 2018 11:24:16 -0400 Received: from mail-yw0-f195.google.com ([209.85.161.195]:37419 "EHLO mail-yw0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S936493AbeE2PYH (ORCPT ); Tue, 29 May 2018 11:24:07 -0400 Received: by mail-yw0-f195.google.com with SMTP id j190-v6so4802140ywe.4; Tue, 29 May 2018 08:24:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=5hdTE0sLA6gw5JmhGrx5rYhk/92ut5IyPMOaad9Ak6o=; b=uAu2sMwmW7x6jjQToKynUfKJR0ZxbSg6IstaaNbMol3+xdsip3EaxKu8j1+T61OFx9 f8b9bsq3mPc1qoaIwjYqL96pj1kGu3/ISdk5YYQx8IWOqjb/I8EMTfgv0Ei3NTFoQrpa nKa86v5E4o0JO6PBKtzQJIf71mLu7IXzY2U5yaEtCEY+ag6dBX6QOii7dn27zsz1jhkD tOszRneC6wneTtvjoEYnGPebCz0jNDxNryrrhNt8b2i9tez60xOOGWy6brIT6yWxMJ8m U8SoKaSeYsqyjxfJndza+mbBld6VQlP2ff0zSUX6MjYX7R7LwJvLA5q4QwXHCNHZhHAW XEdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=5hdTE0sLA6gw5JmhGrx5rYhk/92ut5IyPMOaad9Ak6o=; b=l1VPCQdBpia9AWa/YoU3dyDEOE3JPwP3wMT6nTqjWGJiEwYmBT4w7HJzTwSKnp3puS sKtHUlr4ZG4FoeEbIxNDYXjxYpM2qFPXup36wI/KqJAy/nPqzp4EMtw7C0RXbNZYiq4t HuOykkf4SEEiVFRdVlIrsylMeZxJGJcGZM/ysY8+P0rP6oAld5QsINBCkQAfSgyxkkL+ fxOKuTH4NIXNqEKqbklpJauEeQQv9DTHMUMAnwKqVaC57ugHd2FXqRYPlPJXhpLHEP79 x5gShFS58WAAL2+VZ7q1OUXHcdYen8VQynGQjIujHj7mXlpwa+xPSx3yEQyHvlijGlmU sRZA== X-Gm-Message-State: ALKqPwd51HZizjPfI80vUwPKG9YnoG5wetqH48p9UcTY10ZFe7oouyGT S7fl2TqFHmjCL3M589Dyn3NBVDjgGxxt7Vwy8xU= X-Received: by 2002:a81:2305:: with SMTP id j5-v6mr5355826ywj.294.1527607446505; Tue, 29 May 2018 08:24:06 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a0d:efc6:0:0:0:0:0 with HTTP; Tue, 29 May 2018 08:24:06 -0700 (PDT) In-Reply-To: <20180529144143.16378-6-mszeredi@redhat.com> References: <20180529144143.16378-1-mszeredi@redhat.com> <20180529144143.16378-6-mszeredi@redhat.com> From: Amir Goldstein Date: Tue, 29 May 2018 18:24:06 +0300 Message-ID: Subject: Re: [PATCH 05/11] ovl: return dentry from ovl_create_real() To: Miklos Szeredi Cc: overlayfs , linux-fsdevel , linux-kernel , Al Viro Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, May 29, 2018 at 5:41 PM, Miklos Szeredi wrote: > From: Amir Goldstein > > Al Viro suggested to simplify callers of ovl_create_real() by > returning the created dentry (or ERR_PTR) from ovl_create_real(). > This prep patch makes Al's patch change less callers. > > Also used ovl_create_temp() in ovl_create_index() instead of calling > ovl_do_mkdir() directly, so now all callers of ovl_do_mkdir() are routed > through ovl_create_real(), which paves the way for Al's fix for non-hashed > result from vfs_mkdir(). > It's good that you split this patch from ovl_create_temp() patch, but the commit message it utterly not related to the patch anymore and possibly should retain Al's authorship cause there is no relic of my work in this patch. Thanks, Amir. > Suggested-by: Al Viro > Signed-off-by: Amir Goldstein > Signed-off-by: Miklos Szeredi > --- > fs/overlayfs/copy_up.c | 15 ++++-------- > fs/overlayfs/dir.c | 62 +++++++++++++++++++++++------------------------- > fs/overlayfs/overlayfs.h | 4 ++-- > fs/overlayfs/super.c | 7 +++--- > 4 files changed, 40 insertions(+), 48 deletions(-) > > diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c > index 5f4c78b1bbeb..d3e9c1eeb7a4 100644 > --- a/fs/overlayfs/copy_up.c > +++ b/fs/overlayfs/copy_up.c > @@ -502,19 +502,12 @@ static int ovl_get_tmpfile(struct ovl_copy_up_ctx *c, struct dentry **tempp) > > if (c->tmpfile) { > temp = ovl_do_tmpfile(c->workdir, c->stat.mode); > - if (IS_ERR(temp)) > - goto temp_err; > } else { > - temp = ovl_lookup_temp(c->workdir); > - if (IS_ERR(temp)) > - goto temp_err; > - > - err = ovl_create_real(d_inode(c->workdir), temp, &cattr); > - if (err) { > - dput(temp); > - goto out; > - } > + temp = ovl_create_real(d_inode(c->workdir), > + ovl_lookup_temp(c->workdir), &cattr); > } > + if (IS_ERR(temp)) > + goto temp_err; > err = 0; > *tempp = temp; > out: > diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c > index 0fb3ef85f298..425ddb098c4a 100644 > --- a/fs/overlayfs/dir.c > +++ b/fs/overlayfs/dir.c > @@ -114,13 +114,17 @@ int ovl_cleanup_and_whiteout(struct dentry *workdir, struct inode *dir, > goto out; > } > > -int ovl_create_real(struct inode *dir, struct dentry *newdentry, > - struct ovl_cattr *attr) > +struct dentry *ovl_create_real(struct inode *dir, struct dentry *newdentry, > + struct ovl_cattr *attr) > { > int err; > > + if (IS_ERR(newdentry)) > + return newdentry; > + > + err = -ESTALE; > if (newdentry->d_inode) > - return -ESTALE; > + goto out; > > if (attr->hardlink) { > err = ovl_do_link(attr->hardlink, dir, newdentry); > @@ -157,7 +161,12 @@ int ovl_create_real(struct inode *dir, struct dentry *newdentry, > */ > err = -ENOENT; > } > - return err; > +out: > + if (err) { > + dput(newdentry); > + return ERR_PTR(err); > + } > + return newdentry; > } > > static int ovl_set_opaque_xerr(struct dentry *dentry, struct dentry *upper, > @@ -224,14 +233,14 @@ static int ovl_create_upper(struct dentry *dentry, struct inode *inode, > attr->mode &= ~current_umask(); > > inode_lock_nested(udir, I_MUTEX_PARENT); > - newdentry = lookup_one_len(dentry->d_name.name, upperdir, > - dentry->d_name.len); > + newdentry = ovl_create_real(udir, > + lookup_one_len(dentry->d_name.name, > + upperdir, > + dentry->d_name.len), > + attr); > err = PTR_ERR(newdentry); > if (IS_ERR(newdentry)) > goto out_unlock; > - err = ovl_create_real(udir, newdentry, attr); > - if (err) > - goto out_dput; > > if (ovl_type_merge(dentry->d_parent) && d_is_dir(newdentry)) { > /* Setting opaque here is just an optimization, allow to fail */ > @@ -239,9 +248,7 @@ static int ovl_create_upper(struct dentry *dentry, struct inode *inode, > } > > ovl_instantiate(dentry, inode, newdentry, !!attr->hardlink); > - newdentry = NULL; > -out_dput: > - dput(newdentry); > + err = 0; > out_unlock: > inode_unlock(udir); > return err; > @@ -280,15 +287,12 @@ static struct dentry *ovl_clear_empty(struct dentry *dentry, > if (upper->d_parent->d_inode != udir) > goto out_unlock; > > - opaquedir = ovl_lookup_temp(workdir); > + opaquedir = ovl_create_real(wdir, ovl_lookup_temp(workdir), > + OVL_CATTR(stat.mode)); > err = PTR_ERR(opaquedir); > if (IS_ERR(opaquedir)) > goto out_unlock; > > - err = ovl_create_real(wdir, opaquedir, OVL_CATTR(stat.mode)); > - if (err) > - goto out_dput; > - > err = ovl_copy_xattr(upper, opaquedir); > if (err) > goto out_cleanup; > @@ -318,7 +322,6 @@ static struct dentry *ovl_clear_empty(struct dentry *dentry, > > out_cleanup: > ovl_cleanup(wdir, opaquedir); > -out_dput: > dput(opaquedir); > out_unlock: > unlock_rename(workdir, upperdir); > @@ -379,20 +382,16 @@ static int ovl_create_over_whiteout(struct dentry *dentry, struct inode *inode, > if (err) > goto out; > > - newdentry = ovl_lookup_temp(workdir); > - err = PTR_ERR(newdentry); > - if (IS_ERR(newdentry)) > - goto out_unlock; > - > upper = lookup_one_len(dentry->d_name.name, upperdir, > dentry->d_name.len); > err = PTR_ERR(upper); > if (IS_ERR(upper)) > - goto out_dput; > + goto out_unlock; > > - err = ovl_create_real(wdir, newdentry, cattr); > - if (err) > - goto out_dput2; > + newdentry = ovl_create_real(wdir, ovl_lookup_temp(workdir), cattr); > + err = PTR_ERR(newdentry); > + if (IS_ERR(newdentry)) > + goto out_dput; > > /* > * mode could have been mutilated due to umask (e.g. sgid directory) > @@ -439,11 +438,9 @@ static int ovl_create_over_whiteout(struct dentry *dentry, struct inode *inode, > goto out_cleanup; > } > ovl_instantiate(dentry, inode, newdentry, hardlink); > - newdentry = NULL; > -out_dput2: > - dput(upper); > + err = 0; > out_dput: > - dput(newdentry); > + dput(upper); > out_unlock: > unlock_rename(workdir, upperdir); > out: > @@ -455,7 +452,8 @@ static int ovl_create_over_whiteout(struct dentry *dentry, struct inode *inode, > > out_cleanup: > ovl_cleanup(wdir, newdentry); > - goto out_dput2; > + dput(newdentry); > + goto out_dput; > } > > static int ovl_create_or_link(struct dentry *dentry, struct inode *inode, > diff --git a/fs/overlayfs/overlayfs.h b/fs/overlayfs/overlayfs.h > index aa8286419133..6bbde513e068 100644 > --- a/fs/overlayfs/overlayfs.h > +++ b/fs/overlayfs/overlayfs.h > @@ -358,8 +358,8 @@ struct ovl_cattr { > > #define OVL_CATTR(m) (&(struct ovl_cattr) { .mode = (m) }) > > -int ovl_create_real(struct inode *dir, struct dentry *newdentry, > - struct ovl_cattr *attr); > +struct dentry *ovl_create_real(struct inode *dir, struct dentry *newdentry, > + struct ovl_cattr *attr); > int ovl_cleanup(struct inode *dir, struct dentry *dentry); > > /* copy_up.c */ > diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c > index 286d36772e9c..704b37311467 100644 > --- a/fs/overlayfs/super.c > +++ b/fs/overlayfs/super.c > @@ -611,9 +611,10 @@ static struct dentry *ovl_workdir_create(struct ovl_fs *ofs, > goto retry; > } > > - err = ovl_create_real(dir, work, OVL_CATTR(attr.ia_mode)); > - if (err) > - goto out_dput; > + work = ovl_create_real(dir, work, OVL_CATTR(attr.ia_mode)); > + err = PTR_ERR(work); > + if (IS_ERR(work)) > + goto out_err; > > /* > * Try to remove POSIX ACL xattrs from workdir. We are good if: > -- > 2.14.3 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-unionfs" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html