Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:15.5:Update
s390-tools.30305
s390-tools-sles15sp5-dasdfmt-Fall-back-to-full-...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File s390-tools-sles15sp5-dasdfmt-Fall-back-to-full-format-if-space-release-fa.patch of Package s390-tools.30305
--- dasdfmt/dasdfmt.8 | 11 ++++++++--- dasdfmt/dasdfmt.c | 23 ++++++++++++++++++----- 2 files changed, 26 insertions(+), 8 deletions(-) --- a/dasdfmt/dasdfmt.8 +++ b/dasdfmt/dasdfmt.8 @@ -128,12 +128,17 @@ Specify the \fImode\fR to be used to for .IP full Format the entire disk with the specified blocksize. (default) .IP quick -Format the first two tracks and write label and partition information. Only use -this option if you are sure that the target DASD already contains a regular +Format the first two tracks and write label and partition information. Use this +option only if you are sure that the target DASD already contains a regular format with the specified blocksize. A blocksize can optionally be specified using \fB-b\fR (\fB--blocksize\fR). .br -For thin-provisioned DASD ESE volumes this is the default mode. +For thin-provisioned DASD ESE volumes, quick is the default mode. A full space +release then precedes the formatting step. If this space release fails, dasdfmt +falls back to a full-format mode. Formatting stops if the space release fails +and quick mode was specified explicitly using \fB-M\fR. Specify the +\fB--no-discard\fR option to omit the space release. + .IP expand Format all unformatted tracks at the end of the target DASD. This mode assumes that tracks at the beginning of the DASD volume have already been correctly --- a/dasdfmt/dasdfmt.c +++ b/dasdfmt/dasdfmt.c @@ -1267,7 +1267,7 @@ static void dasdfmt_find_start(unsigned format_params->start_unit = first; } -static void dasdfmt_release_space(void) +static int dasdfmt_release_space(void) { format_data_t r = { .start_unit = 0, @@ -1277,12 +1277,21 @@ static void dasdfmt_release_space(void) int err = 0; if (!g.ese || g.no_discard) - return; + return 0; printf("Releasing space for the entire %s device...\n", g.dev_path); err = dasd_release_space(g.dev_node, &r); - if (err) + /* + * Warn or Error on failing RAS depending on QUICK mode set explicitly or automatically + */ + if (err && !g.mode_specified) { + warnx("Could not release space. Falling back to full format."); + return 1; + } else if (err && g.mode_specified) { error("Could not release space: %s", strerror(err)); + } + + return 0; } static void dasdfmt_prepare_and_format(unsigned int cylinders, unsigned int heads, @@ -1483,8 +1492,12 @@ static void do_format_dasd(volume_label_ dasdfmt_prepare_and_format(cylinders, heads, p); break; case QUICK: - dasdfmt_release_space(); - dasdfmt_quick_format(cylinders, heads, p); + if (dasdfmt_release_space()) { + p->stop_unit = (cylinders * heads) - 1; + dasdfmt_prepare_and_format(cylinders, heads, p); + } else { + dasdfmt_quick_format(cylinders, heads, p); + } break; case EXPAND: dasdfmt_expand_format(cylinders, heads, p);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor