xfs
[Top] [All Lists]

Re: [dm-devel] [PATCH v2 2/3] block: reorganize rounding of max_discard_

To: Vivek Goyal <vgoyal@xxxxxxxxxx>
Subject: Re: [dm-devel] [PATCH v2 2/3] block: reorganize rounding of max_discard_sectors
From: Paolo Bonzini <pbonzini@xxxxxxxxxx>
Date: Tue, 03 Jul 2012 13:47:31 +0200
Cc: linux-kernel@xxxxxxxxxxxxxxx, axboe@xxxxxxxxx, snitzer@xxxxxxxxxx, martin.petersen@xxxxxxxxxx, david@xxxxxxxxxxxxx, xfs@xxxxxxxxxxx, dm-devel@xxxxxxxxxx, hch@xxxxxx
In-reply-to: <20120703024910.GC3586@xxxxxxxxxx>
References: <1341235225-27551-1-git-send-email-pbonzini@xxxxxxxxxx> <1341235225-27551-3-git-send-email-pbonzini@xxxxxxxxxx> <20120703024910.GC3586@xxxxxxxxxx>
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:13.0) Gecko/20120605 Thunderbird/13.0
Il 03/07/2012 04:49, Vivek Goyal ha scritto:
>> > +  /* Zero-sector (unknown) and one-sector granularities are the same.  */
>> > +  granularity = max(q->limits.discard_granularity >> 9, 1U);
>> > +
>> >    /*
>> >     * Ensure that max_discard_sectors is of the proper
>> >     * granularity
>> >     */
>> >    max_discard_sectors = min(q->limits.max_discard_sectors, UINT_MAX >> 9);
>> > +  max_discard_sectors = round_down(max_discard_sectors, granularity);
>> >    if (unlikely(!max_discard_sectors)) {
>> >            /* Avoid infinite loop below. Being cautious never hurts. */
>> >            return -EOPNOTSUPP;
>> > -  } else if (q->limits.discard_granularity) {
>> > -          unsigned int disc_sects = q->limits.discard_granularity >> 9;
>> > -
>> > -          max_discard_sectors &= ~(disc_sects - 1);
> This is kind of odd. If discard_granularity is zero, we assume that
> discards are supported and granularity is 1. But if max_discard_sectors
> is zero, we assume discards are disabled. Not sure if we should treat
> max_discard_sectors and discard_granularity in same way or not.

Yes, this keeps the same behavior as before.  It is also the one that is
consistent with drivers/scsi/sd.c.  sd_config_discard always sets
limits.discard_granularity and then uses limits.max_discard_sectors to
disable discards.

Paolo

<Prev in Thread] Current Thread [Next in Thread>