I straced umount, and found that it actually does not do anything with the loop device itself, or calls losetup. I suppose what happens is that the kernel itself tears down the loop device when you umount() a device which was mounted with -o loop (I don't see a mount option in /proc/mounts which would indicate this, so there must be some internal housekeeping flag?). I guess this code path is simply missing the kobject_uevent() call.
I straced umount, and found that it actually does not do anything with the loop device itself, or calls losetup. I suppose what happens is that the kernel itself tears down the loop device when you umount() a device which was mounted with -o loop (I don't see a mount option in /proc/mounts which would indicate this, so there must be some internal housekeeping flag?). I guess this code path is simply missing the kobject_uevent() call.