Hello, first, nice work with systemimager :)
I have a issue with systemimager trunk and a newer kernel. I have build a newer kernelk 2.6.31, copied the modules to boel_binaries.tar.gz file and the updated the kernel. All is working perfectly, but lvm makes problems. The partition is created through parted correctly, but then the pvcreate command fails: # pvcreate -M2 -ff -y /dev/sda2 Device /dev/sda2 not found (or ignored by filtering). This works with a older kernel (2.6.24) without any problem, so it must be kernel related. I read and found, that the sysfs may be changed, as in a repository of lvm i found a change short after the release of the plain old lvm in systemimager :) The patch is attached as diff file, The url for the original file is: http://sources.redhat.com/ml/lvm2-cvs/2007-10/msg00008.html I first ask, if anyone have a clue, if this is correct, i don`t want to use UYOK, as 1 kernel for all distributions is simpler to manage in sum. I need a new kernel, as we use new hardware /intel dg43gt mainboard, and some others with ICH10R). BTW: Are there plans, to upgrade systemimager to a newer kernel, lvm etc. are here testers or so needed ? thanks, ronny
################################################################################ # Added by Ronny Boesger, this is for supporting newer kernels. # in my case, its 2.6.31 ################################################################################ *** lib/filters/filter-sysfs.c 2007-04-26 18:44:58.000000000 +0200 --- lib/filters/filter-sysfs.c.new 2009-09-25 18:48:07.000000000 +0200 *************** *** 20,31 **** #include <dirent.h> ! static int _locate_sysfs_blocks(const char *proc, char *path, size_t len) { char proc_mounts[PATH_MAX]; - int r = 0; FILE *fp; char *split[4], buffer[PATH_MAX + 16]; if (!*proc) { log_verbose("No proc filesystem found: skipping sysfs filter"); --- 20,33 ---- #include <dirent.h> ! static int _locate_sysfs_blocks(const char *proc, char *path, size_t len, ! unsigned *sysfs_depth) { char proc_mounts[PATH_MAX]; FILE *fp; char *split[4], buffer[PATH_MAX + 16]; + const char *sys_mnt = NULL; + struct stat info; if (!*proc) { log_verbose("No proc filesystem found: skipping sysfs filter"); *************** *** 46,55 **** while (fgets(buffer, sizeof(buffer), fp)) { if (dm_split_words(buffer, 4, 0, split) == 4 && !strcmp(split[2], "sysfs")) { ! if (dm_snprintf(path, len, "%s/%s", split[1], ! "block") >= 0) { ! r = 1; ! } break; } } --- 48,54 ---- while (fgets(buffer, sizeof(buffer), fp)) { if (dm_split_words(buffer, 4, 0, split) == 4 && !strcmp(split[2], "sysfs")) { ! sys_mnt = split[1]; break; } } *************** *** 57,63 **** if (fclose(fp)) log_sys_error("fclose", proc_mounts); ! return r; } /*---------------------------------------------------------------- --- 56,125 ---- if (fclose(fp)) log_sys_error("fclose", proc_mounts); ! if (!sys_mnt) { ! log_error("Failed to find sysfs mount point"); ! return 0; ! } ! ! /* ! * unified classification directory for all kernel subsystems ! * ! * /sys/subsystem/block/devices ! * |-- sda -> ../../../devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda ! * |-- sda1 -> ../../../devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1 ! * `-- sr0 -> ../../../devices/pci0000:00/0000:00:1f.2/host1/target1:0:0/1:0:0:0/block/sr0 ! * ! */ ! if (dm_snprintf(path, len, "%s/%s", sys_mnt, ! "subsystem/block/devices") >= 0) { ! if (!stat(path, &info)) { ! *sysfs_depth = 0; ! return 1; ! } ! } ! ! /* ! * block subsystem as a class ! * ! * /sys/class/block ! * |-- sda -> ../../devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda ! * |-- sda1 -> ../../devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1 ! * `-- sr0 -> ../../devices/pci0000:00/0000:00:1f.2/host1/target1:0:0/1:0:0:0/block/sr0 ! * ! */ ! if (dm_snprintf(path, len, "%s/%s", sys_mnt, "class/block") >= 0) { ! if (!stat(path, &info)) { ! *sysfs_depth = 0; ! return 1; ! } ! } ! ! /* ! * old block subsystem layout with nested directories ! * ! * /sys/block/ ! * |-- sda ! * | |-- capability ! * | |-- dev ! * ... ! * | |-- sda1 ! * | | |-- dev ! * ... ! * | ! * `-- sr0 ! * |-- capability ! * |-- dev ! * ... ! * ! */ ! if (dm_snprintf(path, len, "%s/%s", sys_mnt, "block") >= 0) { ! if (!stat(path, &info)) { ! *sysfs_depth = 1; ! return 1; ! } ! } ! ! return 0; } /*---------------------------------------------------------------- *************** *** 72,82 **** struct dev_set { struct dm_pool *mem; const char *sys_block; int initialised; struct entry *slots[SET_BUCKETS]; }; ! static struct dev_set *_dev_set_create(struct dm_pool *mem, const char *sys_block) { struct dev_set *ds; --- 134,147 ---- struct dev_set { struct dm_pool *mem; const char *sys_block; + unsigned sysfs_depth; int initialised; struct entry *slots[SET_BUCKETS]; }; ! static struct dev_set *_dev_set_create(struct dm_pool *mem, ! const char *sys_block, ! unsigned sysfs_depth) { struct dev_set *ds; *************** *** 85,90 **** --- 150,156 ---- ds->mem = mem; ds->sys_block = dm_pool_strdup(mem, sys_block); + ds->sysfs_depth = sysfs_depth; ds->initialised = 0; return ds; *************** *** 168,180 **** /* * Recurse through sysfs directories, inserting any devs found. */ ! static int _read_devs(struct dev_set *ds, const char *dir) { struct dirent *d; DIR *dr; - unsigned char dtype; struct stat info; char path[PATH_MAX]; dev_t dev = { 0 }; int r = 1; --- 234,246 ---- /* * Recurse through sysfs directories, inserting any devs found. */ ! static int _read_devs(struct dev_set *ds, const char *dir, unsigned sysfs_depth) { struct dirent *d; DIR *dr; struct stat info; char path[PATH_MAX]; + char file[PATH_MAX]; dev_t dev = { 0 }; int r = 1; *************** *** 194,224 **** continue; } ! dtype = d->d_type; ! ! if (dtype == DT_UNKNOWN) { ! if (lstat(path, &info) >= 0) { ! if (S_ISLNK(info.st_mode)) ! dtype = DT_LNK; ! else if (S_ISDIR(info.st_mode)) ! dtype = DT_DIR; ! else if (S_ISREG(info.st_mode)) ! dtype = DT_REG; ! } } ! ! if (dtype == DT_DIR) { ! if (!_read_devs(ds, path)) { ! r = 0; ! break; ! } } - - if ((dtype == DT_REG && !strcmp(d->d_name, "dev"))) - if (!_read_dev(path, &dev) || !_set_insert(ds, dev)) { - r = 0; - break; - } } if (closedir(dr)) --- 260,280 ---- continue; } ! /* devices have a "dev" file */ ! if (dm_snprintf(file, sizeof(file), "%s/dev", path) < 0) { ! log_error("sysfs path name too long: %s in %s", ! d->d_name, dir); ! continue; } ! if (!stat(file, &info)) { ! /* recurse if we found a device and expect subdirs */ ! if (sysfs_depth) ! _read_devs(ds, path, sysfs_depth - 1); ! ! /* add the device we have found */ ! if (_read_dev(file, &dev)) ! _set_insert(ds, dev); } } if (closedir(dr)) *************** *** 229,235 **** static int _init_devs(struct dev_set *ds) { ! if (!_read_devs(ds, ds->sys_block)) { ds->initialised = -1; return 0; } --- 285,291 ---- static int _init_devs(struct dev_set *ds) { ! if (!_read_devs(ds, ds->sys_block, ds->sysfs_depth)) { ds->initialised = -1; return 0; } *************** *** 267,277 **** struct dev_filter *sysfs_filter_create(const char *proc) { char sys_block[PATH_MAX]; struct dm_pool *mem; struct dev_set *ds; struct dev_filter *f; ! if (!_locate_sysfs_blocks(proc, sys_block, sizeof(sys_block))) return NULL; if (!(mem = dm_pool_create("sysfs", 256))) { --- 323,334 ---- struct dev_filter *sysfs_filter_create(const char *proc) { char sys_block[PATH_MAX]; + unsigned sysfs_depth; struct dm_pool *mem; struct dev_set *ds; struct dev_filter *f; ! if (!_locate_sysfs_blocks(proc, sys_block, sizeof(sys_block), &sysfs_depth)) return NULL; if (!(mem = dm_pool_create("sysfs", 256))) { *************** *** 279,285 **** return NULL; } ! if (!(ds = _dev_set_create(mem, sys_block))) { log_error("sysfs dev_set creation failed"); goto bad; } --- 336,342 ---- return NULL; } ! if (!(ds = _dev_set_create(mem, sys_block, sysfs_depth))) { log_error("sysfs dev_set creation failed"); goto bad; }
<<attachment: rb.vcf>>
------------------------------------------------------------------------------ Come build with us! The BlackBerry® Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9-12, 2009. Register now! http://p.sf.net/sfu/devconf
_______________________________________________ sisuite-users mailing list sisuite-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sisuite-users