Date: Mon, 14 Jun 2004 07:40:03 GMT From: Edwin Groothuis <edwin@mavetju.org> To: freebsd-bugs@FreeBSD.org Subject: Re: kern/67919: imagemagicks convert image to movie conversion kills 5.2.1 machine in vnode_pager_putpages Message-ID: <200406140740.i5E7e3Px052490@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/67919; it has been noted by GNATS.
From: Edwin Groothuis <edwin@mavetju.org>
To: freebsd-gnats-submit@FreeBSD.org
Cc:
Subject: Re: kern/67919: imagemagicks convert image to movie conversion kills 5.2.1 machine in vnode_pager_putpages
Date: Mon, 14 Jun 2004 17:34:19 +1000
I've attached a sample program with which the behaviour can be
simulated. It works against my 256Mb /tmp partition. I have had
different experiences with it.
1. start program, wait a couple of seconds, see these messages:
Jun 14 16:49:39 k7 kernel: vnode_pager_putpages: I/O error 28
Jun 14 16:49:39 k7 kernel: vnode_pager_putpages: residual I/O 65536 at 124934
Jun 14 16:49:39 k7 kernel: pid 781 (mtest), uid 1001 inumber 6 on /tmp: filesystem full
Two things can happen now:
2a. ^C the program, program itself becomes unkillable (state is
something like bwrite in top), but machine responds (although
very lagging) until it doesn't do anything further. The messages
above keep coming in a regular interval (once every second or so)
2b. kill -9 the program, program terminates after some seconds.
Machine keeps working for two-three seconds and an endless
stream of vnode_pager_putpages messsages overflow the console.
Some googling for the vnode_pager_putpages showed me this thread too:
http://archives.neohapsis.com/archives/freebsd/2000-05/0345.html
which sounds exactly like what is happening here.
#include <sys/mman.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#define FNAME "/tmp/blaat"
#define SIZE 500000*1024
int main(int argc,char **argv) {
FILE *f;
char *a=malloc(SIZE);
int fd;
int i;
printf("Start\n");
if ((f=fopen(FNAME,"w"))==NULL) { perror("fopen"); return 1; }
if (fseek(f,SIZE,SEEK_SET)!=0) { perror("fseek"); return 1; }
if (fwrite("a",1,1,f)!=1) { perror("fwrite"); return 1; }
if (fseek(f,0,SEEK_SET)!=0) { perror("fseek"); return 1; }
if (fclose(f)!=0) { perror("fclose"); return 1; }
if ((fd=open(FNAME,O_RDWR))==NULL) { perror("open"); return 1; }
if ((a=mmap(NULL,SIZE,PROT_WRITE|PROT_READ,MAP_SHARED,fd,0))==MAP_FAILED) {
perror("mmap"); return 1; }
for (i=0;i<SIZE/1024;i++) { a[1024*i]=65; }
if (msync(a,0,MS_SYNC)!=0) { perror("msync"); return 1; }
if (munmap(a,SIZE)!=0) { perror("munmap"); return 1; }
if (close(fd)!=0) { perror("close"); return 1; }
printf("Stop\n");
return 0;
}
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200406140740.i5E7e3Px052490>
