forked from pool/s390-tools
Marcus Meissner
9b729e2acc
New package per "Factory first" policy. Please list me as bug owner and maintainer, if possible. OBS-URL: https://build.opensuse.org/request/show/459343 OBS-URL: https://build.opensuse.org/package/show/Base:System/s390-tools?expand=0&rev=1
94 lines
3.1 KiB
Diff
94 lines
3.1 KiB
Diff
Subject: [PATCH] [FEAT LS1501] dasdfmt: Add new formatting modes
|
|
From: Jan Höppner <hoeppner@linux.vnet.ibm.com>
|
|
|
|
Summary: dasdfmt: Add new formatting modes
|
|
Description: Introduce new formatting modes 'quick' and 'expand' to either
|
|
format an earlier formatted DASD that could potentially be
|
|
re-initialized very easily or format unformatted tracks at the
|
|
end of a device that was previously extended.
|
|
|
|
Also add the command line argument --check to provide a function
|
|
that checks a DASD volume for correct formatting.
|
|
Upstream-ID: -
|
|
Problem-ID: LS1501
|
|
|
|
Upstream-Description:
|
|
|
|
dasdfmt: Make the IOCTL BLKSSZGET reusable
|
|
|
|
The IOCTL BLKSSZGET is used to get blocksize information of a device.
|
|
Since it is used several times already and could be used for new
|
|
features as well, move the call to a separate function and make it
|
|
reusable.
|
|
|
|
Signed-off-by: Jan Höppner <hoeppner@linux.vnet.ibm.com>
|
|
Signed-off-by: Stefan Haberland <sth@linux.vnet.ibm.com>
|
|
|
|
|
|
Signed-off-by: Jan Höppner <hoeppner@linux.vnet.ibm.com>
|
|
---
|
|
dasdfmt/dasdfmt.c | 24 ++++++++++++++++--------
|
|
1 file changed, 16 insertions(+), 8 deletions(-)
|
|
|
|
--- a/dasdfmt/dasdfmt.c
|
|
+++ b/dasdfmt/dasdfmt.c
|
|
@@ -252,6 +252,17 @@ static void get_device_info(dasdfmt_info
|
|
}
|
|
|
|
/*
|
|
+ * Retrieve blocksize of device
|
|
+ */
|
|
+static void get_blocksize(unsigned int *blksize)
|
|
+{
|
|
+ if (ioctl(filedes, BLKSSZGET, blksize) != 0)
|
|
+ ERRMSG_EXIT(EXIT_FAILURE, "%s: the ioctl to get the blocksize "
|
|
+ "of the device failed (%s).\n", prog_name,
|
|
+ strerror(errno));
|
|
+}
|
|
+
|
|
+/*
|
|
* check for disk type and set some variables (e.g. usage count)
|
|
*/
|
|
static void check_disk(dasdfmt_info_t *info)
|
|
@@ -510,7 +521,7 @@ static void dasdfmt_print_info(dasdfmt_i
|
|
*/
|
|
static int dasdfmt_get_volser(dasdfmt_info_t *info, char *volser)
|
|
{
|
|
- int blksize;
|
|
+ unsigned int blksize;
|
|
int f;
|
|
volume_label_t vlabel;
|
|
|
|
@@ -519,9 +530,7 @@ static int dasdfmt_get_volser(dasdfmt_in
|
|
ERRMSG_EXIT(EXIT_FAILURE, "%s: Unable to open device %s: %s\n",
|
|
prog_name, info->devname, strerror(errno));
|
|
|
|
- if (ioctl(filedes, BLKSSZGET, &blksize) != 0)
|
|
- ERRMSG_EXIT(EXIT_FAILURE, "%s: (label pos) IOCTL BLKSSZGET "
|
|
- "failed (%s).\n", prog_name, strerror(errno));
|
|
+ get_blocksize(&blksize);
|
|
|
|
if (close(f) != 0)
|
|
ERRMSG("%s: error during close: %s\ncontinuing...\n",
|
|
@@ -551,7 +560,8 @@ static void dasdfmt_write_labels(dasdfmt
|
|
format4_label_t f4;
|
|
format5_label_t f5;
|
|
format7_label_t f7;
|
|
- int rc, blksize;
|
|
+ unsigned int blksize;
|
|
+ int rc;
|
|
void *ipl1_record, *ipl2_record;
|
|
int ipl1_record_len, ipl2_record_len;
|
|
|
|
@@ -559,9 +569,7 @@ static void dasdfmt_write_labels(dasdfmt
|
|
if (info->verbosity > 0)
|
|
printf("Retrieving dasd information... ");
|
|
|
|
- if (ioctl(filedes, BLKSSZGET, &blksize) != 0)
|
|
- ERRMSG_EXIT(EXIT_FAILURE, "%s: (write labels) IOCTL BLKSSZGET "
|
|
- "failed (%s).\n", prog_name, strerror(errno));
|
|
+ get_blocksize(&blksize);
|
|
|
|
/*
|
|
* Don't rely on the cylinders returned by HDIO_GETGEO, they might be
|