Whamcloud - gitweb
LU-15993 ofd: don't leak pages if nodemap fails
[fs/lustre-release.git] / lustre / mdt / mdt_io.c
index 3892589..38b7ad1 100644 (file)
@@ -761,18 +761,24 @@ int mdt_obd_commitrw(const struct lu_env *env, int cmd, struct obd_export *exp,
                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)) {