Re: [PATCH 06/10] Block discard support

Nitin Gupta
2010-08-10T04:54:33Z

On 08/10/2010 07:53 AM, Jens Axboe wrote:
> On 08/09/2010 03:03 PM, Pekka Enberg wrote:
>> On Mon, Aug 9, 2010 at 8:26 PM, Nitin Gupta <ngupta@vflare.org> wrote:
>>> The 'discard' bio discard request provides information to
>>> zram disks regarding blocks which are no longer in use by
>>> filesystem. This allows freeing memory allocated for such
>>> blocks.
>>>
>>> When zram devices are used as swap disks, we already have
>>> a callback (block_device_operations->swap_slot_free_notify).
>>> So, the discard support is useful only when used as generic
>>> (non-swap) disk.
>>>
>>> Signed-off-by: Nitin Gupta <ngupta@vflare.org>
>>
>> Lets CC fsdevel and Jens for this.
>
> Looks OK from a quick look. One comment, though:
>
>>> +static void zram_discard(struct zram *zram, struct bio *bio)
>>> +{
>>> + size_t bytes = bio->bi_size;
>>> + sector_t sector = bio->bi_sector;
>>> +
>>> + while (bytes >= PAGE_SIZE) {
>>> + zram_free_page(zram, sector >> SECTORS_PER_PAGE_SHIFT);
>>> + sector += PAGE_SIZE >> SECTOR_SHIFT;
>>> + bytes -= PAGE_SIZE;
>>> + }
>>> +
>>> + bio_endio(bio, 0);
>>> +}
>>> +
>
> So freeing the page here will guarantee zeroed return on read?

For reads on freed/unwritten sectors, it simply returns success and
does not touch the bio page. Is it better to zero the page in such
cases?

> And since you set PAGE_SIZE as the discard granularity, the above loop
> could be coded more readable with the knowledge that ->bi_size is always
> a multiple of the page size.
>

Ok, I will cleanup it up.

Thanks for comments.
Nitin