patch for buffindexed method

Kirill Berezin kyb at online.ru
Mon Mar 12 04:58:39 EST 2007


sorry, patch follows
diff -urN ./inn-2.4.3_van/storage/buffindexed/buffindexed.c ./inn-2.4.3/storage/buffindexed/buffindexed.c
--- ./inn-2.4.3_van/storage/buffindexed/buffindexed.c	2006-03-20 07:14:57.000000000 +0300
+++ ./inn-2.4.3/storage/buffindexed/buffindexed.c	2007-02-12 17:22:50.000000000 +0300
@@ -40,11 +40,12 @@
 #define	OV_BLOCKSIZE	8192
 #define	OV_BEFOREBITF	(1 * OV_BLOCKSIZE)
 #define	OV_FUDGE	1024
+#define OV_OFFSET(block) (block*(off_t)OV_BLOCKSIZE)
 
 /* ovblock pointer */
 typedef struct _OV {
-  unsigned int	blocknum;
-  short		index;
+    unsigned int	blocknum; 
+    short		index;
 } OV;
 
 /* ovbuff header */
@@ -313,7 +314,7 @@
   l = ++p;
 
   /* Length/size of symbolic partition */
-  len = strtoul(l, NULL, 10) * 1024;     /* This value in KB in decimal */
+  len = strtoul(l, NULL, 10) * (off_t)1024;     /* This value in KB in decimal */
   /*
   ** The minimum article offset will be the size of the bitfield itself,
   ** len / (blocksize * 8), plus however many additional blocks the OVBUFFHEAD
@@ -1185,9 +1186,9 @@
   ovindexhead.low = 0;
   ovindexhead.high = 0;
 #ifdef MMAP_MISSES_WRITES
-  if (mmapwrite(ovbuff->fd, &ovindexhead, sizeof(OVINDEXHEAD), ovbuff->base + ov.blocknum * OV_BLOCKSIZE) != sizeof(OVINDEXHEAD)) {
+  if (mmapwrite(ovbuff->fd, &ovindexhead, sizeof(OVINDEXHEAD), ovbuff->base + OV_OFFSET(ov.blocknum)) != sizeof(OVINDEXHEAD)) {
 #else
-  if (pwrite(ovbuff->fd, &ovindexhead, sizeof(OVINDEXHEAD), ovbuff->base + ov.blocknum * OV_BLOCKSIZE) != sizeof(OVINDEXHEAD)) {
+  if (pwrite(ovbuff->fd, &ovindexhead, sizeof(OVINDEXHEAD), ovbuff->base + OV_OFFSET(ov.blocknum)) != sizeof(OVINDEXHEAD)) {
 #endif /* MMAP_MISSES_WRITES */
     syslog(L_ERROR, "%s: could not write index record index '%d', blocknum '%d': %m", LocalLogName, ge->curindex.index, ge->curindex.blocknum);
     return true;
@@ -1207,9 +1208,9 @@
     ovindexhead.low = ge->curlow;
     ovindexhead.high = ge->curhigh;
 #ifdef MMAP_MISSES_WRITES
-    if (mmapwrite(ovbuff->fd, &ovindexhead, sizeof(OVINDEXHEAD), ovbuff->base + ge->curindex.blocknum * OV_BLOCKSIZE) != sizeof(OVINDEXHEAD)) {
+    if (mmapwrite(ovbuff->fd, &ovindexhead, sizeof(OVINDEXHEAD), ovbuff->base + OV_OFFSET(ge->curindex.blocknum)) != sizeof(OVINDEXHEAD)) {
 #else
-    if (pwrite(ovbuff->fd, &ovindexhead, sizeof(OVINDEXHEAD), ovbuff->base + ge->curindex.blocknum * OV_BLOCKSIZE) != sizeof(OVINDEXHEAD)) {
+    if (pwrite(ovbuff->fd, &ovindexhead, sizeof(OVINDEXHEAD), ovbuff->base + OV_OFFSET(ge->curindex.blocknum)) != sizeof(OVINDEXHEAD)) {
 #endif /* MMAP_MISSES_WRITES */
       syslog(L_ERROR, "%s: could not write index record index '%d', blocknum '%d': %m", LocalLogName, ge->curindex.index, ge->curindex.blocknum);
       return false;
@@ -1286,9 +1287,9 @@
   }
 #endif /* OV_DEBUG */
 #ifdef MMAP_MISSES_WRITES
-  if (mmapwrite(ovbuff->fd, data, len, ovbuff->base + ge->curdata.blocknum * OV_BLOCKSIZE + ge->curoffset) != len) {
+  if (mmapwrite(ovbuff->fd, data, len, ovbuff->base + OV_OFFSET(ge->curdata.blocknum) + ge->curoffset) != len) {
 #else
-  if (pwrite(ovbuff->fd, data, len, ovbuff->base + ge->curdata.blocknum * OV_BLOCKSIZE + ge->curoffset) != len) {
+  if (pwrite(ovbuff->fd, data, len, ovbuff->base + OF_OFFSET(ge->curdata.blocknum) + ge->curoffset) != len) {
 #endif /* MMAP_MISSES_WRITES */
     syslog(L_ERROR, "%s: could not append overview record index '%d', blocknum '%d': %m", LocalLogName, ge->curdata.index, ge->curdata.blocknum);
     return false;
@@ -1323,9 +1324,9 @@
   }
 #endif /* OV_DEBUG */
 #ifdef MMAP_MISSES_WRITES
-  if (mmapwrite(ovbuff->fd, &ie, sizeof(ie), ovbuff->base + ge->curindex.blocknum * OV_BLOCKSIZE + sizeof(OVINDEXHEAD) + sizeof(ie) * ge->curindexoffset) != sizeof(ie)) {
+  if (mmapwrite(ovbuff->fd, &ie, sizeof(ie), ovbuff->base + OV_OFFSET(ge->curindex.blocknum) + sizeof(OVINDEXHEAD) + sizeof(ie) * ge->curindexoffset) != sizeof(ie)) {
 #else
-  if (pwrite(ovbuff->fd, &ie, sizeof(ie), ovbuff->base + ge->curindex.blocknum * OV_BLOCKSIZE + sizeof(OVINDEXHEAD) + sizeof(ie) * ge->curindexoffset) != sizeof(ie)) {
+  if (pwrite(ovbuff->fd, &ie, sizeof(ie), ovbuff->base + OV_OFFSET(ge->curindex.blocknum) + sizeof(OVINDEXHEAD) + sizeof(ie) * ge->curindexoffset) != sizeof(ie)) {
 #endif /* MMAP_MISSES_WRITES */
     syslog(L_ERROR, "%s: could not write index record index '%d', blocknum '%d': %m", LocalLogName, ge->curindex.index, ge->curindex.blocknum);
     return true;
@@ -1343,9 +1344,9 @@
     ovindexhead.low = ge->curlow;
     ovindexhead.high = ge->curhigh;
 #ifdef MMAP_MISSES_WRITES
-    if (mmapwrite(ovbuff->fd, &ovindexhead, sizeof(OVINDEXHEAD), ovbuff->base + ge->curindex.blocknum * OV_BLOCKSIZE) != sizeof(OVINDEXHEAD)) {
+    if (mmapwrite(ovbuff->fd, &ovindexhead, sizeof(OVINDEXHEAD), ovbuff->base + OV_OFFSET(ge->curindex.blocknum)) != sizeof(OVINDEXHEAD)) {
 #else
-    if (pwrite(ovbuff->fd, &ovindexhead, sizeof(OVINDEXHEAD), ovbuff->base + ge->curindex.blocknum * OV_BLOCKSIZE) != sizeof(OVINDEXHEAD)) {
+    if (pwrite(ovbuff->fd, &ovindexhead, sizeof(OVINDEXHEAD), ovbuff->base + OV_OFFSET(ge->curindex.blocknum)) != sizeof(OVINDEXHEAD)) {
 #endif /* MMAP_MISSES_WRITES */
       syslog(L_ERROR, "%s: could not write index record index '%d', blocknum '%d': %m", LocalLogName, ge->curindex.index, ge->curindex.blocknum);
       return true;
@@ -1509,7 +1510,7 @@
       ovgroupunmap();
       return false;
     }
-    offset = ovbuff->base + (ov.blocknum * OV_BLOCKSIZE);
+    offset = ovbuff->base + OV_OFFSET(ov.blocknum);
     pagefudge = offset % pagesize;
     mmapoffset = offset - pagefudge;
     len = pagefudge + OV_BLOCKSIZE;
@@ -1577,7 +1578,7 @@
     for (gdb = groupdatablock[i] ; gdb != NULL ; gdb = gdb->next) {
       ov = gdb->datablk;
       ovbuff = getovbuff(ov);
-      offset = ovbuff->base + (ov.blocknum * OV_BLOCKSIZE);
+      offset = ovbuff->base + OV_OFFSET(ov.blocknum);
       pagefudge = offset % pagesize;
       mmapoffset = offset - pagefudge;
       gdb->len = pagefudge + OV_BLOCKSIZE;
@@ -1709,7 +1710,7 @@
 	    search->gdb.datablk.blocknum = srchov.blocknum;
 	    search->gdb.datablk.index = srchov.index;
 	    ovbuff = getovbuff(srchov);
-	    offset = ovbuff->base + (srchov.blocknum * OV_BLOCKSIZE);
+	    offset = ovbuff->base + OV_OFFSET(srchov.blocknum);
 	    pagefudge = offset % pagesize;
 	    mmapoffset = offset - pagefudge;
 	    search->gdb.len = pagefudge + OV_BLOCKSIZE;








More information about the inn-workers mailing list