}
#define MAX_STRING_SIZE 128
+#define DEVICES_LIST "/proc/fs/lustre/devices"
int op_check(int type_num, char **obd_type, char *dir)
{
- int rc=0;
- int i=0,j=0,k;
- char buf[OBD_MAX_IOCTL_BUFFER];
- char *buf2;
- struct obd_ioctl_data *data = (struct obd_ioctl_data *)buf;
-
- memset(buf, 0, sizeof(buf));
- data->ioc_version = OBD_IOCTL_VERSION;
- data->ioc_inllen1 = sizeof(buf) - size_round(sizeof(*data));
- data->ioc_len = obd_ioctl_packlen(data);
-
- rc = l_ioctl(OBD_DEV_ID, OBD_IOC_LIST, data);
-
- buf2 = data->ioc_bulk;
-
- if (!data->ioc_inlbuf1) {
- err_msg("No buffer passed!\n");
- rc = errno;
+ int rc = 0;
+ int i;
+
+ char buf[MAX_STRING_SIZE];
+ FILE *fp = fopen(DEVICES_LIST, "r");
+
+ if (fp == NULL) {
+ fprintf(stderr, "error: %s could not open file "
+ DEVICES_LIST " .\n", strerror(rc = errno));
+ return rc;
}
- do {
- char status[3];
- char obd_type_name[sizeof(struct obd_type)];
- char obd_name[MAX_STRING_SIZE];
- char obd_uuid[sizeof(struct obd_uuid)];
- int obd_type_refcnt;
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
+ char *obd_type_name = NULL;
+ char *obd_name = NULL;
char rawbuf[OBD_MAX_IOCTL_BUFFER];
char *bufl = rawbuf;
+ char *bufp = buf;
int max = sizeof(rawbuf);
struct obd_ioctl_data datal;
struct obd_statfs osfs_buffer;
+ while(bufp[0] == ' ') bufp += 1;
+ for(i = 0; i < 3; i++) {
+ obd_type_name = strsep(&bufp, " ");
+ }
+ obd_name = strsep(&bufp, " ");
+
memset (&osfs_buffer, 0, sizeof (osfs_buffer));
memset(bufl, 0, sizeof(rawbuf));
datal.ioc_pbuf1 = (char *)&osfs_buffer;
datal.ioc_plen1 = sizeof (osfs_buffer);
- j = sscanf(buf2,"%d %s %s %s %s %d",&j,
- status,obd_type_name,
- obd_name, obd_uuid,
- &obd_type_refcnt);
-
- if (j != 6) break;
-
- for (k=0;k<type_num;k++)
- if (strcmp(obd_type_name, obd_type[k]) == 0) {
+ for (i=0;i<type_num;i++)
+ if (strcmp(obd_type_name, obd_type[i]) == 0) {
datal.ioc_inlbuf1 = obd_name;
datal.ioc_inllen1 = strlen(obd_name) + 1;
}
}
- if (j==6)
- for (i=0;buf2[i]!= '\n';i++);
-
- buf2 +=(i+1);
-
- } while (j==6);
-
+ }
+ fclose(fp);
return rc;
}