[Devel] [PATCH RH8] ploop: Provide more info about ENOSPC
Kirill Tkhai
ktkhai at virtuozzo.com
Thu Oct 21 12:09:23 MSK 2021
On 20.10.2021 22:22, Cyrill Gorcunov wrote:
> On Wed, Oct 20, 2021 at 06:13:01PM +0300, Kirill Tkhai wrote:
> ...
>> diff --git a/drivers/md/dm-ploop-target.c b/drivers/md/dm-ploop-target.c
>> index 327095f75359..bd68d5fb272b 100644
>> --- a/drivers/md/dm-ploop-target.c
>> +++ b/drivers/md/dm-ploop-target.c
>> @@ -455,6 +455,8 @@ static void ploop_status(struct dm_target *ti, status_type_t type,
>> p += sprintf(p, "t");
>> if (READ_ONCE(ploop->noresume))
>> p += sprintf(p, "n");
>> + if (READ_ONCE(ploop->event_enospc))
>> + p += sprintf(p, "s");
>> if (p == stat)
>> p += sprintf(p, "o");
>> if (ploop->skip_off)
>
> While I've no clue what is going on here with this status I wonder why
> we use sprintf here at all? The sprintf is _very_ heavy function which
> consumes too much cycles for nothing, we don't even need any formatting
> here. Why not some simple
>
> static void ploop_status(struct dm_target *ti, status_type_t type,
> unsigned int status_flags, char *result,
> unsigned int maxlen)
> {
> struct ploop *ploop = ti->private;
> char stat[16], *p = stat;
> ssize_t sz = 0;
>
> down_read(&ploop->ctl_rwsem);
> if (ploop->falloc_new_clu)
> *p++ = 'f';
> if (ploop->tracking_bitmap)
> *p++ = 't';
> if (READ_ONCE(ploop->noresume))
> *p++ = 'n';
> if (p == stat)
> *p++ = 'o';
> *p = '\0';
> up_read(&ploop->ctl_rwsem);
>
> BUG_ON(p - stat >= sizeof(stat));
> DMEMIT("%u v2 %u %s", ploop->nr_deltas, (u32)CLU_TO_SEC(ploop, 1), stat);
> }
>
> or I miss something obvious?
Good idea. Could you please provide a proper patch reworking this function on top of my patch?
More information about the Devel
mailing list