On 04/04/2016 03:00 AM, Hannes Reinecke wrote:
+struct blk_zone *blk_lookup_zone(struct request_queue *q, sector_t lba)
A similar comment applies to this function: does this function expect a
sector_t or an LBA as its second argument?
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 7e5d7e0..f58bcdc 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -249,6 +249,50 @@ struct blk_queue_tag {
#define BLK_SCSI_MAX_CMDS (256)
#define BLK_SCSI_CMD_PER_LONG (BLK_SCSI_MAX_CMDS / (sizeof(long) * 8))
+#ifdef CONFIG_BLK_DEV_ZONED
+enum blk_zone_type {
+ BLK_ZONE_TYPE_UNKNOWN,
+ BLK_ZONE_TYPE_CONVENTIONAL,
+ BLK_ZONE_TYPE_SEQWRITE_REQ,
+ BLK_ZONE_TYPE_SEQWRITE_PREF,
+ BLK_ZONE_TYPE_RESERVED,
+};
+
+enum blk_zone_state {
+ BLK_ZONE_UNKNOWN,
+ BLK_ZONE_NO_WP,
+ BLK_ZONE_OPEN,
+ BLK_ZONE_READONLY,
+ BLK_ZONE_OFFLINE,
+ BLK_ZONE_BUSY,
+};
+
+struct blk_zone {
+ struct rb_node node;
+ spinlock_t lock;
+ sector_t start;
+ size_t len;
+ sector_t wp;
+ enum blk_zone_type type;
+ enum blk_zone_state state;
+ void *private_data;
+};
+
+#define blk_zone_is_smr(z) ((z)->type == BLK_ZONE_TYPE_SEQWRITE_REQ || \
+ (z)->type == BLK_ZONE_TYPE_SEQWRITE_PREF)
+
+#define blk_zone_is_cmr(z) ((z)->type == BLK_ZONE_TYPE_CONVENTIONAL)
+#define blk_zone_is_full(z) ((z)->wp == (z)->start + (z)->len)
+#define blk_zone_is_empty(z) ((z)->wp == (z)->start)
+
+extern struct blk_zone *blk_lookup_zone(struct request_queue *, sector_t);
+extern struct blk_zone *blk_insert_zone(struct request_queue *,
+ struct blk_zone *);
+extern void blk_drop_zones(struct request_queue *);
+#else
+static inline void blk_drop_zones(struct request_queue *q) { };
+#endif
Have you considered to create a new header file for these definitions
instead of adding these to <linux/blkdev.h>?
Bart.
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html