md/bitmap: reduce dependence on sysfs.
authorNeilBrown <neilb@suse.de>
Tue, 1 Jun 2010 09:37:32 +0000 (19:37 +1000)
committerNeilBrown <neilb@suse.de>
Mon, 26 Jul 2010 03:21:31 +0000 (13:21 +1000)
For dm-raid45 we will want to use bitmaps in dm-targets which don't
have entries in sysfs, so cope with the mddev not living in sysfs.

Signed-off-by: NeilBrown <neilb@suse.de>
drivers/md/bitmap.c

index 67fb32d..8af4d65 100644 (file)
@@ -1358,7 +1358,7 @@ void bitmap_endwrite(struct bitmap *bitmap, sector_t offset, unsigned long secto
                    bitmap->events_cleared < bitmap->mddev->events) {
                        bitmap->events_cleared = bitmap->mddev->events;
                        bitmap->need_sync = 1;
-                       sysfs_notify_dirent(bitmap->sysfs_can_clear);
+                       sysfs_notify_dirent_safe(bitmap->sysfs_can_clear);
                }
 
                if (!success && ! (*bmc & NEEDED_MASK))
@@ -1643,7 +1643,7 @@ int bitmap_create(mddev_t *mddev)
        struct file *file = mddev->bitmap_info.file;
        int err;
        sector_t start;
-       struct sysfs_dirent *bm;
+       struct sysfs_dirent *bm = NULL;
 
        BUILD_BUG_ON(sizeof(bitmap_super_t) != 256);
 
@@ -1664,7 +1664,8 @@ int bitmap_create(mddev_t *mddev)
 
        bitmap->mddev = mddev;
 
-       bm = sysfs_get_dirent(mddev->kobj.sd, NULL, "bitmap");
+       if (mddev->kobj.sd)
+               bm = sysfs_get_dirent(mddev->kobj.sd, NULL, "bitmap");
        if (bm) {
                bitmap->sysfs_can_clear = sysfs_get_dirent(bm, NULL, "can_clear");
                sysfs_put(bm);