Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Revert "block: Remove extra discard_alignment from hd_struct."

It was not a good idea to start dereferencing disk->queue from
the fs sysfs strategy for displaying discard alignment. We ran
into first a NULL pointer deref, and after fixing that we sometimes
see unvalid disk->queue pointer values.

Since discard is the only one of the bunch actually looking into
the queue, just revert the change.

This reverts commit 23ceb5b7719e9276d4fa72a3ecf94dd396755276.

Conflicts:
fs/partitions/check.c

+4 -7
+3 -7
fs/partitions/check.c
··· 255 255 struct device_attribute *attr, char *buf) 256 256 { 257 257 struct hd_struct *p = dev_to_part(dev); 258 - struct gendisk *disk = dev_to_disk(dev); 259 - unsigned int alignment = 0; 260 - 261 - if (disk->queue) 262 - alignment = queue_limit_discard_alignment(&disk->queue->limits, 263 - p->start_sect); 264 - return sprintf(buf, "%u\n", alignment); 258 + return sprintf(buf, "%u\n", p->discard_alignment); 265 259 } 266 260 267 261 ssize_t part_stat_show(struct device *dev, ··· 449 455 p->start_sect = start; 450 456 p->alignment_offset = 451 457 queue_limit_alignment_offset(&disk->queue->limits, start); 458 + p->discard_alignment = 459 + queue_limit_discard_alignment(&disk->queue->limits, start); 452 460 p->nr_sects = len; 453 461 p->partno = partno; 454 462 p->policy = get_disk_ro(disk);
+1
include/linux/genhd.h
··· 100 100 sector_t start_sect; 101 101 sector_t nr_sects; 102 102 sector_t alignment_offset; 103 + unsigned int discard_alignment; 103 104 struct device __dev; 104 105 struct kobject *holder_dir; 105 106 int policy, partno;