[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