Re: [PATCH] Add MOUNT_STATUS ioctl to cdrom device

viro
2003-08-25T20:03:42Z

On Tue, Aug 26, 2003 at 01:22:37AM +0700, Samphan Raruenrom wrote:
> Hi,
>
> This patch add a new ioctl MOUNT_STATUS to the 2.4 kernel's cdrom
> device. It'll be used as an API to query the mount status of a
> cdrom :-
>
> CDROM_MOUNT_STATUS
> Return :-
> 0 = not mount.
> 1 = mounted, but not in-use. It is ok to umount.
> 2 = busy. Umount will result in getting EBUSY.
> <0 = error.

Huh? And what, pray tell, makes cdrom special? Not to mention
the use of ioctl, the inherent raciness of the interface and the fact
that yes,

> This same functionality can be done in user-space,

... which should be the end of it.

> + case CDROM_MOUNT_STATUS: {
> + struct super_block *sb = get_super(dev);
> + if (sb == NULL) return -EINVAL;
> + down_read(&current->namespace->sem);
> + struct vfsmount *mnt = NULL;
> + struct list_head *p;
> + list_for_each(p, &current->namespace->list) {
> + struct vfsmount *m = list_entry(p, struct vfsmount,
> mnt_list);
> + if (sb == m->mnt_sb) {
> + mnt = m; break;
> + }
> + }
> + up_read(&current->namespace->sem);

And what about other namespaces?

> + drop_super(sb);
> + int mstat = 0; /* 0 not mounted, 1 umount ok, 2 umount EBUSY
> */
> + if (mnt) mstat = 1 + (atomic_read(&mnt->mnt_count) > 1);

Or the possibility that
* mnt might've been freed by that point.
* we might have the damn thing mounted in several places, some
busy, some not.
* cdrom had been used not by mount.
* cdrom had been mounted just as we had decided to tell that it's
not busy.