aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/md/dm-stripe.c23
1 files changed, 22 insertions, 1 deletions
diff --git a/drivers/md/dm-stripe.c b/drivers/md/dm-stripe.c
index 7c5e2a0c3f2d..4de90ab3968b 100644
--- a/drivers/md/dm-stripe.c
+++ b/drivers/md/dm-stripe.c
@@ -222,16 +222,37 @@ static int stripe_map(struct dm_target *ti, struct bio *bio,
222 return DM_MAPIO_REMAPPED; 222 return DM_MAPIO_REMAPPED;
223} 223}
224 224
225/*
226 * Stripe status:
227 *
228 * INFO
229 * #stripes [stripe_name <stripe_name>] [group word count]
230 * [error count 'A|D' <error count 'A|D'>]
231 *
232 * TABLE
233 * #stripes [stripe chunk size]
234 * [stripe_name physical_start <stripe_name physical_start>]
235 *
236 */
237
225static int stripe_status(struct dm_target *ti, 238static int stripe_status(struct dm_target *ti,
226 status_type_t type, char *result, unsigned int maxlen) 239 status_type_t type, char *result, unsigned int maxlen)
227{ 240{
228 struct stripe_c *sc = (struct stripe_c *) ti->private; 241 struct stripe_c *sc = (struct stripe_c *) ti->private;
242 char buffer[sc->stripes + 1];
229 unsigned int sz = 0; 243 unsigned int sz = 0;
230 unsigned int i; 244 unsigned int i;
231 245
232 switch (type) { 246 switch (type) {
233 case STATUSTYPE_INFO: 247 case STATUSTYPE_INFO:
234 result[0] = '\0'; 248 DMEMIT("%d ", sc->stripes);
249 for (i = 0; i < sc->stripes; i++) {
250 DMEMIT("%s ", sc->stripe[i].dev->name);
251 buffer[i] = atomic_read(&(sc->stripe[i].error_count)) ?
252 'D' : 'A';
253 }
254 buffer[i] = '\0';
255 DMEMIT("1 %s", buffer);
235 break; 256 break;
236 257
237 case STATUSTYPE_TABLE: 258 case STATUSTYPE_TABLE: