]> sourceware.org Git - lvm2.git/commitdiff
Fix backward compatibility for major:minor query.
authorMilan Broz <mbroz@redhat.com>
Wed, 17 Jun 2009 20:55:24 +0000 (20:55 +0000)
committerMilan Broz <mbroz@redhat.com>
Wed, 17 Jun 2009 20:55:24 +0000 (20:55 +0000)
Is an application uses query and set major:minor
to device, it should not fallback to default major by default.

Add new function whoich allows that (and use it in lvm2).

WHATS_NEW
WHATS_NEW_DM
lib/activate/dev_manager.c
libdm/.exported_symbols
libdm/ioctl/libdm-iface.c
libdm/ioctl/libdm-targets.h
libdm/libdevmapper.h
libdm/libdm-common.c

index 1ae02d9926bebe435b8ad5cf70879d734d1b9226..69f8fc06546984897f1244865830802727cb9eb8 100644 (file)
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
 Version 2.02.48 - 
 ===============================
+  Explicitly request fallback to default major number in device mapper.
   Ignore suspended devices during repair.
   Call vgreduce --removemissing automatically to clean up bad PVs in dmeventd.
   Suggest use lvchange --resync when up converting not yet synced mirror.
index 6ad04cf692b374e2e3378e6f271077f0f1e1e5cc..e1882c0d819e89f7cbc697c9b7f0dbcac759c4d6 100644 (file)
@@ -1,5 +1,6 @@
 Version 1.02.33 -
 ===============================
+  Do not fallback to default major number, provide new function instead (1.02.31)
   Do not fork daemon when dmeventd cannot be found.
   Add crypt target handling to libdevmapper node.
   Add splitname command to dmsetup.
index ab618177a3638a17eaf5c31ffd8136c7d0914986..87a5c69eac9c6a6b9a6a2ae6a834c46ae6479f3d 100644 (file)
@@ -111,10 +111,8 @@ static struct dm_task *_setup_task(const char *name, const char *uuid,
        if (event_nr)
                dm_task_set_event_nr(dmt, *event_nr);
 
-       if (major) {
-               dm_task_set_major(dmt, major);
-               dm_task_set_minor(dmt, minor);
-       }
+       if (major)
+               dm_task_set_major_minor(dmt, major, minor, 1);
 
        return dmt;
 }
@@ -171,7 +169,7 @@ int device_is_usable(dev_t dev)
                return 0;
        }
 
-       if (!dm_task_set_major(dmt, MAJOR(dev)) || !dm_task_set_minor(dmt, MINOR(dev)))
+       if (!dm_task_set_major_minor(dmt, MAJOR(dev), MINOR(dev), 1))
                goto_out;
 
        if (!dm_task_run(dmt)) {
index 82a7c9eaa538bbf437b257ca06aafba399b1f8a5..f5d3852ceddb5fea48648a9b8aaf69d9e3af7625 100644 (file)
@@ -24,6 +24,7 @@ dm_task_set_newname
 dm_task_set_event_nr
 dm_task_set_major
 dm_task_set_minor
+dm_task_set_major_minor
 dm_task_set_sector
 dm_task_set_message
 dm_task_set_uid
index 3698edab6cda4ea4603b09102ba1340eaf90c831..2f8a930646878bd1a0aa499cda41c60131462b4d 100644 (file)
@@ -1335,7 +1335,8 @@ static struct dm_ioctl *_flatten(struct dm_task *dmt, unsigned repeat_count)
                        goto bad;
                }
 
-               if (!_dm_multiple_major_support && dmt->major != _dm_device_major) {
+               if (!_dm_multiple_major_support && dmt->allow_default_major_fallback &&
+                   dmt->major != _dm_device_major) {
                        log_verbose("Overriding major number of %" PRIu32 
                                    " with %" PRIu32 " for persistent device.",
                                    dmt->major, _dm_device_major);
index 1bb9ce176a041cf6f88c0201b99374db1eb4563f..267bb8d5fee660744251632018700eed981b67e2 100644 (file)
@@ -41,6 +41,7 @@ struct dm_task {
        uint32_t event_nr;
        int major;
        int minor;
+       int allow_default_major_fallback;
        uid_t uid;
        gid_t gid;
        mode_t mode;
index 4d03a21738e1b5b6590bd0a61ab4d049b56b2872..3cecf4c1b0c3098d9ff3c34bf5ecd7466a8aaefb 100644 (file)
@@ -145,6 +145,7 @@ int dm_task_set_ro(struct dm_task *dmt);
 int dm_task_set_newname(struct dm_task *dmt, const char *newname);
 int dm_task_set_minor(struct dm_task *dmt, int minor);
 int dm_task_set_major(struct dm_task *dmt, int major);
+int dm_task_set_major_minor(struct dm_task *dmt, int major, int minor, int allow_default_major_fallback);
 int dm_task_set_uid(struct dm_task *dmt, uid_t uid);
 int dm_task_set_gid(struct dm_task *dmt, gid_t gid);
 int dm_task_set_mode(struct dm_task *dmt, mode_t mode);
index bbb46f51c76303bacd835eca02337979b47b3a8d..924692339a3c9bfa0c8d5dffca0c5165276abebe 100644 (file)
@@ -118,6 +118,7 @@ struct dm_task *dm_task_create(int type)
        dmt->type = type;
        dmt->minor = -1;
        dmt->major = -1;
+       dmt->allow_default_major_fallback = 1;
        dmt->uid = DM_DEVICE_UID;
        dmt->gid = DM_DEVICE_GID;
        dmt->mode = DM_DEVICE_MODE;
@@ -190,6 +191,7 @@ int dm_task_set_uuid(struct dm_task *dmt, const char *uuid)
 int dm_task_set_major(struct dm_task *dmt, int major)
 {
        dmt->major = major;
+       dmt->allow_default_major_fallback = 0;
 
        return 1;
 }
@@ -201,6 +203,16 @@ int dm_task_set_minor(struct dm_task *dmt, int minor)
        return 1;
 }
 
+int dm_task_set_major_minor(struct dm_task *dmt, int major, int minor,
+                           int allow_default_major_fallback)
+{
+       dmt->major = major;
+       dmt->minor = minor;
+       dmt->allow_default_major_fallback = allow_default_major_fallback;
+
+       return 1;
+}
+
 int dm_task_set_uid(struct dm_task *dmt, uid_t uid)
 {
        dmt->uid = uid;
This page took 0.055869 seconds and 5 git commands to generate.