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; }
void mxheap_cleanup( MxHeap *h ) { block_cleanup( &(h->data) ); }