Merge tag 'block-5.10-2020-10-12' of git://git.kernel.dk/linux-block
[sfrench/cifs-2.6.git] / block / partitions / core.c
index 722406b841dfc7b44a76be504afc2495e175ef3d..a02e224115943d0ece837d6871cb8ec2a9c8f73e 100644 (file)
@@ -199,14 +199,20 @@ static ssize_t part_alignment_offset_show(struct device *dev,
                                          struct device_attribute *attr, char *buf)
 {
        struct hd_struct *p = dev_to_part(dev);
-       return sprintf(buf, "%llu\n", (unsigned long long)p->alignment_offset);
+
+       return sprintf(buf, "%u\n",
+               queue_limit_alignment_offset(&part_to_disk(p)->queue->limits,
+                               p->start_sect));
 }
 
 static ssize_t part_discard_alignment_show(struct device *dev,
                                           struct device_attribute *attr, char *buf)
 {
        struct hd_struct *p = dev_to_part(dev);
-       return sprintf(buf, "%u\n", p->discard_alignment);
+
+       return sprintf(buf, "%u\n",
+               queue_limit_discard_alignment(&part_to_disk(p)->queue->limits,
+                               p->start_sect));
 }
 
 static DEVICE_ATTR(partition, 0444, part_partition_show, NULL);
@@ -318,8 +324,9 @@ int hd_ref_init(struct hd_struct *part)
  * Must be called either with bd_mutex held, before a disk can be opened or
  * after all disk users are gone.
  */
-void delete_partition(struct gendisk *disk, struct hd_struct *part)
+void delete_partition(struct hd_struct *part)
 {
+       struct gendisk *disk = part_to_disk(part);
        struct disk_part_tbl *ptbl =
                rcu_dereference_protected(disk->part_tbl, 1);
 
@@ -327,7 +334,7 @@ void delete_partition(struct gendisk *disk, struct hd_struct *part)
         * ->part_tbl is referenced in this part's release handler, so
         *  we have to hold the disk device
         */
-       get_device(disk_to_dev(part_to_disk(part)));
+       get_device(disk_to_dev(disk));
        rcu_assign_pointer(ptbl->part[part->partno], NULL);
        kobject_put(part->holder_dir);
        device_del(part_to_dev(part));
@@ -405,10 +412,6 @@ static struct hd_struct *add_partition(struct gendisk *disk, int partno,
        pdev = part_to_dev(p);
 
        p->start_sect = start;
-       p->alignment_offset =
-               queue_limit_alignment_offset(&disk->queue->limits, start);
-       p->discard_alignment =
-               queue_limit_discard_alignment(&disk->queue->limits, start);
        p->nr_sects = len;
        p->partno = partno;
        p->policy = get_disk_ro(disk);
@@ -554,7 +557,7 @@ int bdev_del_partition(struct block_device *bdev, int partno)
        sync_blockdev(bdevp);
        invalidate_bdev(bdevp);
 
-       delete_partition(bdev->bd_disk, part);
+       delete_partition(part);
        ret = 0;
 out_unlock:
        mutex_unlock(&bdev->bd_mutex);
@@ -577,7 +580,7 @@ int bdev_resize_partition(struct block_device *bdev, int partno,
                return -ENXIO;
 
        ret = -ENOMEM;
-       bdevp = bdget(part_devt(part));
+       bdevp = bdget_part(part);
        if (!bdevp)
                goto out_put_part;
 
@@ -592,8 +595,8 @@ int bdev_resize_partition(struct block_device *bdev, int partno,
        if (partition_overlaps(bdev->bd_disk, start, length, partno))
                goto out_unlock;
 
-       part_nr_sects_write(part, (sector_t)length);
-       i_size_write(bdevp->bd_inode, length << SECTOR_SHIFT);
+       part_nr_sects_write(part, length);
+       bd_set_nr_sectors(bdevp, length);
 
        ret = 0;
 out_unlock:
@@ -634,7 +637,7 @@ int blk_drop_partitions(struct block_device *bdev)
 
        disk_part_iter_init(&piter, bdev->bd_disk, DISK_PITER_INCL_EMPTY);
        while ((part = disk_part_iter_next(&piter)))
-               delete_partition(bdev->bd_disk, part);
+               delete_partition(part);
        disk_part_iter_exit(&piter);
 
        return 0;