» Linux Archive
Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.
» Sponsor
» Sponsor
02-17-2009, 02:47 PM
PATCH: pyblock: Stop confusing raiddevs and raidsets
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@redhat.com
https://www.redhat.com/mailman/listinfo/anaconda-devel-list
02-17-2009, 04:35 PM
PATCH: pyblock: Stop confusing raiddevs and raidsets
looks good
On Tue, Feb 17, 2009 at 04:47:32PM +0100, Hans de Goede wrote:
> 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@redhat.com
> https://www.redhat.com/mailman/listinfo/anaconda-devel-list
--
Joel Andres Granados
Brno, Czech Republic, Red Hat.
_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@redhat.com
https://www.redhat.com/mailman/listinfo/anaconda-devel-list
All times are GMT. The time now is 06:33 PM .
VBulletin, Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright ©2007 - 2008, www.linux-archive.org