1*0Sstevel@tonic-gate /*
2*0Sstevel@tonic-gate * CDDL HEADER START
3*0Sstevel@tonic-gate *
4*0Sstevel@tonic-gate * The contents of this file are subject to the terms of the
5*0Sstevel@tonic-gate * Common Development and Distribution License, Version 1.0 only
6*0Sstevel@tonic-gate * (the "License"). You may not use this file except in compliance
7*0Sstevel@tonic-gate * with the License.
8*0Sstevel@tonic-gate *
9*0Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*0Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing.
11*0Sstevel@tonic-gate * See the License for the specific language governing permissions
12*0Sstevel@tonic-gate * and limitations under the License.
13*0Sstevel@tonic-gate *
14*0Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each
15*0Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*0Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the
17*0Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying
18*0Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner]
19*0Sstevel@tonic-gate *
20*0Sstevel@tonic-gate * CDDL HEADER END
21*0Sstevel@tonic-gate */
22*0Sstevel@tonic-gate /*
23*0Sstevel@tonic-gate * Copyright 2003 Sun Microsystems, Inc. All rights reserved.
24*0Sstevel@tonic-gate * Use is subject to license terms.
25*0Sstevel@tonic-gate */
26*0Sstevel@tonic-gate
27*0Sstevel@tonic-gate #pragma ident "%Z%%M% %I% %E% SMI"
28*0Sstevel@tonic-gate
29*0Sstevel@tonic-gate #include <libintl.h>
30*0Sstevel@tonic-gate #include <stdlib.h>
31*0Sstevel@tonic-gate
32*0Sstevel@tonic-gate #include "volume_error.h"
33*0Sstevel@tonic-gate #include "volume_output.h"
34*0Sstevel@tonic-gate #include "volume_string.h"
35*0Sstevel@tonic-gate
36*0Sstevel@tonic-gate #include "layout_messages.h"
37*0Sstevel@tonic-gate
38*0Sstevel@tonic-gate /*
39*0Sstevel@tonic-gate * FUNCTION: print_layout_volume_msg(char *type, uint64_t nbytes)
40*0Sstevel@tonic-gate *
41*0Sstevel@tonic-gate * PURPOSE: Prints a generic message indicating the start of the
42*0Sstevel@tonic-gate * layout process for a volume of the indicated type and
43*0Sstevel@tonic-gate * capacity.
44*0Sstevel@tonic-gate */
45*0Sstevel@tonic-gate void
print_layout_volume_msg(char * type,uint64_t nbytes)46*0Sstevel@tonic-gate print_layout_volume_msg(
47*0Sstevel@tonic-gate char *type,
48*0Sstevel@tonic-gate uint64_t nbytes)
49*0Sstevel@tonic-gate {
50*0Sstevel@tonic-gate char *spstr = NULL;
51*0Sstevel@tonic-gate
52*0Sstevel@tonic-gate (void) bytes_to_sizestr(nbytes, &spstr, universal_units, B_FALSE);
53*0Sstevel@tonic-gate
54*0Sstevel@tonic-gate oprintf(OUTPUT_VERBOSE,
55*0Sstevel@tonic-gate gettext(" ->Layout a %s with capacity %s\n"),
56*0Sstevel@tonic-gate type, spstr);
57*0Sstevel@tonic-gate
58*0Sstevel@tonic-gate free(spstr);
59*0Sstevel@tonic-gate }
60*0Sstevel@tonic-gate
61*0Sstevel@tonic-gate /*
62*0Sstevel@tonic-gate * FUNCTION: print_layout_explicit_msg(char *type)
63*0Sstevel@tonic-gate *
64*0Sstevel@tonic-gate * PURPOSE: Prints a generic message indicating the start of the
65*0Sstevel@tonic-gate * layout population process using explicit components
66*0Sstevel@tonic-gate * for a volume of the indicated type.
67*0Sstevel@tonic-gate */
68*0Sstevel@tonic-gate void
print_layout_explicit_msg(char * type)69*0Sstevel@tonic-gate print_layout_explicit_msg(
70*0Sstevel@tonic-gate char *type)
71*0Sstevel@tonic-gate {
72*0Sstevel@tonic-gate oprintf(OUTPUT_TERSE,
73*0Sstevel@tonic-gate gettext(" ->Layout a %s with explicitly specified "
74*0Sstevel@tonic-gate "components\n"),
75*0Sstevel@tonic-gate type);
76*0Sstevel@tonic-gate }
77*0Sstevel@tonic-gate
78*0Sstevel@tonic-gate /*
79*0Sstevel@tonic-gate * FUNCTION: print_layout_explicit_added_msg(char *comp)
80*0Sstevel@tonic-gate *
81*0Sstevel@tonic-gate * PURPOSE: Prints a generic message indicating the named component
82*0Sstevel@tonic-gate * was added to a volume.
83*0Sstevel@tonic-gate */
84*0Sstevel@tonic-gate void
print_layout_explicit_added_msg(char * comp)85*0Sstevel@tonic-gate print_layout_explicit_added_msg(
86*0Sstevel@tonic-gate char *comp)
87*0Sstevel@tonic-gate {
88*0Sstevel@tonic-gate oprintf(OUTPUT_TERSE, gettext(" ---->added '%s'\n"), comp);
89*0Sstevel@tonic-gate }
90*0Sstevel@tonic-gate
91*0Sstevel@tonic-gate /*
92*0Sstevel@tonic-gate * FUNCTION: print_success_msg()
93*0Sstevel@tonic-gate *
94*0Sstevel@tonic-gate * PURPOSE: Prints a generic layout success message.
95*0Sstevel@tonic-gate */
96*0Sstevel@tonic-gate void
print_layout_success_msg()97*0Sstevel@tonic-gate print_layout_success_msg()
98*0Sstevel@tonic-gate {
99*0Sstevel@tonic-gate oprintf(OUTPUT_TERSE, gettext(" <-Success!\n"));
100*0Sstevel@tonic-gate }
101*0Sstevel@tonic-gate
102*0Sstevel@tonic-gate /*
103*0Sstevel@tonic-gate * FUNCTION: print_insufficient_resources_msg(char *type)
104*0Sstevel@tonic-gate *
105*0Sstevel@tonic-gate * PURPOSE: Prints a message indicating that there are insufficient
106*0Sstevel@tonic-gate * resources.
107*0Sstevel@tonic-gate *
108*0Sstevel@tonic-gate * Also sets the metassist error string indicating why
109*0Sstevel@tonic-gate * the metassist command failed. The volume type is included
110*0Sstevel@tonic-gate * for context in this message.
111*0Sstevel@tonic-gate */
112*0Sstevel@tonic-gate void
print_insufficient_resources_msg(char * type)113*0Sstevel@tonic-gate print_insufficient_resources_msg(
114*0Sstevel@tonic-gate char *type)
115*0Sstevel@tonic-gate {
116*0Sstevel@tonic-gate oprintf(OUTPUT_TERSE,
117*0Sstevel@tonic-gate gettext(" <-Failed: insufficient resources available\n"));
118*0Sstevel@tonic-gate
119*0Sstevel@tonic-gate volume_set_error(
120*0Sstevel@tonic-gate gettext("insufficient resources available to complete "
121*0Sstevel@tonic-gate "requested %s\n"),
122*0Sstevel@tonic-gate type);
123*0Sstevel@tonic-gate }
124*0Sstevel@tonic-gate
125*0Sstevel@tonic-gate /*
126*0Sstevel@tonic-gate * FUNCTION: print_insufficient_hbas_msg(int n)
127*0Sstevel@tonic-gate *
128*0Sstevel@tonic-gate * PURPOSE: Prints a status message indicating that there are insufficient
129*0Sstevel@tonic-gate * HBAs and that only 'n' are available.
130*0Sstevel@tonic-gate *
131*0Sstevel@tonic-gate * Used to indicate strategy selection during layouts.
132*0Sstevel@tonic-gate */
133*0Sstevel@tonic-gate void
print_insufficient_hbas_msg(int n)134*0Sstevel@tonic-gate print_insufficient_hbas_msg(
135*0Sstevel@tonic-gate int n)
136*0Sstevel@tonic-gate {
137*0Sstevel@tonic-gate if (n == 0) {
138*0Sstevel@tonic-gate oprintf(OUTPUT_VERBOSE,
139*0Sstevel@tonic-gate gettext(" <--Failed: no HBA has sufficient disks\n"));
140*0Sstevel@tonic-gate } else if (n == 1) {
141*0Sstevel@tonic-gate oprintf(OUTPUT_VERBOSE,
142*0Sstevel@tonic-gate gettext(" <--Failed: only 1 HBA has sufficient disks\n"));
143*0Sstevel@tonic-gate } else {
144*0Sstevel@tonic-gate oprintf(OUTPUT_VERBOSE,
145*0Sstevel@tonic-gate gettext(" <--Failed: only %d HBAs have sufficient disks\n"),
146*0Sstevel@tonic-gate n);
147*0Sstevel@tonic-gate }
148*0Sstevel@tonic-gate }
149*0Sstevel@tonic-gate
150*0Sstevel@tonic-gate /*
151*0Sstevel@tonic-gate * FUNCTION: print_insufficient_disks_msg(int n)
152*0Sstevel@tonic-gate *
153*0Sstevel@tonic-gate * PURPOSE: Prints a status message indicating that there are insufficient
154*0Sstevel@tonic-gate * disks and that only 'n' are available.
155*0Sstevel@tonic-gate *
156*0Sstevel@tonic-gate * Used to indicate strategy selection during layouts.
157*0Sstevel@tonic-gate */
158*0Sstevel@tonic-gate void
print_insufficient_disks_msg(int n)159*0Sstevel@tonic-gate print_insufficient_disks_msg(
160*0Sstevel@tonic-gate int n)
161*0Sstevel@tonic-gate {
162*0Sstevel@tonic-gate if (n == 0) {
163*0Sstevel@tonic-gate oprintf(OUTPUT_VERBOSE,
164*0Sstevel@tonic-gate gettext(" <--Failed: no disks available\n"),
165*0Sstevel@tonic-gate n);
166*0Sstevel@tonic-gate } else if (n == 1) {
167*0Sstevel@tonic-gate oprintf(OUTPUT_VERBOSE,
168*0Sstevel@tonic-gate gettext(" <--Failed: only 1 disk available\n"),
169*0Sstevel@tonic-gate n);
170*0Sstevel@tonic-gate } else {
171*0Sstevel@tonic-gate oprintf(OUTPUT_VERBOSE,
172*0Sstevel@tonic-gate gettext(" <--Failed: only %d disks available\n"),
173*0Sstevel@tonic-gate n);
174*0Sstevel@tonic-gate }
175*0Sstevel@tonic-gate }
176*0Sstevel@tonic-gate
177*0Sstevel@tonic-gate /*
178*0Sstevel@tonic-gate * FUNCTION: print_no_hbas_msg()
179*0Sstevel@tonic-gate *
180*0Sstevel@tonic-gate * PURPOSE: Prints a layout failure due to no usable HBAs message.
181*0Sstevel@tonic-gate */
182*0Sstevel@tonic-gate void
print_no_hbas_msg()183*0Sstevel@tonic-gate print_no_hbas_msg()
184*0Sstevel@tonic-gate {
185*0Sstevel@tonic-gate oprintf(OUTPUT_TERSE,
186*0Sstevel@tonic-gate gettext(" There are no usable HBAs.\n"));
187*0Sstevel@tonic-gate }
188*0Sstevel@tonic-gate
189*0Sstevel@tonic-gate /*
190*0Sstevel@tonic-gate * FUNCTION: print_debug_failure_msg(char *type, char *err)
191*0Sstevel@tonic-gate *
192*0Sstevel@tonic-gate * PURPOSE: Prints a generic message for unexpected failures
193*0Sstevel@tonic-gate * during layout.
194*0Sstevel@tonic-gate */
195*0Sstevel@tonic-gate void
print_debug_failure_msg(char * type,char * err)196*0Sstevel@tonic-gate print_debug_failure_msg(
197*0Sstevel@tonic-gate char *type,
198*0Sstevel@tonic-gate char *err)
199*0Sstevel@tonic-gate {
200*0Sstevel@tonic-gate oprintf(OUTPUT_DEBUG,
201*0Sstevel@tonic-gate gettext(" layout of %s failed: %s\n"),
202*0Sstevel@tonic-gate type, err);
203*0Sstevel@tonic-gate }
204*0Sstevel@tonic-gate
205*0Sstevel@tonic-gate /*
206*0Sstevel@tonic-gate * FUNCTION: print_insufficient_components_msg(int ncomp)
207*0Sstevel@tonic-gate *
208*0Sstevel@tonic-gate * INPUT: ncomp - number of available components
209*0Sstevel@tonic-gate *
210*0Sstevel@tonic-gate * PURPOSE: Helper to print out a message indicating that there
211*0Sstevel@tonic-gate * are insufficient components for a volume, only ncomps
212*0Sstevel@tonic-gate * are actually available.
213*0Sstevel@tonic-gate */
214*0Sstevel@tonic-gate void
print_insufficient_components_msg(int ncomp)215*0Sstevel@tonic-gate print_insufficient_components_msg(
216*0Sstevel@tonic-gate int ncomp)
217*0Sstevel@tonic-gate {
218*0Sstevel@tonic-gate oprintf(OUTPUT_VERBOSE,
219*0Sstevel@tonic-gate gettext(" <---Failed: only found %d components\n"), ncomp);
220*0Sstevel@tonic-gate }
221*0Sstevel@tonic-gate
222*0Sstevel@tonic-gate /*
223*0Sstevel@tonic-gate * FUNCTION: print_hba_insufficient_space_msg(char *name, uint64_t nbytes)
224*0Sstevel@tonic-gate *
225*0Sstevel@tonic-gate * INPUT: name - a char * HBA name
226*0Sstevel@tonic-gate *
227*0Sstevel@tonic-gate * RETURNS: int - 0 on success
228*0Sstevel@tonic-gate * !0 otherwise.
229*0Sstevel@tonic-gate *
230*0Sstevel@tonic-gate * PURPOSE: Helper to print out a message indicating the the HBA has
231*0Sstevel@tonic-gate * insufficient space for use by the mirror layout strategy.
232*0Sstevel@tonic-gate */
233*0Sstevel@tonic-gate void
print_hba_insufficient_space_msg(char * name,uint64_t nbytes)234*0Sstevel@tonic-gate print_hba_insufficient_space_msg(
235*0Sstevel@tonic-gate char *name,
236*0Sstevel@tonic-gate uint64_t nbytes)
237*0Sstevel@tonic-gate {
238*0Sstevel@tonic-gate char *spstr = NULL;
239*0Sstevel@tonic-gate
240*0Sstevel@tonic-gate (void) bytes_to_sizestr(nbytes, &spstr, universal_units, B_FALSE);
241*0Sstevel@tonic-gate
242*0Sstevel@tonic-gate oprintf(OUTPUT_VERBOSE,
243*0Sstevel@tonic-gate gettext(" <--Failed: '%s' only has %s available\n"),
244*0Sstevel@tonic-gate name, spstr);
245*0Sstevel@tonic-gate
246*0Sstevel@tonic-gate free(spstr);
247*0Sstevel@tonic-gate }
248*0Sstevel@tonic-gate
249*0Sstevel@tonic-gate /*
250*0Sstevel@tonic-gate * FUNCTION: print_insufficient_capacity_msg(uint64_t nbytes)
251*0Sstevel@tonic-gate *
252*0Sstevel@tonic-gate * INPUT: nbytes - available capacity in bytes
253*0Sstevel@tonic-gate *
254*0Sstevel@tonic-gate * PURPOSE: Helper to print out a message indicating that there
255*0Sstevel@tonic-gate * is insufficient space for a volume, only nbytes are
256*0Sstevel@tonic-gate * actually available.
257*0Sstevel@tonic-gate */
258*0Sstevel@tonic-gate void
print_insufficient_capacity_msg(uint64_t nbytes)259*0Sstevel@tonic-gate print_insufficient_capacity_msg(
260*0Sstevel@tonic-gate uint64_t nbytes)
261*0Sstevel@tonic-gate {
262*0Sstevel@tonic-gate char *spstr = NULL;
263*0Sstevel@tonic-gate
264*0Sstevel@tonic-gate (void) bytes_to_sizestr(nbytes, &spstr, universal_units, B_FALSE);
265*0Sstevel@tonic-gate
266*0Sstevel@tonic-gate oprintf(OUTPUT_VERBOSE,
267*0Sstevel@tonic-gate gettext(" <---Failed: only found %s capacity\n"), spstr);
268*0Sstevel@tonic-gate
269*0Sstevel@tonic-gate free(spstr);
270*0Sstevel@tonic-gate }
271*0Sstevel@tonic-gate
272*0Sstevel@tonic-gate /*
273*0Sstevel@tonic-gate * FUNCTION: print_layout_submirrors_msg(char *type, uint64_t nbytes,
274*0Sstevel@tonic-gate * int nsubs)
275*0Sstevel@tonic-gate *
276*0Sstevel@tonic-gate * PURPOSE: Prints a generic status message indicating that layout of
277*0Sstevel@tonic-gate * nsub submirrors of the indicated type and size has begun.
278*0Sstevel@tonic-gate */
279*0Sstevel@tonic-gate void
print_layout_submirrors_msg(char * type,uint64_t nbytes,int nsubs)280*0Sstevel@tonic-gate print_layout_submirrors_msg(
281*0Sstevel@tonic-gate char *type,
282*0Sstevel@tonic-gate uint64_t nbytes,
283*0Sstevel@tonic-gate int nsubs)
284*0Sstevel@tonic-gate {
285*0Sstevel@tonic-gate char *spstr = NULL;
286*0Sstevel@tonic-gate
287*0Sstevel@tonic-gate (void) bytes_to_sizestr(nbytes, &spstr, universal_units, B_FALSE);
288*0Sstevel@tonic-gate
289*0Sstevel@tonic-gate oprintf(OUTPUT_TERSE,
290*0Sstevel@tonic-gate gettext(" -->Layout %d %s submirrors with capacity %s\n"),
291*0Sstevel@tonic-gate nsubs, type, spstr);
292*0Sstevel@tonic-gate
293*0Sstevel@tonic-gate free(spstr);
294*0Sstevel@tonic-gate }
295*0Sstevel@tonic-gate
296*0Sstevel@tonic-gate /*
297*0Sstevel@tonic-gate * FUNCTION: print_layout_submirrors_failed_msg(char *type, int count,
298*0Sstevel@tonic-gate * int nsubs)
299*0Sstevel@tonic-gate *
300*0Sstevel@tonic-gate * PURPOSE: Prints a generic status message indicating that only count
301*0Sstevel@tonic-gate * submirrors (out of nsubs) of the indicated type could be
302*0Sstevel@tonic-gate * composed.
303*0Sstevel@tonic-gate */
304*0Sstevel@tonic-gate void
print_layout_submirrors_failed_msg(char * type,int count,int nsubs)305*0Sstevel@tonic-gate print_layout_submirrors_failed_msg(
306*0Sstevel@tonic-gate char *type,
307*0Sstevel@tonic-gate int count,
308*0Sstevel@tonic-gate int nsubs)
309*0Sstevel@tonic-gate {
310*0Sstevel@tonic-gate if (count == 0) {
311*0Sstevel@tonic-gate oprintf(OUTPUT_VERBOSE,
312*0Sstevel@tonic-gate gettext(" <---Failed, no %s submirrors could "
313*0Sstevel@tonic-gate "be composed.\n"),
314*0Sstevel@tonic-gate type);
315*0Sstevel@tonic-gate } else {
316*0Sstevel@tonic-gate oprintf(OUTPUT_VERBOSE,
317*0Sstevel@tonic-gate gettext(" <---Failed, only %d of %d %s submirror(s) "
318*0Sstevel@tonic-gate "could be composed.\n"),
319*0Sstevel@tonic-gate count, nsubs, type);
320*0Sstevel@tonic-gate }
321*0Sstevel@tonic-gate }
322*0Sstevel@tonic-gate
323*0Sstevel@tonic-gate /*
324*0Sstevel@tonic-gate * FUNCTION: print_populate_volume_msg(char *type, uint64_t nbytes)
325*0Sstevel@tonic-gate *
326*0Sstevel@tonic-gate * PURPOSE: Prints a generic message indicating a population process
327*0Sstevel@tonic-gate * for a volume of the indicated type and size is beginning.
328*0Sstevel@tonic-gate */
329*0Sstevel@tonic-gate void
print_populate_volume_msg(char * type,uint64_t nbytes)330*0Sstevel@tonic-gate print_populate_volume_msg(
331*0Sstevel@tonic-gate char *type,
332*0Sstevel@tonic-gate uint64_t nbytes)
333*0Sstevel@tonic-gate {
334*0Sstevel@tonic-gate char *spstr = NULL;
335*0Sstevel@tonic-gate
336*0Sstevel@tonic-gate (void) bytes_to_sizestr(nbytes, &spstr, universal_units, B_FALSE);
337*0Sstevel@tonic-gate
338*0Sstevel@tonic-gate oprintf(OUTPUT_TERSE,
339*0Sstevel@tonic-gate gettext(" --->Populate a %s of capacity %s\n"),
340*0Sstevel@tonic-gate type, spstr);
341*0Sstevel@tonic-gate
342*0Sstevel@tonic-gate free(spstr);
343*0Sstevel@tonic-gate }
344*0Sstevel@tonic-gate
345*0Sstevel@tonic-gate /*
346*0Sstevel@tonic-gate * FUNCTION: print_populate_volume_ncomps_msg(char *type, uint64_t nbytes,
347*0Sstevel@tonic-gate * int ncomps)
348*0Sstevel@tonic-gate *
349*0Sstevel@tonic-gate * PURPOSE: Prints a generic message indicating a population process
350*0Sstevel@tonic-gate * for a volume of the indicated type, size and number of
351*0Sstevel@tonic-gate * components is beginning.
352*0Sstevel@tonic-gate */
353*0Sstevel@tonic-gate void
print_populate_volume_ncomps_msg(char * type,uint64_t nbytes,int ncomps)354*0Sstevel@tonic-gate print_populate_volume_ncomps_msg(
355*0Sstevel@tonic-gate char *type,
356*0Sstevel@tonic-gate uint64_t nbytes,
357*0Sstevel@tonic-gate int ncomps)
358*0Sstevel@tonic-gate {
359*0Sstevel@tonic-gate char *spstr = NULL;
360*0Sstevel@tonic-gate
361*0Sstevel@tonic-gate (void) bytes_to_sizestr(nbytes, &spstr, universal_units, B_FALSE);
362*0Sstevel@tonic-gate
363*0Sstevel@tonic-gate oprintf(OUTPUT_TERSE,
364*0Sstevel@tonic-gate gettext(" --->Populate a %s of capacity %s (%d components)\n"),
365*0Sstevel@tonic-gate type, spstr, ncomps);
366*0Sstevel@tonic-gate
367*0Sstevel@tonic-gate free(spstr);
368*0Sstevel@tonic-gate }
369*0Sstevel@tonic-gate
370*0Sstevel@tonic-gate /*
371*0Sstevel@tonic-gate * FUNCTION: print_populate_success_msg()
372*0Sstevel@tonic-gate *
373*0Sstevel@tonic-gate * PURPOSE: Prints a generic message indicating a population process
374*0Sstevel@tonic-gate * completed successfully.
375*0Sstevel@tonic-gate */
376*0Sstevel@tonic-gate void
print_populate_success_msg()377*0Sstevel@tonic-gate print_populate_success_msg()
378*0Sstevel@tonic-gate {
379*0Sstevel@tonic-gate oprintf(OUTPUT_TERSE,
380*0Sstevel@tonic-gate gettext(" <---Success!\n"));
381*0Sstevel@tonic-gate }
382*0Sstevel@tonic-gate
383*0Sstevel@tonic-gate /*
384*0Sstevel@tonic-gate * FUNCTION: print_populate_choose_slices_msg()
385*0Sstevel@tonic-gate *
386*0Sstevel@tonic-gate * PURPOSE: Prints a generic message indicating a population process
387*0Sstevel@tonic-gate * is beginning to choose slices.
388*0Sstevel@tonic-gate */
389*0Sstevel@tonic-gate void
print_populate_choose_slices_msg()390*0Sstevel@tonic-gate print_populate_choose_slices_msg()
391*0Sstevel@tonic-gate {
392*0Sstevel@tonic-gate oprintf(OUTPUT_VERBOSE,
393*0Sstevel@tonic-gate gettext(" choosing \"best\" slices from "
394*0Sstevel@tonic-gate "those available...\n"));
395*0Sstevel@tonic-gate }
396*0Sstevel@tonic-gate
397*0Sstevel@tonic-gate /*
398*0Sstevel@tonic-gate * FUNCTION: print_populate_no_slices_msg()
399*0Sstevel@tonic-gate *
400*0Sstevel@tonic-gate * PURPOSE: Prints a layout failure due to no available slices message.
401*0Sstevel@tonic-gate */
402*0Sstevel@tonic-gate void
print_populate_no_slices_msg()403*0Sstevel@tonic-gate print_populate_no_slices_msg()
404*0Sstevel@tonic-gate {
405*0Sstevel@tonic-gate oprintf(OUTPUT_VERBOSE,
406*0Sstevel@tonic-gate gettext(" <---Failed: there are no slices available.\n"));
407*0Sstevel@tonic-gate }
408