diff --git a/ndb/include/mgmapi/ndbd_exit_codes.h b/ndb/include/mgmapi/ndbd_exit_codes.h
index b8a65b54672697fffb514c1823dc1809ecb2e6cc..1051fd9e394446c011e4f0749564e0d66a5cbfee 100644
--- a/ndb/include/mgmapi/ndbd_exit_codes.h
+++ b/ndb/include/mgmapi/ndbd_exit_codes.h
@@ -80,6 +80,7 @@ typedef ndbd_exit_classification_enum ndbd_exit_classification;
 #define NDBD_EXIT_SR_UNDOLOG                  2313 
 #define NDBD_EXIT_SINGLE_USER_MODE            2314 
 #define NDBD_EXIT_NODE_DECLARED_DEAD          2315 
+#define NDBD_EXIT_SR_SCHEMAFILE               2316
 #define NDBD_EXIT_MEMALLOC                    2327
 #define NDBD_EXIT_BLOCK_JBUFCONGESTION        2334
 #define NDBD_EXIT_TIME_QUEUE_SHORT            2335
diff --git a/ndb/src/kernel/blocks/dbdict/Dbdict.cpp b/ndb/src/kernel/blocks/dbdict/Dbdict.cpp
index a039c1bdbe7517ca2e7d788f68729f8e1b91575c..fd7aabc8b67503badc3c5546c052e31da2ad849b 100644
--- a/ndb/src/kernel/blocks/dbdict/Dbdict.cpp
+++ b/ndb/src/kernel/blocks/dbdict/Dbdict.cpp
@@ -1069,14 +1069,24 @@ void Dbdict::readSchemaConf(Signal* signal,
 
   for (Uint32 n = 0; n < xsf->noOfPages; n++) {
     SchemaFile * sf = &xsf->schemaPage[n];
-    bool ok =
-      memcmp(sf->Magic, NDB_SF_MAGIC, sizeof(sf->Magic)) == 0 &&
-      sf->FileSize != 0 &&
-      sf->FileSize % NDB_SF_PAGE_SIZE == 0 &&
-      sf->FileSize == sf0->FileSize &&
-      sf->PageNumber == n &&
-      computeChecksum((Uint32*)sf, NDB_SF_PAGE_SIZE_IN_WORDS) == 0;
-    ndbrequire(ok || !crashInd);
+    bool ok = false;
+    if (memcmp(sf->Magic, NDB_SF_MAGIC, sizeof(sf->Magic)) != 0)
+    { jam(); }
+    else if (sf->FileSize == 0)
+    { jam(); }
+    else if (sf->FileSize % NDB_SF_PAGE_SIZE != 0)
+    { jam(); }
+    else if (sf->FileSize != sf0->FileSize)
+    { jam(); }
+    else if (sf->PageNumber != n)
+    { jam(); }
+    else if (computeChecksum((Uint32*)sf, NDB_SF_PAGE_SIZE_IN_WORDS) != 0)
+    { jam(); }
+    else if (crashInd)
+    { jam(); }
+    else
+      ok = true;
+    ndbrequireErr(ok, NDBD_EXIT_SR_SCHEMAFILE);
     if (! ok) {
       jam();
       ndbrequire(fsPtr.p->fsState == FsConnectRecord::READ_SCHEMA1);
diff --git a/ndb/src/kernel/error/ndbd_exit_codes.c b/ndb/src/kernel/error/ndbd_exit_codes.c
index 68d8f22f1589ba8b162a9a94a54d22aae20cd801..92bee522d24eedbf2429a63215ff7294cbb5f167 100644
--- a/ndb/src/kernel/error/ndbd_exit_codes.c
+++ b/ndb/src/kernel/error/ndbd_exit_codes.c
@@ -65,6 +65,7 @@ static const ErrStruct errArray[] =
    {NDBD_EXIT_NODE_NOT_DEAD, XRE, "Internal node state conflict, "
     "most probably resolved by restarting node again"},
    {NDBD_EXIT_SR_REDOLOG, XFI, "Error while reading the REDO log"},
+   {NDBD_EXIT_SR_SCHEMAFILE, XFI, "Error while reading the schema file"},
    /* Currently unused? */
    {2311, XIE, "Conflict when selecting restart type"},
    {NDBD_EXIT_NO_MORE_UNDOLOG, XCR,