Sophie

Sophie

distrib > Mandriva > 2008.1 > x86_64 > by-pkgid > 05c815bf5839043e7d647e1dba1d8c0c > files > 1

cdemu-0.8-3.203.4mdv2008.1.src.rpm

Index: cdemu_core.c
===================================================================
--- cdemu_core.c
+++ cdemu_core.c	2008-04-23 16:32:29.000000000 +0300
@@ -169,13 +169,13 @@
 
 static int cdemu_transfer_bio(struct cdemu_device *vc, struct bio *bio, sector_t sector)
 {
-	ssize_t retval;
 	int startposition, track;
 	int offset;
 	loff_t position;
 	/* is only != 0 if the sector is not inline with our sectors
 	vmware does request such sectors ... mount does not */
 	int sec_offset = sector % 4;
+	read_descriptor_t desc;
 	sector /= 4;
 
 	/* thats just testing code as I don't know really how it works */
@@ -209,15 +209,16 @@
 	/* we only support read, and we told the kernel that, 
 	 * so we won't check it here */
 	position = startposition + offset + sec_offset * 512;
+	desc.written = 0;
+	desc.count = bio_iovec(bio)->bv_len;
+	desc.arg.data = &bio;
+	desc.error = 0;
 	dprintk("cdemu_transfer: %lli %i\n", position, bio_iovec(bio)->bv_len);
-	retval = vc->backing_file->f_op->sendfile(vc->backing_file,
-		&position, bio_iovec(bio)->bv_len, cdemu_read_actor_bio, bio);
-	if (retval < 0) {
-		dprintk("cdemu_transfer: retval error %i\n", (int) retval);
-		return retval;
-	} else {
+	do_generic_file_read(vc->backing_file, &position, &desc, cdemu_read_actor_bio);
+	if (desc.written)
 		return 0;
-	}
+	dprintk("cdemu_transfer: retval error %i\n", (int) desc.error);
+	return desc.error;
 }
 
 static int unload_cd(struct cdemu_device *vc)
@@ -286,7 +287,7 @@
 
 	/* now lets end the request */
 end_this_request:
-	bio_endio(bio, bio->bi_size, status);
+	bio_endio(bio, status);
 	return 0;
 }
 
Index: cdemu_mod.c
===================================================================
--- cdemu_mod.c
+++ cdemu_mod.c	2008-04-23 16:33:58.000000000 +0300
@@ -433,8 +433,7 @@
 	device_for_each_child(&virtual_bus, NULL, &remove_cdemu_device_helper);
 
 out_blkdev:
-        if (unregister_blkdev(cdemu_drv.major, DEVICE_NAME))
-                printk_cdemu(KERN_ERR, "unable to unregister block device\n");
+        unregister_blkdev(cdemu_drv.major, DEVICE_NAME);
 
 out_driver_unregister:
 	driver_unregister(&cdemu_drv.drv);
@@ -459,8 +458,7 @@
 	devfs_remove("cdemu");
 #endif
 
-	if (unregister_blkdev(cdemu_drv.major, DEVICE_NAME))
-		printk_cdemu(KERN_ERR, "unable to unregister block device\n");
+	unregister_blkdev(cdemu_drv.major, DEVICE_NAME);
 
 	/* unregister driver */
 	if(!driver_was_registered) {