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