andrey == Andrey Borzenkov [EMAIL PROTECTED] writes:
Nope, you need it to have a working: extract cd, change cd,
make it working.
borzenkov Nope, it is just an accidental side effect. Put_inode (as
borzenkov it was) is buggy and not needed.
Are you sure? We are using put_inode() to _never_ cache inodes of
supermounted media after use. Supermount relies on that behaviour.
andrey To clarify - inode caching is not a problem because supermount never
andrey reuse inodes. On first lookup new dentry/inode pair is allocated,
andrey after media change inode is stale, on next lookup d_revalidate returns
andrey false and we allocate new dentry/inode pair. (directories is
andrey special case but it does not change general rule). We never lookup
andrey or reuse old inode. using force_delete just purges them from cache
andrey faster.
This is a nice theory, but is the thing that is failing :(
For some reason, d_revalidate() is not given the correct values :(
Just now I am having this problem when I switch CD's with ejects in
the midle of some operation:
[root@besta root]# ls /mnt/cdrom/
ls: /mnt/cdrom/libncurses5-5.2-16mdk.i586.rpm: No such file or directory
ls: /mnt/cdrom/libnetpbm9-9.10-6mdk.i586.rpm: No such file or directory
ls: /mnt/cdrom/libnewt0.50-0.50.31-1mdk.i586.rpm: No such file or directory
ls: /mnt/cdrom/libnspr4-4.1-6mdk.i586.rpm: No such file or directory
ls: /mnt/cdrom/libnss3-3.2.1-6mdk.i586.rpm: No such file or directory
ls: /mnt/cdrom/liboaf0-0.6.6-3mdk.i586.rpm: No such file or directory
ls: /mnt/cdrom/libogg0-1.0-0.rc2.1mdk.i586.rpm: No such file or directory
ls: /mnt/cdrom/libopenssl0-0.9.6b-1mdk.i586.rpm: No such file or directory
ls: /mnt/cdrom/libpcap0-0.6.2-1mdk.i586.rpm: No such file or directory
ls: /mnt/cdrom/libpcre0-3.5-1mdk.i586.rpm: No such file or directory
ls: /mnt/cdrom/libpilot-link4-0.9.5-3mdk.i586.rpm: No such file or directory
ls: /mnt/cdrom/libpng2-1.0.12-2mdk.i586.rpm: No such file or directory
ls: /mnt/cdrom/libpng2-devel-1.0.12-2mdk.i586.rpm: No such file or directory
ls: /mnt/cdrom/libprelude0-0.4.2-6mdk.i586.rpm: No such file or directory
ls: /mnt/cdrom/libpspell4-0.12.2-2mdk.i586.rpm: No such file or directory
ls: /mnt/cdrom/libptal0-0.8-1mdk.i586.rpm: No such file or directory
ls: /mnt/cdrom/libpth14-1.4.0-2mdk.i586.rpm: No such file or directory
ls: /mnt/cdrom/libqt2-2.3.1-14mdk.i586.rpm: No such file or directory
ls: /mnt/cdrom/libqtcups2-2.1-13mdk.i586.rpm: No such file or directory
ls: /mnt/cdrom/librep-0.14-1mdk.i586.rpm: No such file or directory
ls: /mnt/cdrom/librsvg1-1.0.1-1mdk.i586.rpm: No such file or directory
ls: /mnt/cdrom/libsafe-2.0.5-5mdk.i586.rpm: No such file or directory
I think that it just has happened that inode numbers of the old sub
mounted media are just given the same number than the old used ones,
but I don't know what that is happening
(yes, there are not rpm on this root directory, it is a installation
disk of Mandrake).
borzenkov - fix the last case of improper ESTALE
I thought this one should been fixed, will look at it.
andrey No, the attached patch really fixes it. It disconnects busy dentries
andrey from fs tree. they go away when process that holds them open goes away.
I will like this patch, just not sure about the handling of the
sb-s_root dentry. We were assuming (for some reason I don't
remember) than the root dentry is always there. I think that it was
to be able to not mount the subfs each time that somebody did a stat
of /mnt/cdrom.
andrey It is as much as I expect to go into update for 9.0 (assuming no
andrey serious bugs is found). For 9.1 if time permit see later.
borzenkov - some more vague ideas
Humm, that is really vague.
andrey No more.
andrey - keep list of struct files; close subfs files on media change to
andrey allow clean umount; mark supermount files as dead; provide mount
andrey option on_media_change={TERM,KILL,EIO,ESTALE} to respectively TERM or
andrey KILL owners or just return EIO/ESTALE on subsequent read/write and
andrey let them handle it.
Only sane way to handle it is -EIO/ESTALE.
andrey - add strict_media_change option to always check; intended for slow
andrey writable media like floppy to catch media change as soon as possible
andrey to avoid overwriting of newly inserted floppy.
andrey - add user interface to umount subfs; it is pretty trivial to
andrey implement as remount option but I am not sure about permissions.
andrey Intentional use is approximately
andrey mount -o remount,release /mnt/floppy
andrey format /dev/fd
andrey mkfs /dev/fd
andrey cp /vmlinuz /mnt/floppy
andrey Not sure how really useful it is but it is quite trivial to implement.
andrey - document the whole stuff
Yep, I did one beggining, but just stopped due to other things.
I have just thinkig about a way to improve the check_media mess.
- s/int s_media_changed/atomic_t s_media_changed/
that way, we are not loosing media changes due to anything, and
should make all things working