pydmraid_ctx_discover_raidsets() was confusing raiddevices with raidsets, and thus calling group_set multiple times while it should be called only once. This caused us to hang on dmraid10 on nvidia raid controllers. This patch also fixes the "Only on argument allowed" error we've been seeing with isw setups --- dmraid.c | 63 +++---------------------------------------------------------- 1 files changed, 4 insertions(+), 59 deletions(-) diff --git a/dmraid.c b/dmraid.c index 3b2f3c7..f2f8d9e 100644 --- a/dmraid.c +++ b/dmraid.c @@ -1218,71 +1218,16 @@ static PyObject * pydmraid_ctx_discover_raidsets(PyObject *self) { PydmraidContextObject *ctx = (PydmraidContextObject *)self; - struct raid_dev *rd; int n; + char *argv[] = { NULL }; if (!count_devices(ctx->lc, RAID)) { return PyLong_FromLong(0); } - for_each_raiddev(ctx->lc, rd) { - PyObject *name = NULL, *dict = NULL; - struct raid_set *rs; - - dict = PyDict_New(); - if (!dict) - return NULL; - - for_each_raidset(ctx->lc, rs) { - struct raid_set *subset; - - if (T_GROUP(rs)) { - for_each_subset(rs, subset) { - if (PyDict_SetItemString(dict, rs->name, - Py_None) < 0) { - Py_DECREF(dict); - return NULL; - } - } - } else if (PyDict_SetItemString(dict, rs->name, - Py_None) < 0) { - Py_DECREF(dict); - return NULL; - } - } - - name = PyString_FromString(rd->name); - if (!name) { - Py_DECREF(dict); - return NULL; - } - - if (PyDict_Contains(dict, name)) { - Py_DECREF(name); - continue; - } - - if (PyDict_SetItem(dict, name, Py_None) < 0) { - Py_DECREF(name); - Py_DECREF(dict); - return NULL; - } - - Py_DECREF(name); - if (!group_set(ctx->lc, &rd->name)) { - /* - * This means that whatever was in name did not - * play well with current context. lest try - * a NULL list. - */ - char *temp[] = {NULL}; - if (!group_set(ctx->lc, temp)){ - pyblock_PyErr_Format(GroupingError, "%s", rd->name); - Py_DECREF(dict); - return NULL; - } - } - Py_DECREF(dict); + if (!group_set(ctx->lc, argv)) { + pyblock_PyErr_Format(GroupingError, "group_set failed"); + return NULL; } n = count_devices(ctx->lc, SETS); return PyLong_FromUnsignedLong(n); -- 1.6.1.3 _______________________________________________ Anaconda-devel-list mailing list Anaconda-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/anaconda-devel-list