[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 1 of 1] interface: BLKIF_OP_TRIM -> BLKIF_OP_DISCARD
>>> On 11.10.11 at 20:27, Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> wrote: > On Mon, Oct 10, 2011 at 03:58:42PM -0400, Konrad Rzeszutek Wilk wrote: >> On Mon, Oct 10, 2011 at 01:50:11PM -0400, Konrad Rzeszutek Wilk wrote: > > Per Ian and Jan's suggestion (note, the structure is 4-byte aligned > so we do not need to pad it): > > # HG changeset patch > # Parent 72f339bc600d7a9629d3f9eb8a279fbf8be25b12 > interface: BLKIF_OP_TRIM -> BLKIF_OP_DISCARD > > The name 'trim' is specific to the ATA discard implementation. > The name 'scsi unmap' is specific to the SCSI discard implementation. > > We should really use a generic name - and the name 'discard' > looks to be the most generic of them all. Also update the description > to mention the other parameters that the frontend can query the > backend for: discard-aligment, discard-granularity, and > discard-secure. We also utilize per Jan Beulich keen suggestion, > the 8-bit reserved field to use as a flag value. Currently the only > flag that can be passed for a discard operation is secure delete: > BLKIF_OP_DISCARD_FLAG_SECURE. > > CC: lidongyang@xxxxxxxxxx > CC: owen.smith@xxxxxxxxxx > CC: Pasi KÃrkkÃinen <pasik@xxxxxx> > CC: JBeulich@xxxxxxxxxx > Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> > > diff -r 72f339bc600d xen/include/public/io/blkif.h > --- a/xen/include/public/io/blkif.h Mon Oct 10 11:21:51 2011 +0100 > +++ b/xen/include/public/io/blkif.h Tue Oct 11 14:10:33 2011 -0400 > @@ -82,26 +82,47 @@ > */ > #define BLKIF_OP_RESERVED_1 4 > /* > - * Recognised only if "feature-trim" is present in backend xenbus info. > - * The "feature-trim" node contains a boolean indicating whether trim > - * requests are likely to succeed or fail. Either way, a trim request > + * Recognised only if "feature-discard" is present in backend xenbus info. > + * The "feature-discard" node contains a boolean indicating whether trim > + * (ATA) or unmap (SCSI) - conviently called discard requests are likely > + * to succeed or fail. Either way, a discard request > * may fail at any time with BLKIF_RSP_EOPNOTSUPP if it is unsupported by > * the underlying block-device hardware. The boolean simply indicates > whether > - * or not it is worthwhile for the frontend to attempt trim requests. > - * If a backend does not recognise BLKIF_OP_TRIM, it should *not* > - * create the "feature-trim" node! > - * > - * Trim operation is a request for the underlying block device to mark > - * extents to be erased. Trim operations are passed with sector_number as > the > - * sector index to begin trim operations at and nr_sectors as the number of > - * sectors to be trimmed. The specified sectors should be trimmed if the > - * underlying block device supports trim operations, or a > BLKIF_RSP_EOPNOTSUPP > - * should be returned. More information about trim operations at: > + * or not it is worthwhile for the frontend to attempt discard requests. > + * If a backend does not recognise BLKIF_OP_DISCARD, it should *not* > + * create the "feature-discard" node! > + * > + * Discard operation is a request for the underlying block device to mark > + * extents to be erased. However, discard does not guarantee that the > blocks > + * will be erased from the device - it is just a hint to the device > + * controller that these blocks are no longer in use. What the device > + * controller does with that information is left to the controller. > + * Discard operations are passed with sector_number as the > + * sector index to begin discard operations at and nr_sectors as the number > of > + * sectors to be discarded. The specified sectors should be discarded if > the > + * underlying block device supports trim (ATA) or unmap (SCSI) operations, > + * or a BLKIF_RSP_EOPNOTSUPP should be returned. > + * More information about trim/unmap operations at: > * http://t13.org/Documents/UploadedDocuments/docs2008/ > * e07154r6-Data_Set_Management_Proposal_for_ATA-ACS2.doc > + * http://www.seagate.com/staticfiles/support/disc/manuals/ > + * Interface%20manuals/100293068c.pdf > + * The backend can optionally provide three extra XenBus attributes to > + * further optimize the discard functionality: > + * 'discard-aligment' - Devices that support discard functionality may > + * internally allocate space in units that are bigger than the exported > + * logical block size. The discard-alignment parameter indicates how many > bytes > + * the beginning of the partition is offset from the internal allocation > unit's > + * natural alignment. > + * 'discard-granularity' - Devices that support discard functionality may > + * internally allocate space using units that are bigger than the logical > block > + * size. The discard-granularity parameter indicates the size of the > internal > + * allocation unit in bytes if reported by the device. Otherwise the > + * discard-granularity will be set to match the device's physical block > size. > + * 'discard-secure' - All copies of the discarded sectors (potentially > created by > + * garbage collection) must also be erased. > */ > -#define BLKIF_OP_TRIM 5 > - > +#define BLKIF_OP_DISCARD 5 > /* > * Maximum scatter/gather segments per request. > * This is carefully chosen so that sizeof(blkif_ring_t) <= PAGE_SIZE. > @@ -134,18 +155,20 @@ struct blkif_request { > typedef struct blkif_request blkif_request_t; > > /* > - * Cast to this structure when blkif_request.operation == BLKIF_OP_TRIM > - * sizeof(struct blkif_request_trim) <= sizeof(struct blkif_request) > + * Cast to this structure when blkif_request.operation == BLKIF_OP_DISCARD > + * sizeof(struct blkif_request_discard) <= sizeof(struct blkif_request) > */ > -struct blkif_request_trim { > - uint8_t operation; /* BLKIF_OP_TRIM */ > - uint8_t reserved; /* */ > +struct blkif_request_discard { > + uint8_t operation; /* BLKIF_OP_DISCARD */ > + /* ignored if 'discard-secure=0' */ > +#define BLKIF_OP_DISCARD_FLAG_SECURE (1<<0) I'd like to have the _OP in here dropped - BLKIF_OP_* should be "reserved" to express actual operations. With that change, Acked-by: Jan Beulich <jbeulich@xxxxxxxx> (I'd also consider the _FLAG part to be sort of redundant.) Jan > + uint8_t flag; /* BLKIF_OP_DISCARD_FLAG_SECURE or 0 */ > blkif_vdev_t handle; /* same as for read/write requests */ > uint64_t id; /* private guest value, echoed in resp */ > blkif_sector_t sector_number;/* start sector idx on disk */ > uint64_t nr_sectors; /* number of contiguous sectors to trim */ > }; > -typedef struct blkif_request_trim blkif_request_trim_t; > +typedef struct blkif_request_discard blkif_request_discard_t; > > struct blkif_response { > uint64_t id; /* copied from request */ _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |