X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fllite%2Fnamei.c;h=f5288a98eceb7ce32c2206fa9a2388a3295b6673;hp=632955165113d32567b759d121d3083878d8c898;hb=refs%2Fchanges%2F09%2F13709%2F13;hpb=2a7abc63732a6a7674bc606df9ce641dfe7bf092 diff --git a/lustre/llite/namei.c b/lustre/llite/namei.c index 6329551..f5288a9 100644 --- a/lustre/llite/namei.c +++ b/lustre/llite/namei.c @@ -469,7 +469,8 @@ static int ll_lookup_it_finish(struct ptlrpc_request *request, alias = ll_splice_alias(inode, *de); if (IS_ERR(alias)) - RETURN(PTR_ERR(alias)); + GOTO(out, rc = PTR_ERR(alias)); + *de = alias; } else if (!it_disposition(it, DISP_LOOKUP_NEG) && !it_disposition(it, DISP_OPEN_CREATE)) { @@ -501,7 +502,7 @@ static int ll_lookup_it_finish(struct ptlrpc_request *request, (*de)->d_name.name, (*de)->d_name.len, &fid); if (rc != 0) - RETURN(rc); + GOTO(out, rc); } if (md_revalidate_lock(ll_i2mdexp(parent), &parent_it, &fid, @@ -509,9 +510,15 @@ static int ll_lookup_it_finish(struct ptlrpc_request *request, d_lustre_revalidate(*de); ll_intent_release(&parent_it); } - } + } + + GOTO(out, rc = 0); - RETURN(0); +out: + if (rc != 0 && it->it_op & IT_OPEN) + ll_open_cleanup((*de)->d_sb, request); + + return rc; } static struct dentry *ll_lookup_it(struct inode *parent, struct dentry *dentry,