m->m_info[mds].export_targets =
                                        kcalloc(num_export_targets, sizeof(u32),
                                                GFP_NOFS);
+                               if (m->m_info[mds].export_targets == NULL)
+                                       goto badmem;
                                for (j = 0; j < num_export_targets; j++)
                                        m->m_info[mds].export_targets[j] =
                                               ceph_decode_32(&pexport_targets);
                       DUMP_PREFIX_OFFSET, 16, 1,
                       start, end - start, true);
        ceph_mdsmap_destroy(m);
-       return ERR_PTR(-EINVAL);
+       return ERR_PTR(err);
 }
 
 void ceph_mdsmap_destroy(struct ceph_mdsmap *m)