6427527f2b
release which are actively being worked on. The 3.10 release does not work with the installer right now.
132 lines
4.6 KiB
Diff
132 lines
4.6 KiB
Diff
From 36384816c56d666bbf3492ddcc531bf4c4a38674 Mon Sep 17 00:00:00 2001
|
|
From: Nageswara R Sastry <rnsastry@linux.vnet.ibm.com>
|
|
Date: Thu, 23 May 2013 09:14:10 -0400
|
|
Subject: [PATCH 03/03] Subject: [PATCH] pyparted: export ped_disk_new
|
|
functionality
|
|
|
|
Fixed Block Access (FBA) DASDs are mainframe-specific disk devices
|
|
which are layed out as a sequence of 512-byte sectors. In contrast
|
|
to ECKD DASDs, these disks do not require formatting and resemble
|
|
the LBA layout of non-mainframe disks. Despite this resemblance,
|
|
the Linux kernel applies special handling during partition detection
|
|
for FBA DASDs, resulting in a single, immutable partition being
|
|
reported.
|
|
|
|
While actual FBA DASD hardware is no longer available, the z/VM
|
|
hypervisor can simulate FBA DASD disks, backed by either ECKD or
|
|
SCSI devices.
|
|
|
|
This patch adds support for FBA DASD partitions and successful
|
|
installation by Anaconda.
|
|
|
|
Signed-off-by: Nageswara R Sastry <rnsastry@linux.vnet.ibm.com>
|
|
---
|
|
include/pydisk.h | 1 +
|
|
src/_pedmodule.c | 7 +++++++
|
|
src/parted/__init__.py | 9 +++++++++
|
|
src/pydisk.c | 32 ++++++++++++++++++++++++++++++++
|
|
4 files changed, 49 insertions(+)
|
|
|
|
diff --git a/include/pydisk.h b/include/pydisk.h
|
|
index c0bf92e..a2bcc4f 100644
|
|
--- a/include/pydisk.h
|
|
+++ b/include/pydisk.h
|
|
@@ -152,6 +152,7 @@ PyObject *py_ped_disk_get_partition(PyObject *, PyObject *);
|
|
PyObject *py_ped_disk_get_partition_by_sector(PyObject *, PyObject *);
|
|
PyObject *py_ped_disk_extended_partition(PyObject *, PyObject *);
|
|
PyObject *py_ped_disk_new_fresh(PyObject *, PyObject *);
|
|
+PyObject *py_ped_disk_new(PyObject *, PyObject *);
|
|
|
|
#endif /* PYDISK_H_INCLUDED */
|
|
|
|
diff --git a/src/_pedmodule.c b/src/_pedmodule.c
|
|
index add0e8c..efdf831 100644
|
|
--- a/src/_pedmodule.c
|
|
+++ b/src/_pedmodule.c
|
|
@@ -162,6 +162,11 @@ PyDoc_STRVAR(disk_new_fresh_doc,
|
|
"will have to use the commit_to_dev() method to write the new label to\n"
|
|
"the disk.");
|
|
|
|
+PyDoc_STRVAR(disk_new_doc,
|
|
+"disk_new(Device) -> Disk\n\n"
|
|
+"Given the Device, create a new Disk object. And probe, read the details of\n"
|
|
+"the disk.");
|
|
+
|
|
PyDoc_STRVAR(disk_flag_get_name_doc,
|
|
"disk_flag_get_name(integer) -> string\n\n"
|
|
"Return a name for a disk flag constant. If an invalid flag is provided,\n"
|
|
@@ -252,6 +257,8 @@ static struct PyMethodDef PyPedModuleMethods[] = {
|
|
METH_VARARGS, partition_flag_next_doc},
|
|
{"disk_new_fresh", (PyCFunction) py_ped_disk_new_fresh,
|
|
METH_VARARGS, disk_new_fresh_doc},
|
|
+ {"disk_new", (PyCFunction) py_ped_disk_new,
|
|
+ METH_VARARGS, disk_new_doc},
|
|
{"disk_flag_get_name", (PyCFunction) py_ped_disk_flag_get_name,
|
|
METH_VARARGS, disk_flag_get_name_doc},
|
|
{"disk_flag_get_by_name", (PyCFunction) py_ped_disk_flag_get_by_name,
|
|
diff --git a/src/parted/__init__.py b/src/parted/__init__.py
|
|
index 01f9575..0eb23d2 100644
|
|
--- a/src/parted/__init__.py
|
|
+++ b/src/parted/__init__.py
|
|
@@ -418,6 +418,15 @@ def freshDisk(device, ty):
|
|
return Disk(PedDisk=peddisk)
|
|
|
|
@localeC
|
|
+def newDisk(device):
|
|
+ """Return a Disk object for this Device. Read the partition table off
|
|
+ a device (if one is found)."""
|
|
+ from _ped import disk_new
|
|
+
|
|
+ peddisk = disk_new(device.getPedDevice())
|
|
+ return Disk(PedDisk=peddisk)
|
|
+
|
|
+@localeC
|
|
def version():
|
|
"""Return a dict containing the pyparted and libparted versions."""
|
|
from _ped import libparted_version
|
|
diff --git a/src/pydisk.c b/src/pydisk.c
|
|
index f58eeef..4e70f55 100644
|
|
--- a/src/pydisk.c
|
|
+++ b/src/pydisk.c
|
|
@@ -2004,5 +2004,37 @@ PyObject *py_ped_disk_new_fresh(PyObject *s, PyObject *args) {
|
|
return (PyObject *) ret;
|
|
}
|
|
|
|
+PyObject *py_ped_disk_new(PyObject *s, PyObject *args) {
|
|
+ _ped_Device *in_device = NULL;
|
|
+ PedDevice *device = NULL;
|
|
+ PedDisk *disk = NULL;
|
|
+ _ped_Disk *ret = NULL;
|
|
+
|
|
+ if (!PyArg_ParseTuple(args, "O!", &_ped_Device_Type_obj, &in_device)) {
|
|
+ return NULL;
|
|
+ }
|
|
+
|
|
+ if ((device = _ped_Device2PedDevice((PyObject *) in_device)) == NULL) {
|
|
+ return NULL;
|
|
+ }
|
|
+
|
|
+ if ((disk = ped_disk_new(device)) == NULL) {
|
|
+ if (partedExnRaised) {
|
|
+ partedExnRaised = 0;
|
|
+
|
|
+ if (!PyErr_ExceptionMatches(PartedException) &&
|
|
+ !PyErr_ExceptionMatches(PyExc_NotImplementedError))
|
|
+ PyErr_SetString(DiskException, partedExnMessage);
|
|
+ } else {
|
|
+ PyErr_Format(DiskException, "Could not create new disk label on %s", disk->dev->path);
|
|
+ }
|
|
+
|
|
+ return NULL;
|
|
+ }
|
|
+
|
|
+ ret = PedDisk2_ped_Disk(disk);
|
|
+ return (PyObject *) ret;
|
|
+}
|
|
+
|
|
/* vim:tw=78:ts=4:et:sw=4
|
|
*/
|
|
--
|
|
1.8.1.2
|
|
|