blob: 1de4d04b0c56dbce890c9cec48934b704387793d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
/*
* fs/partitions/ultrix.c
*
* Code extracted from drivers/block/genhd.c
*
* Re-organised Jul 1999 Russell King
*/
#include <linux/fs.h>
#include <linux/genhd.h>
#include <linux/kernel.h>
#include <linux/major.h>
#include <linux/blk.h>
#include "check.h"
#include "ultrix.h"
int ultrix_partition(struct gendisk *hd, kdev_t dev, unsigned long first_sector, int first_part_minor)
{
int i;
struct buffer_head *bh;
struct ultrix_disklabel {
s32 pt_magic; /* magic no. indicating part. info exits */
s32 pt_valid; /* set by driver if pt is current */
struct pt_info {
s32 pi_nblocks; /* no. of sectors */
u32 pi_blkoff; /* block offset for start */
} pt_part[8];
} *label;
bh = bread (dev, SBLOCK, get_ptable_blocksize(dev));
if (!bh) {
printk (" unable to read block 0x%lx\n", SBLOCK);
return -1;
}
label = (struct ultrix_disklabel *)(bh->b_data
+ get_ptable_blocksize(dev)
- sizeof(struct ultrix_disklabel));
if (le32_to_cpu(label->pt_magic) == PT_MAGIC &&
le32_to_cpu(label->pt_valid == PT_VALID)) {
for (i=0; i<8; i++, first_part_minor++)
if (le32_to_cpu(label->pt_part[i].pi_nblocks))
add_gd_partition(hd, first_part_minor,
le32_to_cpu(label->pt_part[i].pi_blkoff),
le32_to_cpu(label->pt_part[i].pi_nblocks));
brelse(bh);
printk ("\n");
return 1;
} else {
brelse(bh);
return 0;
}
}
|