Overview building errors

Jen Linkova jen at comp.chem.msu.su
Fri Sep 7 09:35:59 UTC 2001


		Hi!

On Thu, Sep 06, 2001 at 10:38:38PM -0400, Roman Gollent wrote:
> 
> When running makehistory -Ox (inn 2.3.2) on a news spool
> that was rsynced from an old news server running inn 1.4
> (read: Collabra) I am running into the following errors:
> 
> Sep  6 17:05:46 smaug makehistory[8323]: [ID 131604 news.error] tradindexed: packgroup cant write to
> /usr/local/news/spool/overview/n/p/m/b/netscape.public.mozilla.builds-NEW.IDX: No such file or directory
> makehistory: Can't write overview data "@050100000049000018110000000000000000@"

If files mentioning in those error messages exist - in spite of
log messages you get - may be it's the case described below.

I have the same error messgaes on my news server. While reading src & running
makehistory under gdb I've found some interesting things.

First, 'No such file or directory' is incorrect. See at storage/ov3/ov3.c,
function OV3packgroup
    if (pwrite(fd, &gh->indexmem[ge->low - ge->base] , nbytes,
               sizeof(INDEXENTRY)*(ge->low - ge->base + delta - 1)) != nbytes) {
        syslog(L_ERROR, "tradindexed: packgroup cant write to %s: %m", newidx);
        close(fd);
        OV3closegroup(gh, FALSE);
        GROUPlock(gloc, LOCK_UNLOCK);
        return FALSE;
    }   

According to standarts, pwrite returns number of bytes _actually_ written - 
and so its return value may be less than nbytes, but greater than '-1'.
In this case errno is not set. 
In some cases (now it isn't clear for me  depending on what ;-( )
&gh->indexmem[ge->low - ge->base] + nbytes points  
outside the process's allocated address space. 
So, only part of requested data is written, but errno is not set,
and %m is syslog(..) contains some junks and more than meaningless - 
it's confusing...
IMHO, errno should be checked _only_ if function return '-1'.

I'm working on resovling real reasons of this - and i'm not ready yet
for sending bug fixes to inn-bugs... Because I don't know yet
why/when buffer in pwrite() arguments points to incorrect address space.

OS: Owl, kernel 2.2.19 

I've never seen such problem on FreeBSD...

P.S. If Inn developers read this thread - they may help, I hope ;-)

SY, Jen aka Furry


More information about the inn-workers mailing list