the rule is that locks are taken after transaction start.
Signed-off-by: Alex Zhuravlev <bzzz@whamcloud.com>
Change-Id: I5252be0033611f03b355c1f98e21422cdde55c9e
Reviewed-on: https://review.whamcloud.com/40969
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: jenkins <devops@whamcloud.com>
Reviewed-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Reviewed-by: Wang Shilong <wshilong@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
- ofd_write_lock(env, fo);
if (!ofd_object_exists(fo))
if (!ofd_object_exists(fo))
- GOTO(unlock, rc = -ENOENT);
/* VBR: version recovery check */
rc = ofd_version_get_check(info, fo);
if (rc != 0)
/* VBR: version recovery check */
rc = ofd_version_get_check(info, fo);
if (rc != 0)
if (ff != NULL) {
rc = ofd_object_ff_load(env, fo);
if (rc == -ENODATA)
ff_needed = true;
else if (rc < 0)
if (ff != NULL) {
rc = ofd_object_ff_load(env, fo);
if (rc == -ENODATA)
ff_needed = true;
else if (rc < 0)
}
th = ofd_trans_create(env, ofd);
if (IS_ERR(th))
}
th = ofd_trans_create(env, ofd);
if (IS_ERR(th))
- GOTO(unlock, rc = PTR_ERR(th));
rc = dt_declare_attr_set(env, dob, la, th);
if (rc)
rc = dt_declare_attr_set(env, dob, la, th);
if (rc)
+ ofd_write_lock(env, fo);
+ if (!ofd_object_exists(fo))
+ GOTO(unlock, rc = -ENOENT);
+
rc = dt_falloc(env, dob, start, end, mode, th);
if (rc)
rc = dt_falloc(env, dob, start, end, mode, th);
if (rc)
rc = dt_attr_set(env, dob, la, th);
if (rc)
rc = dt_attr_set(env, dob, la, th);
if (rc)
if (ff_needed) {
rc = dt_xattr_set(env, ofd_object_child(fo), &info->fti_buf,
if (ff_needed) {
rc = dt_xattr_set(env, ofd_object_child(fo), &info->fti_buf,
if (!rc)
filter_fid_le_to_cpu(&fo->ofo_ff, ff, sizeof(*ff));
}
if (!rc)
filter_fid_le_to_cpu(&fo->ofo_ff, ff, sizeof(*ff));
}
-stop:
- ofd_trans_stop(env, ofd, th, rc);
unlock:
ofd_write_unlock(env, fo);
unlock:
ofd_write_unlock(env, fo);
+stop:
+ ofd_trans_stop(env, ofd, th, rc);