forked from Freescale/linux-fslc
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
null_blk: move shared definitions to header file
Split the null_blk device driver, such that it can prepare for zoned block interface support. Signed-off-by: Matias Bjørling <[email protected]> Signed-off-by: Jens Axboe <[email protected]>
- Loading branch information
1 parent
e9a8385
commit 6dad38d
Showing
2 changed files
with
81 additions
and
75 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
/* SPDX-License-Identifier: GPL-2.0 */ | ||
#ifndef __BLK_NULL_BLK_H | ||
#define __BLK_NULL_BLK_H | ||
|
||
#include <linux/blkdev.h> | ||
#include <linux/slab.h> | ||
#include <linux/blk-mq.h> | ||
#include <linux/hrtimer.h> | ||
#include <linux/configfs.h> | ||
#include <linux/badblocks.h> | ||
#include <linux/fault-inject.h> | ||
|
||
struct nullb_cmd { | ||
struct list_head list; | ||
struct llist_node ll_list; | ||
struct __call_single_data csd; | ||
struct request *rq; | ||
struct bio *bio; | ||
unsigned int tag; | ||
blk_status_t error; | ||
struct nullb_queue *nq; | ||
struct hrtimer timer; | ||
}; | ||
|
||
struct nullb_queue { | ||
unsigned long *tag_map; | ||
wait_queue_head_t wait; | ||
unsigned int queue_depth; | ||
struct nullb_device *dev; | ||
unsigned int requeue_selection; | ||
|
||
struct nullb_cmd *cmds; | ||
}; | ||
|
||
struct nullb_device { | ||
struct nullb *nullb; | ||
struct config_item item; | ||
struct radix_tree_root data; /* data stored in the disk */ | ||
struct radix_tree_root cache; /* disk cache data */ | ||
unsigned long flags; /* device flags */ | ||
unsigned int curr_cache; | ||
struct badblocks badblocks; | ||
|
||
unsigned long size; /* device size in MB */ | ||
unsigned long completion_nsec; /* time in ns to complete a request */ | ||
unsigned long cache_size; /* disk cache size in MB */ | ||
unsigned int submit_queues; /* number of submission queues */ | ||
unsigned int home_node; /* home node for the device */ | ||
unsigned int queue_mode; /* block interface */ | ||
unsigned int blocksize; /* block size */ | ||
unsigned int irqmode; /* IRQ completion handler */ | ||
unsigned int hw_queue_depth; /* queue depth */ | ||
unsigned int index; /* index of the disk, only valid with a disk */ | ||
unsigned int mbps; /* Bandwidth throttle cap (in MB/s) */ | ||
bool blocking; /* blocking blk-mq device */ | ||
bool use_per_node_hctx; /* use per-node allocation for hardware context */ | ||
bool power; /* power on/off the device */ | ||
bool memory_backed; /* if data is stored in memory */ | ||
bool discard; /* if support discard */ | ||
}; | ||
|
||
struct nullb { | ||
struct nullb_device *dev; | ||
struct list_head list; | ||
unsigned int index; | ||
struct request_queue *q; | ||
struct gendisk *disk; | ||
struct blk_mq_tag_set *tag_set; | ||
struct blk_mq_tag_set __tag_set; | ||
unsigned int queue_depth; | ||
atomic_long_t cur_bytes; | ||
struct hrtimer bw_timer; | ||
unsigned long cache_flush_pos; | ||
spinlock_t lock; | ||
|
||
struct nullb_queue *queues; | ||
unsigned int nr_queues; | ||
char disk_name[DISK_NAME_LEN]; | ||
}; | ||
#endif /* __NULL_BLK_H */ |