Re: [PATCH] Add MOUNT_STATUS ioctl to cdrom device

Christoph Hellwig
2003-08-25T18:50:43Z

On Tue, Aug 26, 2003 at 01:22:37AM +0700, Samphan Raruenrom wrote:
> #include <linux/sysctl.h>
> #include <linux/proc_fs.h>
> #include <linux/init.h>
> +#include <linux/namespace.h>
> +#include <linux/mount.h>

your mailer is screwed.

>
> + 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);
> + 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);
> + cdinfo(CD_DO_IOCTL, "mount status(%s) = %d\n", mnt->mnt_devname, mstat);
> + return mstat;

WTF? This is not only a layering violation but also totally racy.

Rejected.