Commit 1442f76d authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe

block: move struct partition out of genhd.h

struct partition is the on-disk format of a MSDOS partition table entry.
Move it out of genhd.h into a new msdos_partition.h header and give it
a msdos_ prefix to avoid confusion.
Also move the magic number from block/partitions/msdos.h to the new
header so that it can be used by the SCSI drivers looking at the DOS
partition tables.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent cbb5cb3b
...@@ -14,10 +14,10 @@ ...@@ -14,10 +14,10 @@
#include <linux/stringify.h> #include <linux/stringify.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/uuid.h> #include <linux/uuid.h>
#include <linux/msdos_partition.h>
#include "ldm.h" #include "ldm.h"
#include "check.h" #include "check.h"
#include "msdos.h"
/* /*
* ldm_debug/info/error/crit - Output an error message * ldm_debug/info/error/crit - Output an error message
...@@ -493,7 +493,7 @@ static bool ldm_validate_partition_table(struct parsed_partitions *state) ...@@ -493,7 +493,7 @@ static bool ldm_validate_partition_table(struct parsed_partitions *state)
{ {
Sector sect; Sector sect;
u8 *data; u8 *data;
struct partition *p; struct msdos_partition *p;
int i; int i;
bool result = false; bool result = false;
...@@ -508,7 +508,7 @@ static bool ldm_validate_partition_table(struct parsed_partitions *state) ...@@ -508,7 +508,7 @@ static bool ldm_validate_partition_table(struct parsed_partitions *state)
if (*(__le16*) (data + 0x01FE) != cpu_to_le16 (MSDOS_LABEL_MAGIC)) if (*(__le16*) (data + 0x01FE) != cpu_to_le16 (MSDOS_LABEL_MAGIC))
goto out; goto out;
p = (struct partition*)(data + 0x01BE); p = (struct msdos_partition *)(data + 0x01BE);
for (i = 0; i < 4; i++, p++) for (i = 0; i < 4; i++, p++)
if (SYS_IND (p) == LDM_PARTITION) { if (SYS_IND (p) == LDM_PARTITION) {
result = true; result = true;
......
...@@ -20,9 +20,9 @@ ...@@ -20,9 +20,9 @@
* Re-organised Feb 1998 Russell King * Re-organised Feb 1998 Russell King
*/ */
#include <linux/msdos_fs.h> #include <linux/msdos_fs.h>
#include <linux/msdos_partition.h>
#include "check.h" #include "check.h"
#include "msdos.h"
#include "efi.h" #include "efi.h"
/* /*
...@@ -34,17 +34,17 @@ ...@@ -34,17 +34,17 @@
#define SYS_IND(p) get_unaligned(&p->sys_ind) #define SYS_IND(p) get_unaligned(&p->sys_ind)
static inline sector_t nr_sects(struct partition *p) static inline sector_t nr_sects(struct msdos_partition *p)
{ {
return (sector_t)get_unaligned_le32(&p->nr_sects); return (sector_t)get_unaligned_le32(&p->nr_sects);
} }
static inline sector_t start_sect(struct partition *p) static inline sector_t start_sect(struct msdos_partition *p)
{ {
return (sector_t)get_unaligned_le32(&p->start_sect); return (sector_t)get_unaligned_le32(&p->start_sect);
} }
static inline int is_extended_partition(struct partition *p) static inline int is_extended_partition(struct msdos_partition *p)
{ {
return (SYS_IND(p) == DOS_EXTENDED_PARTITION || return (SYS_IND(p) == DOS_EXTENDED_PARTITION ||
SYS_IND(p) == WIN98_EXTENDED_PARTITION || SYS_IND(p) == WIN98_EXTENDED_PARTITION ||
...@@ -67,7 +67,7 @@ msdos_magic_present(unsigned char *p) ...@@ -67,7 +67,7 @@ msdos_magic_present(unsigned char *p)
#define AIX_LABEL_MAGIC4 0xC1 #define AIX_LABEL_MAGIC4 0xC1
static int aix_magic_present(struct parsed_partitions *state, unsigned char *p) static int aix_magic_present(struct parsed_partitions *state, unsigned char *p)
{ {
struct partition *pt = (struct partition *) (p + 0x1be); struct msdos_partition *pt = (struct msdos_partition *) (p + 0x1be);
Sector sect; Sector sect;
unsigned char *d; unsigned char *d;
int slot, ret = 0; int slot, ret = 0;
...@@ -121,7 +121,7 @@ static void parse_extended(struct parsed_partitions *state, ...@@ -121,7 +121,7 @@ static void parse_extended(struct parsed_partitions *state,
sector_t first_sector, sector_t first_size, sector_t first_sector, sector_t first_size,
u32 disksig) u32 disksig)
{ {
struct partition *p; struct msdos_partition *p;
Sector sect; Sector sect;
unsigned char *data; unsigned char *data;
sector_t this_sector, this_size; sector_t this_sector, this_size;
...@@ -145,7 +145,7 @@ static void parse_extended(struct parsed_partitions *state, ...@@ -145,7 +145,7 @@ static void parse_extended(struct parsed_partitions *state,
if (!msdos_magic_present(data + 510)) if (!msdos_magic_present(data + 510))
goto done; goto done;
p = (struct partition *) (data + 0x1be); p = (struct msdos_partition *) (data + 0x1be);
/* /*
* Usually, the first entry is the real data partition, * Usually, the first entry is the real data partition,
...@@ -402,14 +402,14 @@ static void parse_minix(struct parsed_partitions *state, ...@@ -402,14 +402,14 @@ static void parse_minix(struct parsed_partitions *state,
#ifdef CONFIG_MINIX_SUBPARTITION #ifdef CONFIG_MINIX_SUBPARTITION
Sector sect; Sector sect;
unsigned char *data; unsigned char *data;
struct partition *p; struct msdos_partition *p;
int i; int i;
data = read_part_sector(state, offset, &sect); data = read_part_sector(state, offset, &sect);
if (!data) if (!data)
return; return;
p = (struct partition *)(data + 0x1be); p = (struct msdos_partition *)(data + 0x1be);
/* The first sector of a Minix partition can have either /* The first sector of a Minix partition can have either
* a secondary MBR describing its subpartitions, or * a secondary MBR describing its subpartitions, or
...@@ -453,7 +453,7 @@ int msdos_partition(struct parsed_partitions *state) ...@@ -453,7 +453,7 @@ int msdos_partition(struct parsed_partitions *state)
sector_t sector_size = bdev_logical_block_size(state->bdev) / 512; sector_t sector_size = bdev_logical_block_size(state->bdev) / 512;
Sector sect; Sector sect;
unsigned char *data; unsigned char *data;
struct partition *p; struct msdos_partition *p;
struct fat_boot_sector *fb; struct fat_boot_sector *fb;
int slot; int slot;
u32 disksig; u32 disksig;
...@@ -487,7 +487,7 @@ int msdos_partition(struct parsed_partitions *state) ...@@ -487,7 +487,7 @@ int msdos_partition(struct parsed_partitions *state)
* partition table. Reject this in case the boot indicator * partition table. Reject this in case the boot indicator
* is not 0 or 0x80. * is not 0 or 0x80.
*/ */
p = (struct partition *) (data + 0x1be); p = (struct msdos_partition *) (data + 0x1be);
for (slot = 1; slot <= 4; slot++, p++) { for (slot = 1; slot <= 4; slot++, p++) {
if (p->boot_ind != 0 && p->boot_ind != 0x80) { if (p->boot_ind != 0 && p->boot_ind != 0x80) {
/* /*
...@@ -509,7 +509,7 @@ int msdos_partition(struct parsed_partitions *state) ...@@ -509,7 +509,7 @@ int msdos_partition(struct parsed_partitions *state)
} }
#ifdef CONFIG_EFI_PARTITION #ifdef CONFIG_EFI_PARTITION
p = (struct partition *) (data + 0x1be); p = (struct msdos_partition *) (data + 0x1be);
for (slot = 1 ; slot <= 4 ; slot++, p++) { for (slot = 1 ; slot <= 4 ; slot++, p++) {
/* If this is an EFI GPT disk, msdos should ignore it. */ /* If this is an EFI GPT disk, msdos should ignore it. */
if (SYS_IND(p) == EFI_PMBR_OSTYPE_EFI_GPT) { if (SYS_IND(p) == EFI_PMBR_OSTYPE_EFI_GPT) {
...@@ -518,7 +518,7 @@ int msdos_partition(struct parsed_partitions *state) ...@@ -518,7 +518,7 @@ int msdos_partition(struct parsed_partitions *state)
} }
} }
#endif #endif
p = (struct partition *) (data + 0x1be); p = (struct msdos_partition *) (data + 0x1be);
disksig = le32_to_cpup((__le32 *)(data + 0x1b8)); disksig = le32_to_cpup((__le32 *)(data + 0x1b8));
...@@ -565,7 +565,7 @@ int msdos_partition(struct parsed_partitions *state) ...@@ -565,7 +565,7 @@ int msdos_partition(struct parsed_partitions *state)
strlcat(state->pp_buf, "\n", PAGE_SIZE); strlcat(state->pp_buf, "\n", PAGE_SIZE);
/* second pass - output for each on a separate line */ /* second pass - output for each on a separate line */
p = (struct partition *) (0x1be + data); p = (struct msdos_partition *) (0x1be + data);
for (slot = 1 ; slot <= 4 ; slot++, p++) { for (slot = 1 ; slot <= 4 ; slot++, p++) {
unsigned char id = SYS_IND(p); unsigned char id = SYS_IND(p);
int n; int n;
......
/* SPDX-License-Identifier: GPL-2.0 */
/*
* fs/partitions/msdos.h
*/
#define MSDOS_LABEL_MAGIC 0xAA55
...@@ -36,6 +36,7 @@ ...@@ -36,6 +36,7 @@
#include <linux/jiffies.h> #include <linux/jiffies.h>
#include <linux/dma-mapping.h> #include <linux/dma-mapping.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/msdos_partition.h>
#include <scsi/scsicam.h> #include <scsi/scsicam.h>
#include <asm/dma.h> #include <asm/dma.h>
...@@ -3410,9 +3411,10 @@ static int blogic_diskparam(struct scsi_device *sdev, struct block_device *dev, ...@@ -3410,9 +3411,10 @@ static int blogic_diskparam(struct scsi_device *sdev, struct block_device *dev,
a partition table entry whose end_head matches one of the a partition table entry whose end_head matches one of the
standard BusLogic geometry translations (64/32, 128/32, or 255/63). standard BusLogic geometry translations (64/32, 128/32, or 255/63).
*/ */
if (*(unsigned short *) (buf + 64) == 0xAA55) { if (*(unsigned short *) (buf + 64) == MSDOS_LABEL_MAGIC) {
struct partition *part1_entry = (struct partition *) buf; struct msdos_partition *part1_entry =
struct partition *part_entry = part1_entry; (struct msdos_partition *)buf;
struct msdos_partition *part_entry = part1_entry;
int saved_cyl = diskparam->cylinders, part_no; int saved_cyl = diskparam->cylinders, part_no;
unsigned char part_end_head = 0, part_end_sector = 0; unsigned char part_end_head = 0, part_end_sector = 0;
......
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
#include <linux/syscalls.h> #include <linux/syscalls.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/kthread.h> #include <linux/kthread.h>
#include <linux/msdos_partition.h>
#include <scsi/scsi.h> #include <scsi/scsi.h>
#include <scsi/scsi_cmnd.h> #include <scsi/scsi_cmnd.h>
...@@ -328,9 +329,9 @@ static int aac_biosparm(struct scsi_device *sdev, struct block_device *bdev, ...@@ -328,9 +329,9 @@ static int aac_biosparm(struct scsi_device *sdev, struct block_device *bdev,
buf = scsi_bios_ptable(bdev); buf = scsi_bios_ptable(bdev);
if (!buf) if (!buf)
return 0; return 0;
if(*(__le16 *)(buf + 0x40) == cpu_to_le16(0xaa55)) { if (*(__le16 *)(buf + 0x40) == cpu_to_le16(MSDOS_LABEL_MAGIC)) {
struct partition *first = (struct partition * )buf; struct msdos_partition *first = (struct msdos_partition *)buf;
struct partition *entry = first; struct msdos_partition *entry = first;
int saved_cylinders = param->cylinders; int saved_cylinders = param->cylinders;
int num; int num;
unsigned char end_head, end_sec; unsigned char end_head, end_sec;
......
...@@ -38,6 +38,7 @@ ...@@ -38,6 +38,7 @@
#include <linux/hrtimer.h> #include <linux/hrtimer.h>
#include <linux/uuid.h> #include <linux/uuid.h>
#include <linux/t10-pi.h> #include <linux/t10-pi.h>
#include <linux/msdos_partition.h>
#include <net/checksum.h> #include <net/checksum.h>
...@@ -4146,7 +4147,7 @@ static int scsi_debug_host_reset(struct scsi_cmnd *SCpnt) ...@@ -4146,7 +4147,7 @@ static int scsi_debug_host_reset(struct scsi_cmnd *SCpnt)
static void __init sdebug_build_parts(unsigned char *ramp, static void __init sdebug_build_parts(unsigned char *ramp,
unsigned long store_size) unsigned long store_size)
{ {
struct partition *pp; struct msdos_partition *pp;
int starts[SDEBUG_MAX_PARTS + 2]; int starts[SDEBUG_MAX_PARTS + 2];
int sectors_per_part, num_sectors, k; int sectors_per_part, num_sectors, k;
int heads_by_sects, start_sec, end_sec; int heads_by_sects, start_sec, end_sec;
...@@ -4171,7 +4172,7 @@ static void __init sdebug_build_parts(unsigned char *ramp, ...@@ -4171,7 +4172,7 @@ static void __init sdebug_build_parts(unsigned char *ramp,
ramp[510] = 0x55; /* magic partition markings */ ramp[510] = 0x55; /* magic partition markings */
ramp[511] = 0xAA; ramp[511] = 0xAA;
pp = (struct partition *)(ramp + 0x1be); pp = (struct msdos_partition *)(ramp + 0x1be);
for (k = 0; starts[k + 1]; ++k, ++pp) { for (k = 0; starts[k + 1]; ++k, ++pp) {
start_sec = starts[k]; start_sec = starts[k];
end_sec = starts[k + 1] - 1; end_sec = starts[k + 1] - 1;
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include <linux/genhd.h> #include <linux/genhd.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/blkdev.h> #include <linux/blkdev.h>
#include <linux/msdos_partition.h>
#include <asm/unaligned.h> #include <asm/unaligned.h>
#include <scsi/scsicam.h> #include <scsi/scsicam.h>
...@@ -61,7 +62,7 @@ bool scsi_partsize(struct block_device *bdev, sector_t capacity, int geom[3]) ...@@ -61,7 +62,7 @@ bool scsi_partsize(struct block_device *bdev, sector_t capacity, int geom[3])
{ {
int cyl, ext_cyl, end_head, end_cyl, end_sector; int cyl, ext_cyl, end_head, end_cyl, end_sector;
unsigned int logical_end, physical_end, ext_physical_end; unsigned int logical_end, physical_end, ext_physical_end;
struct partition *p, *largest = NULL; struct msdos_partition *p, *largest = NULL;
void *buf; void *buf;
int ret = false; int ret = false;
......
...@@ -70,19 +70,6 @@ enum { ...@@ -70,19 +70,6 @@ enum {
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/workqueue.h> #include <linux/workqueue.h>
struct partition {
unsigned char boot_ind; /* 0x80 - active */
unsigned char head; /* starting head */
unsigned char sector; /* starting sector */
unsigned char cyl; /* starting cylinder */
unsigned char sys_ind; /* What partition type */
unsigned char end_head; /* end head */
unsigned char end_sector; /* end sector */
unsigned char end_cyl; /* end cylinder */
__le32 start_sect; /* starting sector counting from 0 */
__le32 nr_sects; /* nr of sectors in partition */
} __attribute__((packed));
struct disk_stats { struct disk_stats {
u64 nsecs[NR_STAT_GROUPS]; u64 nsecs[NR_STAT_GROUPS];
unsigned long sectors[NR_STAT_GROUPS]; unsigned long sectors[NR_STAT_GROUPS];
......
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _LINUX_MSDOS_PARTITION_H
#define _LINUX_MSDOS_PARTITION_H
#define MSDOS_LABEL_MAGIC 0xAA55
struct msdos_partition {
u8 boot_ind; /* 0x80 - active */
u8 head; /* starting head */
u8 sector; /* starting sector */
u8 cyl; /* starting cylinder */
u8 sys_ind; /* What partition type */
u8 end_head; /* end head */
u8 end_sector; /* end sector */
u8 end_cyl; /* end cylinder */
__le32 start_sect; /* starting sector counting from 0 */
__le32 nr_sects; /* nr of sectors in partition */
} __packed;
#endif /* LINUX_MSDOS_PARTITION_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment