Re: [PATCH] MMC block removable flag

From: Andries Brouwer
Date: Sat Jan 08 2005 - 08:09:47 EST


On Sat, Jan 08, 2005 at 11:09:57AM +0000, Russell King wrote:
> On Fri, Jan 07, 2005 at 03:00:35PM +0100, Andries Brouwer wrote:
> > On Fri, Jan 07, 2005 at 12:39:47PM +0000, Russell King wrote:
> > > Can anyone comment on the purpose of this (GENHD_FL_REMOVABLE) flag?
> > > Al? Jens?
> >
> > GENHD_FL_REMOVABLE is set by a number of drivers (floppy, CDROM, ...).
> > It is used in two places:
> > (1) to fill the file /sys/block/*/removable
> > (2) in genhd to suppress listing a nonpartitioned removable device
> > in /proc/partitions.
> >
> > In other words, it is for user space only, precisely as Pierre Ossman said.
>
> Your point 2 isn't user space though.

?? (1) Is about filling /sys/... and (2) about filling /proc/...
Both only have info for user space. The kernel does not react
to this flag.

> Also, it's buggy. Consider a SCSI PCMCIA card with SCSI disks attached.
> When you eject that card, your SCSI disks disappear, yet they aren't
> marked as removable. If user space is relying on /sys/block/*/removable
> to tell it if things may go away, then user space is buggy.

I think user space is pragmatic rather than correct.
When undesirable things happen someone will complain,
and the problem will be corrected somehow.

The distinction removable / non-removable is too primitive,
there are many variations involving chains of devices.

> Maybe it's for devices which may be present (eg, floppy driver), but
> which have removable media (eg, floppy disk), rather than removable
> devices?

I told you what it does. But you ask what it is intended for.
Then you must go to the person who first introduced it.
I guess that might have been Richard Gooch. The flag came in
in patch-2.3.46 with devfs. If it is was set, devfs would set
DEVFS_FL_REMOVABLE.

+- Added DEVFS_FL_REMOVABLE flag
+
+- Check for disc change when listing directories with
+ removable media devices

One has code like

+ if (flags & DEVFS_FL_REMOVABLE)
+ {
+ de->u.fcb.removable = TRUE;
+ ++de->parent->u.dir.num_removable;
+ }

and

+static void scan_dir_for_removable (struct devfs_entry *dir)
+/* [SUMMARY] Scan a directory for removable media devices and check media.
+ <dir> The directory.
+ [RETURNS] Nothing.
+*/
+{
+ struct devfs_entry *de;
+
+ if (dir->u.dir.num_removable < 1) return;
+ for (de = dir->u.dir.first; de != NULL; de = de->next)
+ {
+ if (!de->registered) continue;
+ if ( !S_ISBLK (de->mode) ) continue;
+ if (!de->u.fcb.removable) continue;
+ check_disc_changed (de);
+ }
+} /* End Function scan_dir_for_removable */

So here you have it. It is a devfs thing and could have been
removed when devfs was removed. However, today it is exported
in sysfs, and one must worry about possible users in user space.

Andries
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/