Patch free_kiovec_sz -> free_kiovec

From: Pete Zaitcev (zaitcev@redhat.com)
Date: Fri Oct 26 2001 - 22:56:47 EST


Alan,

this seems like a nitpicking but I cannot stand this "design" of API.
Applies cleanly to 2.4.13-ac2; Linus uses fixed size iobufs.

-- Pete

P.S. I saw this style in davem's pci_free_sg, but in core it's not
the same. DaveM explained to me that he wanted to open a way for
empty macroses, which would otherwise not had been possible.
Certainly, it's a different case here.

diff -urN -X dontdiff linux-2.4.10-ac10/drivers/char/raw.c linux-2.4.10-ac10-e/drivers/char/raw.c
--- linux-2.4.10-ac10/drivers/char/raw.c Wed Oct 10 21:51:41 2001
+++ linux-2.4.10-ac10-e/drivers/char/raw.c Wed Oct 17 14:49:53 2001
@@ -157,13 +157,12 @@
 {
         int minor;
         struct block_device *bdev;
- int nbhs = KIO_MAX_SECTORS;
-
+
         minor = MINOR(inode->i_rdev);
         down(&raw_devices[minor].mutex);
         bdev = raw_devices[minor].binding;
         if (!--raw_devices[minor].inuse)
- free_kiovec_sz(1, &raw_devices[minor].iobuf, &nbhs);
+ free_kiovec(1, &raw_devices[minor].iobuf);
         up(&raw_devices[minor].mutex);
         blkdev_put(bdev, BDEV_RAW);
         return 0;
@@ -390,7 +389,7 @@
         if (!new_iobuf)
                 clear_bit(0, &raw_devices[minor].iobuf_lock);
         else
- free_kiovec_sz(1, &iobuf, &nbhs);
+ free_kiovec(1, &iobuf);
  out:
         return err;
 }
diff -urN -X dontdiff linux-2.4.10-ac10/drivers/md/lvm-snap.c linux-2.4.10-ac10-e/drivers/md/lvm-snap.c
--- linux-2.4.10-ac10/drivers/md/lvm-snap.c Wed Oct 10 21:51:44 2001
+++ linux-2.4.10-ac10-e/drivers/md/lvm-snap.c Wed Oct 17 14:51:42 2001
@@ -528,12 +528,12 @@
 
 out_free_both_kiovecs:
         unmap_kiobuf(lv_snap->lv_COW_table_iobuf);
- free_kiovec_sz(1, &lv_snap->lv_COW_table_iobuf, &nbhs);
+ free_kiovec(1, &lv_snap->lv_COW_table_iobuf);
         lv_snap->lv_COW_table_iobuf = NULL;
 
 out_free_kiovec:
         unmap_kiobuf(lv_snap->lv_iobuf);
- free_kiovec_sz(1, &lv_snap->lv_iobuf, &nbhs);
+ free_kiovec(1, &lv_snap->lv_iobuf);
         lv_snap->lv_iobuf = NULL;
         if (lv_snap->lv_snapshot_hash_table != NULL)
                 vfree(lv_snap->lv_snapshot_hash_table);
@@ -543,7 +543,6 @@
 
 void lvm_snapshot_release(lv_t * lv)
 {
- int nbhs = KIO_MAX_SECTORS;
 
         if (lv->lv_block_exception)
         {
@@ -560,14 +559,14 @@
         {
                 kiobuf_wait_for_io(lv->lv_iobuf);
                 unmap_kiobuf(lv->lv_iobuf);
- free_kiovec_sz(1, &lv->lv_iobuf, &nbhs);
+ free_kiovec(1, &lv->lv_iobuf);
                 lv->lv_iobuf = NULL;
         }
         if (lv->lv_COW_table_iobuf)
         {
                kiobuf_wait_for_io(lv->lv_COW_table_iobuf);
                unmap_kiobuf(lv->lv_COW_table_iobuf);
- free_kiovec_sz(1, &lv->lv_COW_table_iobuf, &nbhs);
+ free_kiovec(1, &lv->lv_COW_table_iobuf);
                lv->lv_COW_table_iobuf = NULL;
         }
 }
diff -urN -X dontdiff linux-2.4.10-ac10/drivers/mtd/devices/blkmtd.c linux-2.4.10-ac10-e/drivers/mtd/devices/blkmtd.c
--- linux-2.4.10-ac10/drivers/mtd/devices/blkmtd.c Wed Oct 10 21:51:44 2001
+++ linux-2.4.10-ac10-e/drivers/mtd/devices/blkmtd.c Wed Oct 17 14:50:24 2001
@@ -229,7 +229,7 @@
   err = brw_kiovec(READ, 1, &iobuf, dev, iobuf->blocks, rawdevice->sector_size);
   DEBUG(3, "blkmtd: readpage: finished, err = %d\n", err);
   iobuf->locked = 0;
- free_kiovec_sz(1, &iobuf, &nbhs);
+ free_kiovec(1, &iobuf);
   if(err != PAGE_SIZE) {
     printk("blkmtd: readpage: error reading page %ld\n", page->index);
     memset(page_address(page), 0, PAGE_SIZE);
@@ -364,7 +364,7 @@
   }
   remove_wait_queue(&thr_wq, &wait);
   DEBUG(1, "blkmtd: writetask: exiting\n");
- free_kiovec_sz(1, &iobuf, &nbhs);
+ free_kiovec(1, &iobuf);
   /* Tell people we have exitd */
   up(&thread_sem);
   return 0;
diff -urN -X dontdiff linux-2.4.10-ac10/drivers/scsi/sg.c linux-2.4.10-ac10-e/drivers/scsi/sg.c
--- linux-2.4.10-ac10/drivers/scsi/sg.c Wed Oct 10 21:52:00 2001
+++ linux-2.4.10-ac10-e/drivers/scsi/sg.c Wed Oct 17 14:45:24 2001
@@ -1472,7 +1472,6 @@
 
 static void sg_unmap_and(Sg_scatter_hold * schp, int free_also)
 {
- int nbhs = KIO_MAX_SECTORS;
 
 #ifdef SG_ALLOW_DIO_CODE
     if (schp && schp->kiobp) {
@@ -1481,7 +1480,7 @@
             schp->mapped = 0;
         }
         if (free_also) {
- free_kiovec_sz(1, &schp->kiobp, &nbhs);
+ free_kiovec(1, &schp->kiobp);
             schp->kiobp = NULL;
         }
     }
diff -urN -X dontdiff linux-2.4.10-ac10/fs/iobuf.c linux-2.4.10-ac10-e/fs/iobuf.c
--- linux-2.4.10-ac10/fs/iobuf.c Wed Oct 10 21:52:08 2001
+++ linux-2.4.10-ac10-e/fs/iobuf.c Wed Oct 17 14:57:48 2001
@@ -45,6 +45,7 @@
         iobuf->array_len = KIO_STATIC_PAGES;
         iobuf->maplist = iobuf->map_array;
         iobuf->nr_pages = 0;
+ iobuf->buffers = 0;
         iobuf->locked = 0;
         iobuf->io_count.counter = 0;
         iobuf->end_io = NULL;
@@ -62,6 +63,7 @@
                         }
                         return -ENOMEM;
                 }
+ kiobuf->buffers = sz;
         return 0;
 }
 
@@ -79,28 +81,27 @@
 {
         int i;
         struct kiobuf *iobuf;
- int *tszp = szp;
-
+
         for (i = 0; i < nr; i++) {
                 iobuf = kmem_cache_alloc(kiobuf_cachep, SLAB_KERNEL);
                 if (!iobuf) {
- free_kiovec_sz(i, bufp, szp);
+ free_kiovec(i, bufp);
                         return -ENOMEM;
                 }
                 kiobuf_init(iobuf);
- if (alloc_kiobuf_bhs_sz(iobuf,*tszp)) {
+ if (alloc_kiobuf_bhs_sz(iobuf, *szp)) {
                         kmem_cache_free(kiobuf_cachep, iobuf);
- free_kiovec_sz(i, bufp, szp);
+ free_kiovec(i, bufp);
                          return -ENOMEM;
                  }
- tszp++;
+ szp++;
                 bufp[i] = iobuf;
         }
         
         return 0;
 }
 
-void free_kiovec_sz(int nr, struct kiobuf **bufp, int *szp)
+void free_kiovec(int nr, struct kiobuf **bufp)
 {
         int i;
         struct kiobuf *iobuf;
@@ -111,9 +112,8 @@
                         unlock_kiovec(1, &iobuf);
                 if (iobuf->array_len > KIO_STATIC_PAGES)
                         kfree (iobuf->maplist);
- free_kiobuf_bhs_sz(iobuf,*szp);
+ free_kiobuf_bhs_sz(iobuf, iobuf->buffers);
                 kmem_cache_free(kiobuf_cachep, bufp[i]);
- szp++;
         }
 }
 
diff -urN -X dontdiff linux-2.4.10-ac10/include/linux/iobuf.h linux-2.4.10-ac10-e/include/linux/iobuf.h
--- linux-2.4.10-ac10/include/linux/iobuf.h Wed Oct 10 21:52:15 2001
+++ linux-2.4.10-ac10-e/include/linux/iobuf.h Wed Oct 17 14:48:14 2001
@@ -36,6 +36,7 @@
         int array_len; /* Space in the allocated lists */
         int offset; /* Offset to start of valid data */
         int length; /* Number of valid bytes of data */
+ int buffers; /* So many used in bh[] */
 
         /* Keep separate track of the physical addresses and page
          * structs involved. If we do IO to a memory-mapped device
@@ -72,7 +73,7 @@
 void end_kio_request(struct kiobuf *, int);
 void simple_wakeup_kiobuf(struct kiobuf *);
 int alloc_kiovec_sz(int nr, struct kiobuf **, int *);
-void free_kiovec_sz(int nr, struct kiobuf **, int *);
+void free_kiovec(int nr, struct kiobuf **);
 int expand_kiobuf(struct kiobuf *, int);
 void kiobuf_wait_for_io(struct kiobuf *);
 extern int alloc_kiobuf_bhs(struct kiobuf *);
diff -urN -X dontdiff linux-2.4.10-ac10/kernel/ksyms.c linux-2.4.10-ac10-e/kernel/ksyms.c
--- linux-2.4.10-ac10/kernel/ksyms.c Wed Oct 10 21:52:16 2001
+++ linux-2.4.10-ac10-e/kernel/ksyms.c Wed Oct 17 14:47:51 2001
@@ -395,7 +395,7 @@
 
 /* Kiobufs */
 EXPORT_SYMBOL(alloc_kiovec_sz);
-EXPORT_SYMBOL(free_kiovec_sz);
+EXPORT_SYMBOL(free_kiovec);
 EXPORT_SYMBOL(expand_kiobuf);
 
 EXPORT_SYMBOL(map_user_kiobuf);
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Wed Oct 31 2001 - 21:00:32 EST