Old ATA disk names emulation [Was: Switch from legacy ata(4) to
CAM-based ATA]
Alexander Motin
mav at FreeBSD.org
Mon Apr 25 10:23:44 UTC 2011
Hi.
I've implemented following patch to keep basic compatibility for the
migrating users. I don't like such hacky things, but at least I tried to
make it less invasive.
The idea:
- New xpt_path_legacy_ata_id() function in CAM tries to predict bus
unit number and then device unit number for specified path, as if it was
with legacy ATA with ATA_STATIC_ID option.
- on attach, ada driver fetches that number (if not disabled using
tunable kern.cam.ada.legacy_aliases), prints to console something like:
ada0: Previously was known as ad12
, and sets kernel environment variable like:
kern.devalias.ada0="ad12"
- when geom_dev tastes new geom and creates device node for it, it also
tries to match prefix of the device name with present kern.devalias.*
enviromnent variables, and, if some match found, creates alias with
substituted name (ada0 -> ad12, ada0s1 -> ad12s1, etc.).
The patch is here: http://people.freebsd.org/~mav/legacy_aliases.patch
I did few tests and it seems like working -- two sets of device nodes
appeared for each device, I can successfully label and mount any of them.
What will not work:
- old device names won't be seen inside GEOM, so users who hardcoded
provider names in gmirror/gstripe/... metadata (not the default
behavior) are still in trouble.
- patch mimics ATA_STATIC_ID behavior, if user had custom kernel
without it, he should update device names manually.
- it won't work for users with hot-unplugging ATA controllers (not
devices), but I believe it is really rare case.
- low-level tools, such as smartmontools, won't be able to work with
alias devices, as background ada driver doesn't implements legacy
ioctls. May be I could partially fix this.
Except those, I think this patch should work for the most of users.
Any more objections/ideas? Is this an acceptable solution?
--
Alexander Motin
More information about the freebsd-current
mailing list