Divide
parent
73c774101c
commit
d7c582b416
32
sftl.c
32
sftl.c
|
@ -75,7 +75,7 @@ static void sftl_transfer(struct sftl_dev *dev, sector_t sector,
|
|||
|
||||
if ((offset + nblocks) > dev->size)
|
||||
{
|
||||
INFO("Beyond-end write (starting sector = %ld, count = %ld)\n", offset, nblocks);
|
||||
INFO("Beyond-end write (starting sector = %ld, count = %ld)", offset, nblocks);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -127,17 +127,26 @@ static struct block_device_operations sftl_ops = {
|
|||
.getgeo = sftl_getgeo
|
||||
};
|
||||
|
||||
static int __init sftl_init(void)
|
||||
static int sftl_reg_major(void)
|
||||
{
|
||||
/* Register major number */
|
||||
major_num = register_blkdev(major_num, "sftl");
|
||||
if (major_num < 0)
|
||||
if (!major_num)
|
||||
{
|
||||
printk(KERN_WARNING "sftl: unable to get major number\n");
|
||||
/* Register major number */
|
||||
major_num = register_blkdev(major_num, "sftl");
|
||||
if (major_num < 0)
|
||||
{
|
||||
printk(KERN_WARNING "sftl: unable to get major number\n");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __init sftl_init(void)
|
||||
{
|
||||
return sftl_reg_major();
|
||||
}
|
||||
|
||||
static void sftl_free_device(struct sftl_dev *dev)
|
||||
{
|
||||
if (!dev)
|
||||
|
@ -184,6 +193,10 @@ static struct sftl_dev *add_device(char *devname)
|
|||
struct block_device *bdev;
|
||||
struct sftl_dev *dev;
|
||||
int error, index;
|
||||
uint64_t t;
|
||||
|
||||
if (!major_num)
|
||||
sftl_reg_major();
|
||||
|
||||
if (!devname)
|
||||
return NULL;
|
||||
|
@ -209,7 +222,9 @@ static struct sftl_dev *add_device(char *devname)
|
|||
|
||||
mutex_init(&dev->write_mutex);
|
||||
|
||||
dev->segs = bdev->bd_block_size / clust_blocks / (seg_sz+1);
|
||||
t = dev->blkdev->bd_inode->i_size;
|
||||
do_div(t, clust_sz*seg_sz + phy_sz);
|
||||
dev->segs = (uint32_t)t; //!!!
|
||||
dev->size = dev->segs * seg_sz * clust_blocks;
|
||||
dev->reserved_segs = seg_sz * (seg_sz+1);
|
||||
|
||||
|
@ -242,13 +257,14 @@ static struct sftl_dev *add_device(char *devname)
|
|||
snprintf(dev->gd->disk_name, 32, "sftl%d", index);
|
||||
set_capacity(dev->gd, dev->size);
|
||||
dev->gd->queue = dev->queue;
|
||||
INFO("gd = %d %d %d", dev->gd->minors, dev->gd->major, dev->gd->first_minor);
|
||||
add_disk(dev->gd);
|
||||
|
||||
/* Read maps from the device */
|
||||
|
||||
|
||||
list_add(&dev->list, &sftl_device_list);
|
||||
INFO("%s: translating %s", dev->gd->disk_name, devname);
|
||||
INFO("%s: translating %s; %d sectors", dev->gd->disk_name, devname, dev->size);
|
||||
return dev;
|
||||
|
||||
devinit_err:
|
||||
|
|
Loading…
Reference in New Issue