Can you explain what problem are you facing with this module ? On 4/20/05, ganesh kumar <ganesh_kmr@xxxxxxxx> wrote: > > > hi, i have attached the module. Can any one review it and tell me what was > the problem in this. Basically, i am trying to write in a raw hard disk, i > doubt in the blocknr and brsector value. > > > > #include <linux/fs.h> > #include <linux/module.h> > #include <linux/kernel.h> > #include <linux/init.h> > #include <linux/slab.h> > #include <linux/blkdev.h> > #define MINORBITS 8 //these two macros are used to find b_rdev value > #define MKDEV(ma,mi) (((ma) << MINORBITS) | (mi)) > #define SIZE 512 > #define BLK_SIZE 512 > #define SECTOR_SIZE 512 > > > int dataWrite(void); > void ioCompleteHandler(struct buffer_head *bh, int uptodate); > int major_no; > struct block_device_operations block_bdops; > > void ioCompleteHandler(struct buffer_head *bh, int uptodate) > { > printk(KERN_INFO"Freeing the memory in completeHandler function\n"); > mark_buffer_uptodate(bh, uptodate); > > kfree(bh->b_data); > kfree(bh); > printk(KERN_INFO"Memory freed in iocompleHandler function\n"); > } > > int dataWrite() > { > struct buffer_head *bh; > char *datpot; > printk(KERN_INFO" For testing\n"); > printk(KERN_INFO"size of buffer is %d\n",sizeof(struct > buffer_head)); > bh=kmalloc(sizeof(struct buffer_head),GFP_KERNEL); > if( NULL == bh) > { > printk(KERN_INFO" kmalloc failed\n"); > return -1 ; > } > > bh->b_next = NULL; > bh->b_next_free = NULL; > bh->b_prev_free = NULL; > bh->b_this_page = NULL; > bh->b_reqnext = NULL; > bh->b_pprev = NULL; > > set_bit (BH_Uptodate, &bh->b_state); > set_bit (BH_Mapped, &bh->b_state); //set if the device is mapped > set_bit (BH_Req, &bh->b_state); > set_bit (BH_Dirty, &bh->b_state); //added > > bh->b_size=SIZE; > bh->b_dev = MKDEV(8,16); > bh->b_blocknr= 1; //not sure > bh->b_rsector = bh->b_blocknr * (BLK_SIZE/SECTOR_SIZE); // not sure > printk(KERN_INFO"allocating buffer the data\n"); > datpot = kmalloc(SIZE,GFP_KERNEL); > > if (NULL == datpot) > { > printk(KERN_INFO"data memory allocation failed\n"); > return -1; > } > > bh->b_data=datpot; > bh->b_page = virt_to_page(bh->b_data); > printk(KERN_INFO"virtual to page done\n"); > bh->b_rdev= bh->b_dev; > bh->b_end_io=ioCompleteHandler; > // bh->b_private = bh; > printk(KERN_INFO"calling generic make request\n"); > generic_make_request(WRITE,bh); > printk(KERN_INFO" write done\n"); > return 0; > } > > static int block_init(void) > { > int ret; > major_no = > register_blkdev(0,"block_data",&block_bdops); > if ( major_no <0) > { > printk(KERN_INFO"Failed to register the module\n"); > return -1; > } > printk(KERN_INFO"Block_data Module inserted\n"); > ret = dataWrite(); > return 0; > } > > static void block_exit() > { > int ret; > ret = unregister_blkdev(major_no,"block_date"); > if( ret < 0 ) > { > printk(KERN_INFO"failed to unregister the module\n"); > //return -1; > } > > printk(KERN_INFO"Block_data Module removed\n"); > } > > module_init(block_init); > module_exit(block_exit); > MODULE_LICENSE("GPL"); > > -- > > ___________________________________________________________ > Sign-up for Ads Free at Mail.com > http://www.mail.com/?sr=signup -- Kernelnewbies: Help each other learn > about the Linux kernel. Archive: > http://mail.nl.linux.org/kernelnewbies/ FAQ: > http://kernelnewbies.org/faq/ -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/