• Martin K. Petersen's avatar
    scsi: sd: Separate zeroout and discard command choices · e6bd9312
    Martin K. Petersen authored
    Now that zeroout and discards are distinct operations we need to
    separate the policy of choosing the appropriate command. Create a
    zeroing_mode which can be one of:
    
    write:			Zeroout assist not present, use regular WRITE
    writesame:		Allow WRITE SAME(10/16) with a zeroed payload
    writesame_16_unmap:	Allow WRITE SAME(16) with UNMAP
    writesame_10_unmap:	Allow WRITE SAME(10) with UNMAP
    
    The last two are conditional on the device being thin provisioned with
    LBPRZ=1 and LBPWS=1 or LBPWS10=1 respectively.
    
    Whether to set the UNMAP bit or not depends on the REQ_NOUNMAP flag. And
    if none of the _unmap variants are supported, regular WRITE SAME will be
    used if the device supports it.
    
    The zeroout_mode is exported in sysfs and the detected mode for a given
    device can be overridden using the string constants above.
    
    With this change in place we can now issue WRITE SAME(16) with UNMAP set
    for block zeroing applications that require hard guarantees and
    logical_block_size granularity. And at the same time use the UNMAP
    command with the device's preferred granulary and alignment for discard
    operations.
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    Reviewed-by: default avatarHannes Reinecke <hare@suse.com>
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
    e6bd9312
sd.c 94.8 KB