[rhel7-branch][PATCH 2/3] Add a function to detect LDL DASDs. (#1170653)
Samantha N. Bueno
sbueno+anaconda at redhat.com
Thu Jun 18 16:15:40 UTC 2015
Add an isys function to determine whether a given DASD is LDL
formatted or not.
Resolves: rhbz#1170653
---
pyanaconda/isys/__init__.py | 8 +++++++
pyanaconda/isys/isys.c | 57 +++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 65 insertions(+)
diff --git a/pyanaconda/isys/__init__.py b/pyanaconda/isys/__init__.py
index 44f6144..8263212 100644
--- a/pyanaconda/isys/__init__.py
+++ b/pyanaconda/isys/__init__.py
@@ -180,4 +180,12 @@ def total_memory():
log.error("MemTotal: line not found in /proc/meminfo")
raise RuntimeError("MemTotal: line not found in /proc/meminfo")
+def isLdlDasd(devname):
+ """Check whether a device is an LDL DASD; this is s390x specific."""
+ ldl = _isys.isLdlDasd(devname)
+ if ldl:
+ log.info("%s is an LDL DASD, needs dasdfmt", devname)
+
+ return ldl
+
handleSegv = _isys.handleSegv
diff --git a/pyanaconda/isys/isys.c b/pyanaconda/isys/isys.c
index 23fb77f..45fa993 100644
--- a/pyanaconda/isys/isys.c
+++ b/pyanaconda/isys/isys.c
@@ -28,15 +28,24 @@
#include <signal.h>
#include <execinfo.h>
#include <stdlib.h>
+#include <sys/ioctl.h>
+#include <linux/fs.h>
+
+#if defined(__s390__) || defined(__s390x__)
+#include <s390utils/vtoc.h>
+#include <asm/dasd.h>
+#endif
static PyObject * doSync(PyObject * s, PyObject * args);
static PyObject * doSegvHandler(PyObject *s, PyObject *args);
static PyObject * doSetSystemTime(PyObject *s, PyObject *args);
+static PyObject * isLdlDasd(PyObject *s, PyObject *args);
static PyMethodDef isysModuleMethods[] = {
{ "sync", (PyCFunction) doSync, METH_VARARGS, NULL},
{ "handleSegv", (PyCFunction) doSegvHandler, METH_VARARGS, NULL },
{ "set_system_time", (PyCFunction) doSetSystemTime, METH_VARARGS, NULL},
+ { "isLdlDasd", (PyCFunction) isLdlDasd, METH_VARARGS, NULL},
{ NULL, NULL, 0, NULL }
} ;
@@ -89,4 +98,52 @@ static PyObject * doSetSystemTime(PyObject *s, PyObject *args) {
}
+static PyObject * isLdlDasd(PyObject *s, PyObject *args) {
+#if !defined(__s390__) && !defined(__s390x__)
+ return Py_BuildValue("i", 0);
+#else
+ char devname[16];
+ char *device = NULL;
+ int f = 0;
+ dasd_information2_t dasd_info;
+ int blksize = 0;
+
+ if (!PyArg_ParseTuple(args, "s", &(device))) {
+ return Py_BuildValue("i", 0);
+ }
+
+ memset(&dasd_info, 0, sizeof(dasd_info));
+ strcpy(devname, "/dev/");
+ strcat(devname, device);
+
+ if ((f = open(devname, O_RDONLY)) == -1) {
+ return Py_BuildValue("i", 0);
+ }
+
+ if (ioctl(f, BLKSSZGET, &blksize) != 0) {
+ close(f);
+ return Py_BuildValue("i", 0);
+ }
+
+ if (ioctl(f, BIODASDINFO2, &dasd_info) != 0) {
+ close(f);
+ return Py_BuildValue("i", 0);
+ }
+
+ close(f);
+
+ /* check we're not on an FBA DASD, since dasdfmt can't run on them */
+ if (strncmp(dasd_info.type, "FBA", 3) == 0)
+ return Py_BuildValue("i", 0);
+
+ /* check DASD volume label; "VOL1" is CDL formatted DASD, won't require formatting */
+ if (dasd_info.format == DASD_FORMAT_CDL) {
+ return Py_BuildValue("i", 0);
+ }
+ else {
+ return Py_BuildValue("i", 1);
+ }
+#endif
+}
+
/* vim:set shiftwidth=4 softtabstop=4: */
--
2.4.0
More information about the anaconda-patches
mailing list