[d-kernel] shmctl: Invalid argument
Grigory Batalov
bga at altlinux.ru
Wed Dec 10 09:42:40 MSK 2003
On Tue, 9 Dec 2003 17:55:49 +0300
Sergey Vlasov <vsu at altlinux.ru> wrote:
> > После переезда с ядра 2.4.20-alt10-smp на 2.4.22-std-smp-alt12
> > от программы amdump (пакет amanda) наблюдаются сообщения:
> >
> > taper: FATAL shmctl: Invalid argument
> >
> > Я просмотрел исходники taper, его манипуляции с памятью
> > можно упростить до прилагаемого файла.
> > Указанное сообщение соответствует коду в taper.c:
> >
> > if(shmid == -1) return; /* nothing to destroy */
> > if(shmctl(shmid, IPC_RMID, NULL) == -1) {
> > error("shmctl: %s", strerror(errno));
> > }
> >
> > При запуске shmtest обычным пользователем видно, что память
> > выделяется и затем (через заданные 5 сек.) освобождается:
> >
> > $ ipcs
> > ------ Shared Memory Segments --------
> > key shmid owner perms bytes nattch status
> > 0x00000000 262150 bga 700 1048576 1
> > <skip>
> >
> > Однако, на ядре 2.4.20-alt10-smp программа завершается
> > молча, а на 2.4.22-std-smp-alt12 выходит сообщение:
> >
> > ./shmtest: : Unknown error 2339276
>
> Не воспроизводится...
>
> И программа с ошибками - попробуйте приложенный исправленный вариант.
>
> gcc -o shmtest -g -O2 -Wall -W shmtest.c
Наверное, они error() переопределили по аналогии с perror(),
а я не заметил.
Указанное "shmctl: Invalid argument" при правильном
использовании error() появляется, если shmdt(result)
выполнить ДО shmctl(shmid, IPC_RMID, NULL).
On Tue, 9 Dec 2003 17:50:52 +0300
"Dmitry V. Levin" <ldv at altlinux.org> wrote:
> Это, скорее всего, связано с CONFIG_HARDEN_SHM=y в конфигурации ядра:
> разделяемая память освобождается, если она не используется ни одним
> процессом.
Как я понимаю, нужно пропатчить taper, чтобы shmdt всегда
выполнялось ПОСЛЕ shmctl?
--
Григорий Баталов,
группа техподдержки
ОАО "Ковдорский ГОК"
More information about the devel-kernel
mailing list