Whamcloud - gitweb
git://git.whamcloud.com
/
fs
/
lustre-release.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
LU-1206: mdt: Fix error handling in mdt_mfd_open
[fs/lustre-release.git]
/
lustre
/
mdt
/
mdt_open.c
diff --git
a/lustre/mdt/mdt_open.c
b/lustre/mdt/mdt_open.c
index
3cfe6bf
..
47628a1
100644
(file)
--- a/
lustre/mdt/mdt_open.c
+++ b/
lustre/mdt/mdt_open.c
@@
-680,7
+680,7
@@
static int mdt_mfd_open(struct mdt_thread_info *info, struct mdt_object *p,
rc = mo_open(info->mti_env, mdt_object_child(o),
created ? flags | MDS_OPEN_CREATED : flags);
if (rc)
rc = mo_open(info->mti_env, mdt_object_child(o),
created ? flags | MDS_OPEN_CREATED : flags);
if (rc)
-
RETURN(
rc);
+
GOTO(err_out,
rc);
mfd = mdt_mfd_new();
if (mfd != NULL) {
mfd = mdt_mfd_new();
if (mfd != NULL) {
@@
-749,12
+749,21
@@
static int mdt_mfd_open(struct mdt_thread_info *info, struct mdt_object *p,
}
mdt_empty_transno(info, rc);
}
mdt_empty_transno(info, rc);
- } else
- rc = -ENOMEM;
+ } else {
+ GOTO(err_out, rc = -ENOMEM);
+ }
RETURN(rc);
RETURN(rc);
-}
+err_out:
+ if (flags & FMODE_WRITE)
+ /* XXX We also need to close io epoch here.
+ * See LU-1220 - green */
+ mdt_write_put(o);
+ else if (flags & FMODE_EXEC)
+ mdt_write_allow(o);
+ return rc;
+}
int mdt_finish_open(struct mdt_thread_info *info,
struct mdt_object *p, struct mdt_object *o,
int mdt_finish_open(struct mdt_thread_info *info,
struct mdt_object *p, struct mdt_object *o,