From: Sergey Vlasov <vsu@altlinux.ru> To: ALT Devel discussion list <devel@altlinux.ru> Subject: Re: [devel] Re: хм... umount и hal Date: Wed, 31 Aug 2005 22:39:24 +0400 Message-ID: <20050831183924.GA11717@procyon.home> (raw) In-Reply-To: <20050831153259.GJ29769@immo.ru> [-- Attachment #1: Type: text/plain, Size: 2945 bytes --] On Wed, Aug 31, 2005 at 07:32:59PM +0400, Alexey I. Froloff wrote: > * Alexey I.Froloff <raorn@> [050830 19:06]: > > Ну, у volume'а есть два пропертя - is_mounted и mount_point, при > > чём обновляются они оба сразу. Вот первую проперть надо > > обновлять уже после освобождения устройства, впихнув в ядро ещё > > одно сообщение и в hal ещё один обработчик... > А вот и патчик для 2.6.12-почтиstd26-alt3. Untested, лучшего > названия кроме FREE не нашёл ;-) > diff -Naurp kernel-source-2.6.12-orig/fs/super.c kernel-source-2.6.12/fs/super.c > --- kernel-source-2.6.12-orig/fs/super.c 2005-06-17 23:48:29 +0400 > +++ kernel-source-2.6.12/fs/super.c 2005-08-31 19:17:54 +0400 > @@ -734,6 +734,7 @@ void kill_block_super(struct super_block > generic_shutdown_super(sb); > sync_blockdev(bdev); > close_bdev_excl(bdev); > + bdev_uevent(bdev, KOBJ_FREE); Так делать нельзя - close_bdev_excl() вызывает blkdev_put(), и после этого bdev может быть уже уничтожено (если этот umount выполняется после отсоединения устройства). Нужно либо ставить bdev_uevent() перед close_bdev_excl() (но тогда получается race - до выполнения bd_release(), вызываемого в close_bdev_excl(), устройство невозможно открыть с O_EXCL или смонтировать, так что объявлять о его освобождении ещё рано), либо вместо close_bdev_excl() вызывать отдельно bd_release() и blkdev_put(), вставив между ними вызов bdev_uevent() (что тоже не совсем красиво, поскольку исчезает явный вызов функции, соответствующей open_bdev_excl()). С другой стороны, если сначала вызвать bd_release(), получается race другого вида - кто-то может выполнить bd_claim() и объявить о занятии устройства до того, как будет сгенерировано сообщение об освобождении устройства. Возможно, первый вариант race лучше, поскольку в этом случае хотя бы гарантируется правильный порядок событий, а нарваться на занятость устройства новым монтированием обработчик KOBJ_FREE может в любом случае. > } > > EXPORT_SYMBOL(kill_block_super); > diff -Naurp kernel-source-2.6.12-orig/include/linux/kobject_uevent.h kernel-source-2.6.12/include/linux/kobject_uevent.h > --- kernel-source-2.6.12-orig/include/linux/kobject_uevent.h 2005-06-17 23:48:29 +0400 > +++ kernel-source-2.6.12/include/linux/kobject_uevent.h 2005-08-31 19:16:50 +0400 > @@ -29,6 +29,7 @@ enum kobject_action { > KOBJ_UMOUNT = (__force kobject_action_t) 0x05, /* umount event for block devices */ > KOBJ_OFFLINE = (__force kobject_action_t) 0x06, /* offline event for hotplug devices */ > KOBJ_ONLINE = (__force kobject_action_t) 0x07, /* online event for hotplug devices */ > + KOBJ_FREE = (__force kobject_action_t) 0x08, /* free device event for block devices */ Имя слишком общее, и не совсем отражает суть события. Если это именно освобождение, тогда получается, что это событие должно выдаваться и при закрытии устройства, открытого с O_EXCL (т.е., где-то в bd_release()). [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
next prev parent reply other threads:[~2005-08-31 18:39 UTC|newest] Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top 2005-08-30 11:15 [devel] " Alexey I.Froloff 2005-08-30 12:30 ` [devel] " Anton Farygin 2005-08-30 13:19 ` Sergey Vlasov 2005-08-30 13:34 ` Alexey I.Froloff 2005-08-30 14:49 ` Sergey Vlasov 2005-08-30 15:05 ` Alexey I.Froloff 2005-08-31 15:32 ` Alexey I.Froloff 2005-08-31 18:39 ` Sergey Vlasov [this message] 2005-09-01 16:38 ` [devel] emacs NMU Igor Vlasenko 2005-09-02 5:40 ` Ivan Fedorov 2005-09-02 12:46 ` Igor Vlasenko 2005-10-26 19:46 ` [devel] Re: хм... umount и hal Sergey Vlasov 2005-10-26 20:51 ` Alexey I. Froloff 2005-08-30 14:25 ` [devel] " Anton Farygin 2005-08-31 7:28 ` [devel] " Alexey I.Froloff
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20050831183924.GA11717@procyon.home \ --to=vsu@altlinux.ru \ --cc=devel@altlinux.ru \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
ALT Linux Team development discussions This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \ devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru public-inbox-index devel Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.devel AGPL code for this site: git clone https://public-inbox.org/public-inbox.git