Example #1
0
int block_init(void)
{
  printk(KERN_INFO "initializing block device module\n");

  //
  spin_lock_init(&lock);

  //
  size = NSECTORS * LOGICAL_BLOCK_SIZE;
  data = vmalloc(size);
  if (data == NULL) {
    printk(KERN_INFO "block_init: could not malloc a block of size %lu\n", size);
    return -ENOMEM;
  }

  //
  queue = blk_init_queue(block_request, &lock);
  if (queue == NULL) {
    printk(KERN_INFO "block_init: could not initialize blk queue\n");
    block_cleanup();
    return -ENOMEM;
  }

  //
  blk_queue_logical_block_size(queue, LOGICAL_BLOCK_SIZE);

  //
  major_number = register_blkdev(major_number, DEVICE_NAME);
  if (major_number < 0) {
    printk(KERN_INFO "block_init: could not register blk device, major number=%d\n", major_number);
    block_cleanup();
    return -ENOMEM;
  }


  gdisk = alloc_disk(16);
  if (!gdisk) {
    printk(KERN_INFO "block_init: could not alloc gdisk\n");
    block_cleanup();
    return -ENOMEM;
  }

  //
  gdisk->major = major_number;
  //
  gdisk->first_minor = 0;
  //
  gdisk->fops = &block_ops;
  //
  gdisk->private_data = &data;
  //
  gdisk->queue = queue;
  //
  strcpy(gdisk->disk_name, DISK_NAME);

  //
  set_capacity(gdisk, 0);
  //
  add_disk(gdisk);
  printk(KERN_INFO "block_init: added gendisk\n");

  set_capacity(gdisk, NSECTORS);
  printk(KERN_INFO "block_init: set capacity on gendisk to %d sectors\n", NSECTORS);

  return 0;
}
Example #2
0
File: mxtype.c Project: asir6/Colt
void mxheap_cleanup( MxHeap *h )  
{ 
	block_cleanup( &(h->data) ); 
}