John Hein wrote at 07:19 -0600 on Sep 11, 2008:
> Taalaibek Ashirov wrote at 10:31 +0300 on Sep 11, 2008:
> > On Wed, 2008-09-10 at 09:56 -0600, John Hein wrote:
> > > What happens when you compile and run this (as the backup user)?
> > >
> > > #include <err.h>
> > > #include <fcntl.h>
> > > #include <stdio.h>
> > > int
> > > main()
> > > {
> > > struct flock lock;
> > > int fd = open("/var/log/amanda/dotProject/foo", O_RDWR | O_CREAT);
> > > if (fd < 0) err(1, "open");
> > >
> > > lock.l_type = F_WRLCK;
> > > lock.l_whence = SEEK_SET;
> > > int r = fcntl(fd, F_SETLKW, &lock);
> > > if (r < 0) err(1, "fnctl");
> > > return 0;
> > > }
> >
> > Hi John! Thank you for your efforts. I got the same error:
> >
> > $ ./test
> > test: fnctl: Invalid argument
>
> Then it's an issue with your system somehow, not amanda.
>
> Looking at src/sys/kern/kern_descrip.c, you can get EINVAL is if you
> pass in l_type that is not F_RDLCK, F_WRLCK or F_UNLCK.
>
> Try adding the printf below and rebuilding your kernel. Then run the
> above test. Look for the printf in dmesg (or /var/log/messages if you
> are using a default syslog.conf).
>
> Index: kern_descrip.c
> ===================================================================
> RCS file: /base/FreeBSD-CVS/src/sys/kern/kern_descrip.c,v
> retrieving revision 1.279.2.15.2.1
> diff -u -p -r1.279.2.15.2.1 kern_descrip.c
> --- kern_descrip.c 14 Feb 2008 11:46:40 -0000 1.279.2.15.2.1
> +++ kern_descrip.c 11 Sep 2008 13:17:25 -0000
> @@ -533,6 +533,7 @@ kern_fcntl(struct thread *td, int fd, in
> flp, F_POSIX);
> break;
> default:
> +printf("invalid l_type: %#x\n", flp->l_type);
> error = EINVAL;
> break;
> }
Let me recant, it may be amanda at fault or a combination. If you add
the following to the initialization of 'lock' in the test, does your
problem go away?
lock.l_start = 0;
lock.l_len = 0;
If the short test passes, add those lines to amflock() in amanda's
common-src/amflock.c, rebuild amanda and give it another shot.
|