From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Wed, 10 Dec 2003 09:42:40 +0300 From: Grigory Batalov To: ALT Linux kernel packages development Subject: Re: [d-kernel] shmctl: Invalid argument Message-Id: <20031210094240.6a973096.bga@altlinux.ru> In-Reply-To: <20031209145549.GH835@master.mivlgu.local> References: <20031209172932.709fe253.bga@altlinux.ru> <20031209145549.GH835@master.mivlgu.local> Organization: OAO "Kovdorsky GOK" X-Mailer: Sylpheed version 0.8.8 (GTK+ 1.2.10; i586-alt-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=KOI8-R Content-Transfer-Encoding: 8bit X-BeenThere: devel-kernel@altlinux.ru X-Mailman-Version: 2.1.3 Precedence: list Reply-To: ALT Linux kernel packages development List-Id: ALT Linux kernel packages development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Dec 2003 06:42:44 -0000 Archived-At: List-Archive: List-Post: On Tue, 9 Dec 2003 17:55:49 +0300 Sergey Vlasov 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 > > > > > > Однако, на ядре 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" wrote: > Это, скорее всего, связано с CONFIG_HARDEN_SHM=y в конфигурации ядра: > разделяемая память освобождается, если она не используется ни одним > процессом. Как я понимаю, нужно пропатчить taper, чтобы shmdt всегда выполнялось ПОСЛЕ shmctl? -- Григорий Баталов, группа техподдержки ОАО "Ковдорский ГОК"