forked from mirrors/linux
		
	block: add a ->get_unique_id method
Add a method to query unique IDs from block devices. It will be used to remove code that deeply pokes into SCSI internals in the NFS server. The implementation in the sd driver itself is also much nicer as it can use the cached VPD page instead of always sending a command as the current NFS code does. For now the interface is kept very minimal but could be easily extended when other users like a block-layer sysfs interface for uniquue IDs shows up. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Hannes Reinecke <hare@suse.de> Link: https://lore.kernel.org/r/20211021060607.264371-2-hch@lst.de Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
		
							parent
							
								
									8e9f666a6e
								
							
						
					
					
						commit
						9208d41497
					
				
					 1 changed files with 11 additions and 0 deletions
				
			
		| 
						 | 
					@ -1158,6 +1158,14 @@ static inline void blk_crypto_unregister(struct request_queue *q) { }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* CONFIG_BLK_INLINE_ENCRYPTION */
 | 
					#endif /* CONFIG_BLK_INLINE_ENCRYPTION */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum blk_unique_id {
 | 
				
			||||||
 | 
						/* these match the Designator Types specified in SPC */
 | 
				
			||||||
 | 
						BLK_UID_T10	= 1,
 | 
				
			||||||
 | 
						BLK_UID_EUI64	= 2,
 | 
				
			||||||
 | 
						BLK_UID_NAA	= 3,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define NFL4_UFLG_MASK			0x0000003F
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct block_device_operations {
 | 
					struct block_device_operations {
 | 
				
			||||||
	void (*submit_bio)(struct bio *bio);
 | 
						void (*submit_bio)(struct bio *bio);
 | 
				
			||||||
| 
						 | 
					@ -1176,6 +1184,9 @@ struct block_device_operations {
 | 
				
			||||||
	int (*report_zones)(struct gendisk *, sector_t sector,
 | 
						int (*report_zones)(struct gendisk *, sector_t sector,
 | 
				
			||||||
			unsigned int nr_zones, report_zones_cb cb, void *data);
 | 
								unsigned int nr_zones, report_zones_cb cb, void *data);
 | 
				
			||||||
	char *(*devnode)(struct gendisk *disk, umode_t *mode);
 | 
						char *(*devnode)(struct gendisk *disk, umode_t *mode);
 | 
				
			||||||
 | 
						/* returns the length of the identifier or a negative errno: */
 | 
				
			||||||
 | 
						int (*get_unique_id)(struct gendisk *disk, u8 id[16],
 | 
				
			||||||
 | 
								enum blk_unique_id id_type);
 | 
				
			||||||
	struct module *owner;
 | 
						struct module *owner;
 | 
				
			||||||
	const struct pr_ops *pr_ops;
 | 
						const struct pr_ops *pr_ops;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue