Alex Elder 32eec68d2f rbd: don't drop the rbd_id too early
Currently an rbd device's id is released when it is removed, but it
is done before the code is run to clean up sysfs-related files (such
as /sys/bus/rbd/devices/1).

It's possible that an rbd is still in use after the rbd_remove()
call has been made.  It's essentially the same as an active inode
that stays around after it has been removed--until its final close
operation.  This means that the id shows up as free for reuse at a
time it should not be.

The effect of this was seen by Jens Rehpoehler, who:
    - had a filesystem mounted on an rbd device
    - unmapped that filesystem (without unmounting)
    - found that the mount still worked properly
    - but hit a panic when he attempted to re-map a new rbd device

This re-map attempt found the previously-unmapped id available.
The subsequent attempt to reuse it was met with a panic while
attempting to (re-)install the sysfs entry for the new mapped
device.

Fix this by holding off "putting" the rbd id, until the rbd_device
release function is called--when the last reference is finally
dropped.

Note: This fixes: http://tracker.newdream.net/issues/1907

Signed-off-by: Alex Elder <elder@dreamhost.com>
Signed-off-by: Sage Weil <sage@newdream.net>
2012-03-22 10:47:50 -05:00
..
2012-01-03 22:54:07 -05:00
2012-01-03 22:54:07 -05:00
2012-01-14 15:07:24 -08:00
2011-08-08 11:40:15 +02:00
2005-04-16 15:20:36 -07:00
2012-03-05 15:49:43 -08:00
2005-04-16 15:20:36 -07:00
2005-04-16 15:20:36 -07:00
2012-03-22 10:47:50 -05:00
2012-03-22 10:47:50 -05:00
2011-12-12 12:42:12 +01:00
2009-03-26 21:15:27 +01:00
2011-12-10 19:52:46 +01:00
2012-01-14 15:07:24 -08:00
2011-03-31 11:26:23 -03:00
2008-10-21 07:48:11 -04:00
2012-01-05 08:34:29 +01:00