block: kill GENHD_FL_FAIL and use part0->make_it_fail
GENHD_FL_FAIL for disk is what make_it_fail is for parts. Kill it and use part0->make_it_fail. Sysfs node handling is unified too. Signed-off-by: Tejun Heo <tj@kernel.org> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
This commit is contained in:
parent
0762b8bde9
commit
eddb2e26b5
4 changed files with 16 additions and 37 deletions
|
@ -1273,8 +1273,9 @@ __setup("fail_make_request=", setup_fail_make_request);
|
||||||
|
|
||||||
static int should_fail_request(struct bio *bio)
|
static int should_fail_request(struct bio *bio)
|
||||||
{
|
{
|
||||||
if ((bio->bi_bdev->bd_disk->flags & GENHD_FL_FAIL) ||
|
struct hd_struct *part = bio->bi_bdev->bd_part;
|
||||||
bio->bi_bdev->bd_part->make_it_fail)
|
|
||||||
|
if (part_to_disk(part)->part0.make_it_fail || part->make_it_fail)
|
||||||
return should_fail(&fail_make_request, bio->bi_size);
|
return should_fail(&fail_make_request, bio->bi_size);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -795,34 +795,6 @@ static ssize_t disk_stat_show(struct device *dev,
|
||||||
jiffies_to_msecs(disk_stat_read(disk, time_in_queue)));
|
jiffies_to_msecs(disk_stat_read(disk, time_in_queue)));
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_FAIL_MAKE_REQUEST
|
|
||||||
static ssize_t disk_fail_show(struct device *dev,
|
|
||||||
struct device_attribute *attr, char *buf)
|
|
||||||
{
|
|
||||||
struct gendisk *disk = dev_to_disk(dev);
|
|
||||||
|
|
||||||
return sprintf(buf, "%d\n", disk->flags & GENHD_FL_FAIL ? 1 : 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static ssize_t disk_fail_store(struct device *dev,
|
|
||||||
struct device_attribute *attr,
|
|
||||||
const char *buf, size_t count)
|
|
||||||
{
|
|
||||||
struct gendisk *disk = dev_to_disk(dev);
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (count > 0 && sscanf(buf, "%d", &i) > 0) {
|
|
||||||
if (i == 0)
|
|
||||||
disk->flags &= ~GENHD_FL_FAIL;
|
|
||||||
else
|
|
||||||
disk->flags |= GENHD_FL_FAIL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static DEVICE_ATTR(range, S_IRUGO, disk_range_show, NULL);
|
static DEVICE_ATTR(range, S_IRUGO, disk_range_show, NULL);
|
||||||
static DEVICE_ATTR(ext_range, S_IRUGO, disk_ext_range_show, NULL);
|
static DEVICE_ATTR(ext_range, S_IRUGO, disk_ext_range_show, NULL);
|
||||||
static DEVICE_ATTR(removable, S_IRUGO, disk_removable_show, NULL);
|
static DEVICE_ATTR(removable, S_IRUGO, disk_removable_show, NULL);
|
||||||
|
@ -832,7 +804,7 @@ static DEVICE_ATTR(capability, S_IRUGO, disk_capability_show, NULL);
|
||||||
static DEVICE_ATTR(stat, S_IRUGO, disk_stat_show, NULL);
|
static DEVICE_ATTR(stat, S_IRUGO, disk_stat_show, NULL);
|
||||||
#ifdef CONFIG_FAIL_MAKE_REQUEST
|
#ifdef CONFIG_FAIL_MAKE_REQUEST
|
||||||
static struct device_attribute dev_attr_fail =
|
static struct device_attribute dev_attr_fail =
|
||||||
__ATTR(make-it-fail, S_IRUGO|S_IWUSR, disk_fail_show, disk_fail_store);
|
__ATTR(make-it-fail, S_IRUGO|S_IWUSR, part_fail_show, part_fail_store);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static struct attribute *disk_attrs[] = {
|
static struct attribute *disk_attrs[] = {
|
||||||
|
|
|
@ -238,17 +238,17 @@ static ssize_t part_stat_show(struct device *dev,
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_FAIL_MAKE_REQUEST
|
#ifdef CONFIG_FAIL_MAKE_REQUEST
|
||||||
static ssize_t part_fail_show(struct device *dev,
|
ssize_t part_fail_show(struct device *dev,
|
||||||
struct device_attribute *attr, char *buf)
|
struct device_attribute *attr, char *buf)
|
||||||
{
|
{
|
||||||
struct hd_struct *p = dev_to_part(dev);
|
struct hd_struct *p = dev_to_part(dev);
|
||||||
|
|
||||||
return sprintf(buf, "%d\n", p->make_it_fail);
|
return sprintf(buf, "%d\n", p->make_it_fail);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t part_fail_store(struct device *dev,
|
ssize_t part_fail_store(struct device *dev,
|
||||||
struct device_attribute *attr,
|
struct device_attribute *attr,
|
||||||
const char *buf, size_t count)
|
const char *buf, size_t count)
|
||||||
{
|
{
|
||||||
struct hd_struct *p = dev_to_part(dev);
|
struct hd_struct *p = dev_to_part(dev);
|
||||||
int i;
|
int i;
|
||||||
|
|
|
@ -112,7 +112,6 @@ struct hd_struct {
|
||||||
#define GENHD_FL_CD 8
|
#define GENHD_FL_CD 8
|
||||||
#define GENHD_FL_UP 16
|
#define GENHD_FL_UP 16
|
||||||
#define GENHD_FL_SUPPRESS_PARTITION_INFO 32
|
#define GENHD_FL_SUPPRESS_PARTITION_INFO 32
|
||||||
#define GENHD_FL_FAIL 64
|
|
||||||
|
|
||||||
struct gendisk {
|
struct gendisk {
|
||||||
/* major, first_minor, minors and ext_minors are input
|
/* major, first_minor, minors and ext_minors are input
|
||||||
|
@ -596,6 +595,13 @@ extern void blk_unregister_region(dev_t devt, unsigned long range);
|
||||||
|
|
||||||
extern ssize_t part_size_show(struct device *dev,
|
extern ssize_t part_size_show(struct device *dev,
|
||||||
struct device_attribute *attr, char *buf);
|
struct device_attribute *attr, char *buf);
|
||||||
|
#ifdef CONFIG_FAIL_MAKE_REQUEST
|
||||||
|
extern ssize_t part_fail_show(struct device *dev,
|
||||||
|
struct device_attribute *attr, char *buf);
|
||||||
|
extern ssize_t part_fail_store(struct device *dev,
|
||||||
|
struct device_attribute *attr,
|
||||||
|
const char *buf, size_t count);
|
||||||
|
#endif /* CONFIG_FAIL_MAKE_REQUEST */
|
||||||
|
|
||||||
#else /* CONFIG_BLOCK */
|
#else /* CONFIG_BLOCK */
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue