ofd_commitrw() shouldn't exit w/o calling ofd_commitrw_write(),
otherwise the pages taken in ofd_preprw() are leaked.
same in mdt_obd_commitrw()
Fixes:
bbfdc7c167 ("LU-14739 quota: fix quota with root squash enabled")
Signed-off-by: Alex Zhuravlev <bzzz@whamcloud.com>
Change-Id: Icd60c7ab80c5a7b65603d7da0d2e83872dc6b97f
Reviewed-on: https://review.whamcloud.com/47873
Reviewed-by: Sebastien Buisson <sbuisson@ddn.com>
Tested-by: jenkins <devops@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
struct lu_nodemap *nodemap;
__u32 mapped_uid, mapped_gid, mapped_projid;
+ mapped_uid = oa->o_uid;
+ mapped_gid = oa->o_gid;
+ mapped_projid = oa->o_projid;
nodemap = nodemap_get_from_exp(exp);
- if (IS_ERR(nodemap))
- RETURN(PTR_ERR(nodemap));
- mapped_uid = nodemap_map_id(nodemap, NODEMAP_UID,
- NODEMAP_FS_TO_CLIENT,
- oa->o_uid);
- mapped_gid = nodemap_map_id(nodemap, NODEMAP_GID,
- NODEMAP_FS_TO_CLIENT,
- oa->o_gid);
- mapped_projid = nodemap_map_id(nodemap, NODEMAP_PROJID,
- NODEMAP_FS_TO_CLIENT,
- oa->o_projid);
+ if (!IS_ERR(nodemap)) {
+ mapped_uid = nodemap_map_id(nodemap, NODEMAP_UID,
+ NODEMAP_FS_TO_CLIENT,
+ oa->o_uid);
+ mapped_gid = nodemap_map_id(nodemap, NODEMAP_GID,
+ NODEMAP_FS_TO_CLIENT,
+ oa->o_gid);
+ mapped_projid = nodemap_map_id(nodemap, NODEMAP_PROJID,
+ NODEMAP_FS_TO_CLIENT,
+ oa->o_projid);
+ } else if (old_rc == 0) {
+ old_rc = PTR_ERR(nodemap);
+ }
+
if (!IS_ERR_OR_NULL(nodemap)) {
/* do not bypass quota enforcement if squashed uid */
if (unlikely(mapped_uid == nodemap->nm_squash_uid)) {
ofd_counter_incr(exp, LPROC_OFD_STATS_WRITE, jobid,
ktime_us_delta(ktime_get(), kstart));
+ mapped_uid = oa->o_uid;
+ mapped_gid = oa->o_gid;
+ mapped_projid = oa->o_projid;
nodemap = nodemap_get_from_exp(exp);
- if (IS_ERR(nodemap))
- RETURN(PTR_ERR(nodemap));
- mapped_uid = nodemap_map_id(nodemap, NODEMAP_UID,
- NODEMAP_FS_TO_CLIENT,
- oa->o_uid);
- mapped_gid = nodemap_map_id(nodemap, NODEMAP_GID,
- NODEMAP_FS_TO_CLIENT,
- oa->o_gid);
- mapped_projid = nodemap_map_id(nodemap, NODEMAP_PROJID,
- NODEMAP_FS_TO_CLIENT,
- oa->o_projid);
+ if (!IS_ERR(nodemap)) {
+ mapped_uid = nodemap_map_id(nodemap, NODEMAP_UID,
+ NODEMAP_FS_TO_CLIENT,
+ oa->o_uid);
+ mapped_gid = nodemap_map_id(nodemap, NODEMAP_GID,
+ NODEMAP_FS_TO_CLIENT,
+ oa->o_gid);
+ mapped_projid = nodemap_map_id(nodemap, NODEMAP_PROJID,
+ NODEMAP_FS_TO_CLIENT,
+ oa->o_projid);
+ } else if (old_rc == 0) {
+ old_rc = PTR_ERR(nodemap);
+ }
if (!IS_ERR_OR_NULL(nodemap)) {
/* do not bypass quota enforcement if squashed uid */
LASSERT(info->oti_r_locks == 0);
LASSERT(info->oti_w_locks == 0);
LASSERT(info->oti_txns == 0);
+ LASSERTF(info->oti_dio_pages_used == 0, "%d\n",
+ info->oti_dio_pages_used);
}
/* type constructor/destructor: osd_type_init, osd_type_fini */