From 2c8fab9bc0a6cec443f30cc995f2fb3579629b79 Mon Sep 17 00:00:00 2001 From: yangsheng Date: Sat, 24 Jan 2009 17:28:51 +0000 Subject: [PATCH] Branch b1_6 b=18091 i=adilger, tappro Clean up IOC_{INIT, PACK, UNPACK} macros. --- lustre/utils/obd.c | 401 ++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 292 insertions(+), 109 deletions(-) diff --git a/lustre/utils/obd.c b/lustre/utils/obd.c index 844b576..42d6d45 100644 --- a/lustre/utils/obd.c +++ b/lustre/utils/obd.c @@ -106,13 +106,10 @@ const int thread = 0; const int nthreads = 1; #endif -static char rawbuf[8192]; -static char *buf = rawbuf; -static int max = sizeof(rawbuf); +#define MAX_IOC_BUFLEN 8192 static int cur_device = -1; - #define MAX_STRIPES 170 struct lov_oinfo lov_oinfos[MAX_STRIPES]; @@ -126,42 +123,25 @@ static int l2_ioctl(int dev_id, unsigned int opc, void *buf) return l_ioctl(dev_id, opc, buf); } -#define IOC_INIT(data) \ -do { \ - memset(&data, 0, sizeof(data)); \ - data.ioc_dev = cur_device; \ -} while (0) - -#define IOC_PACK(func, data) \ -do { \ - memset(buf, 0, sizeof(rawbuf)); \ - if (obd_ioctl_pack(&data, &buf, max)) { \ - fprintf(stderr, "error: %s: invalid ioctl\n", \ - jt_cmdname(func)); \ - return -2; \ - } \ -} while (0) - -#define IOC_UNPACK(func, data) \ -do { \ - if (obd_ioctl_unpack(&data, buf, max)) { \ - fprintf(stderr, "error: %s: invalid reply\n", \ - jt_cmdname(func)); \ - return -2; \ - } \ -} while (0) - int lcfg_ioctl(char * func, int dev_id, struct lustre_cfg *lcfg) { struct obd_ioctl_data data; + char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf; int rc; - IOC_INIT(data); + memset(&data, 0x00, sizeof(data)); + data.ioc_dev = cur_device; data.ioc_type = LUSTRE_CFG_TYPE; data.ioc_plen1 = lustre_cfg_len(lcfg->lcfg_bufcount, lcfg->lcfg_buflens); data.ioc_pbuf1 = (void *)lcfg; - IOC_PACK(func, data); + memset(buf, 0, sizeof(rawbuf)); + rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf)); + if (rc) { + fprintf(stderr, "error: %s: invalid ioctl\n", + jt_cmdname(func)); + return rc; + } rc = l_ioctl(dev_id, OBD_IOC_PROCESS_CFG, buf); @@ -174,6 +154,7 @@ int lcfg_mgs_ioctl(char *func, int dev_id, struct lustre_cfg *lcfg) { struct obd_ioctl_data data; static int mgs_device = -1; + char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf; char mgs[] = "$MGS"; int rc; @@ -188,13 +169,19 @@ int lcfg_mgs_ioctl(char *func, int dev_id, struct lustre_cfg *lcfg) mgs_device = cur_device; } - IOC_INIT(data); + memset(&data, 0x00, sizeof(data)); data.ioc_dev = mgs_device; data.ioc_type = LUSTRE_CFG_TYPE; data.ioc_plen1 = lustre_cfg_len(lcfg->lcfg_bufcount, lcfg->lcfg_buflens); data.ioc_pbuf1 = (void *)lcfg; - IOC_PACK(func, data); + memset(buf, 0, sizeof(rawbuf)); + rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf)); + if (rc) { + fprintf(stderr, "error: %s: invalid ioctl\n", + jt_cmdname(func)); + return rc; + } rc = l_ioctl(dev_id, OBD_IOC_PARAM, buf); @@ -232,18 +219,30 @@ char *obdo_print(struct obdo *obd) static int do_name2dev(char *func, char *name) { struct obd_ioctl_data data; + char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf; int rc; - IOC_INIT(data); - + memset(&data, 0x00, sizeof(data)); + data.ioc_dev = cur_device; data.ioc_inllen1 = strlen(name) + 1; data.ioc_inlbuf1 = name; - IOC_PACK(func, data); + memset(buf, 0, sizeof(rawbuf)); + rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf)); + if (rc) { + fprintf(stderr, "error: %s: invalid ioctl\n", + jt_cmdname(func)); + return rc; + } rc = l2_ioctl(OBD_DEV_ID, OBD_IOC_NAME2DEV, buf); if (rc < 0) return errno; - IOC_UNPACK(func, data); + rc = obd_ioctl_unpack(&data, buf, sizeof(rawbuf)); + if (rc) { + fprintf(stderr, "error: %s: invalid reply\n", + jt_cmdname(func)); + return rc; + } return data.ioc_dev + N2D_OFF; } @@ -270,7 +269,7 @@ int parse_devname(char *func, char *name) // printf("Name %s is device %d\n", name, ret); } else { fprintf(stderr, "No device found for name %s: %s\n", - name, strerror(rc)); + name, strerror(rc)); } } return ret; @@ -818,14 +817,22 @@ int jt_opt_net(int argc, char **argv) int jt_obd_no_transno(int argc, char **argv) { struct obd_ioctl_data data; + char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf; int rc; - IOC_INIT(data); + memset(&data, 0x00, sizeof(data)); + data.ioc_dev = cur_device; if (argc != 1) return CMD_HELP; - IOC_PACK(argv[0], data); + memset(buf, 0, sizeof(rawbuf)); + rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf)); + if (rc) { + fprintf(stderr, "error: %s: invalid ioctl\n", + jt_cmdname(argv[0])); + return rc; + } rc = l2_ioctl(OBD_DEV_ID, OBD_IOC_NO_TRANSNO, buf); if (rc < 0) fprintf(stderr, "error: %s: %s\n", jt_cmdname(argv[0]), @@ -837,14 +844,22 @@ int jt_obd_no_transno(int argc, char **argv) int jt_obd_set_readonly(int argc, char **argv) { struct obd_ioctl_data data; + char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf; int rc; - IOC_INIT(data); + memset(&data, 0x00, sizeof(data)); + data.ioc_dev = cur_device; if (argc != 1) return CMD_HELP; - IOC_PACK(argv[0], data); + memset(buf, 0, sizeof(rawbuf)); + rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf)); + if (rc) { + fprintf(stderr, "error: %s: invalid ioctl\n", + jt_cmdname(argv[0])); + return rc; + } rc = l2_ioctl(OBD_DEV_ID, OBD_IOC_SET_READONLY, buf); if (rc < 0) fprintf(stderr, "error: %s: %s\n", jt_cmdname(argv[0]), @@ -856,14 +871,22 @@ int jt_obd_set_readonly(int argc, char **argv) int jt_obd_abort_recovery(int argc, char **argv) { struct obd_ioctl_data data; + char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf; int rc; - IOC_INIT(data); + memset(&data, 0x00, sizeof(data)); + data.ioc_dev = cur_device; if (argc != 1) return CMD_HELP; - IOC_PACK(argv[0], data); + memset(buf, 0, sizeof(rawbuf)); + rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf)); + if (rc) { + fprintf(stderr, "error: %s: invalid ioctl\n", + jt_cmdname(argv[0])); + return rc; + } rc = l2_ioctl(OBD_DEV_ID, OBD_IOC_ABORT_RECOVERY, buf); if (rc < 0) fprintf(stderr, "error: %s: %s\n", jt_cmdname(argv[0]), @@ -875,15 +898,15 @@ int jt_obd_abort_recovery(int argc, char **argv) int jt_get_version(int argc, char **argv) { int rc; - char buf[8192]; + char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf; struct obd_ioctl_data *data = (struct obd_ioctl_data *)buf; if (argc != 1) return CMD_HELP; - memset(buf, 0, sizeof(buf)); + memset(buf, 0, sizeof(rawbuf)); data->ioc_version = OBD_IOCTL_VERSION; - data->ioc_inllen1 = sizeof(buf) - size_round(sizeof(*data)); + data->ioc_inllen1 = sizeof(rawbuf) - size_round(sizeof(*data)); data->ioc_inlbuf1 = buf + size_round(sizeof(*data)); data->ioc_len = obd_ioctl_packlen(data); @@ -948,7 +971,7 @@ fail: int jt_obd_list_ioctl(int argc, char **argv) { int rc, index; - char buf[8192]; + char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf; struct obd_ioctl_data *data = (struct obd_ioctl_data *)buf; if (argc > 2) @@ -958,9 +981,9 @@ int jt_obd_list_ioctl(int argc, char **argv) return CMD_HELP; for (index = 0;; index++) { - memset(buf, 0, sizeof(buf)); + memset(buf, 0, sizeof(rawbuf)); data->ioc_version = OBD_IOCTL_VERSION; - data->ioc_inllen1 = sizeof(buf) - size_round(sizeof(*data)); + data->ioc_inllen1 = sizeof(rawbuf) - size_round(sizeof(*data)); data->ioc_inlbuf1 = buf + size_round(sizeof(*data)); data->ioc_len = obd_ioctl_packlen(data); data->ioc_count = index; @@ -976,8 +999,7 @@ int jt_obd_list_ioctl(int argc, char **argv) rc = 0; else fprintf(stderr, "Error getting device list: %s: " - "check dmesg.\n", - strerror(errno)); + "check dmesg.\n", strerror(errno)); } return rc; } @@ -1015,9 +1037,6 @@ int jt_obd_list(int argc, char **argv) return 0; } - - - /* Create one or more objects, arg[4] may describe stripe meta-data. If * not, defaults assumed. This echo-client instance stashes the stripe * object ids. Use get_stripe on this node to print full lsm and @@ -1026,13 +1045,15 @@ int jt_obd_list(int argc, char **argv) /* create [] [q|v|# verbosity] [striping] */ int jt_obd_create(int argc, char **argv) { + char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf; struct obd_ioctl_data data; struct timeval next_time; __u64 count = 1, next_count, base_id = 0; int verbose = 1, mode = 0100644, rc = 0, i, valid_lsm = 0; char *end; - IOC_INIT(data); + memset(&data, 0x00, sizeof(data)); + data.ioc_dev = cur_device; if (argc < 2 || argc > 5) return CMD_HELP; @@ -1090,9 +1111,15 @@ int jt_obd_create(int argc, char **argv) data.ioc_pbuf1 = (char *)&lsm_buffer; } - IOC_PACK(argv[0], data); + memset(buf, 0, sizeof(rawbuf)); + rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf)); + if (rc) { + fprintf(stderr, "error: %s: invalid ioctl\n", + jt_cmdname(argv[0])); + return rc; + } rc = l2_ioctl(OBD_DEV_ID, OBD_IOC_CREATE, buf); - IOC_UNPACK(argv[0], data); + obd_ioctl_unpack(&data, buf, sizeof(rawbuf)); shmem_bump(); if (rc < 0) { fprintf(stderr, "error: %s: #%d - %s\n", @@ -1116,10 +1143,12 @@ int jt_obd_create(int argc, char **argv) int jt_obd_setattr(int argc, char **argv) { struct obd_ioctl_data data; + char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf; char *end; int rc; - IOC_INIT(data); + memset(&data, 0x00, sizeof(data)); + data.ioc_dev = cur_device; if (argc != 2) return CMD_HELP; @@ -1137,7 +1166,13 @@ int jt_obd_setattr(int argc, char **argv) } data.ioc_obdo1.o_valid = OBD_MD_FLID | OBD_MD_FLTYPE | OBD_MD_FLMODE; - IOC_PACK(argv[0], data); + memset(buf, 0, sizeof(rawbuf)); + rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf)); + if (rc) { + fprintf(stderr, "error: %s: invalid ioctl\n", + jt_cmdname(argv[0])); + return rc; + } rc = l2_ioctl(OBD_DEV_ID, OBD_IOC_SETATTR, buf); if (rc < 0) fprintf(stderr, "error: %s: %s\n", jt_cmdname(argv[0]), @@ -1151,6 +1186,7 @@ int jt_obd_test_setattr(int argc, char **argv) struct obd_ioctl_data data; struct timeval start, next_time; __u64 i, count, next_count; + char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf; int verbose = 1; obd_id objid = 3; char *end; @@ -1159,7 +1195,8 @@ int jt_obd_test_setattr(int argc, char **argv) if (argc < 2 || argc > 4) return CMD_HELP; - IOC_INIT(data); + memset(&data, 0x00, sizeof(data)); + data.ioc_dev = cur_device; count = strtoull(argv[1], &end, 0); if (*end) { fprintf(stderr, "error: %s: invalid iteration count '%s'\n", @@ -1198,7 +1235,13 @@ int jt_obd_test_setattr(int argc, char **argv) data.ioc_obdo1.o_id = objid; data.ioc_obdo1.o_mode = S_IFREG; data.ioc_obdo1.o_valid = OBD_MD_FLID | OBD_MD_FLTYPE | OBD_MD_FLMODE; - IOC_PACK(argv[0], data); + memset(buf, 0x00, sizeof(rawbuf)); + rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf)); + if (rc) { + fprintf(stderr, "error: %s: invalid ioctl\n", + jt_cmdname(argv[0])); + return rc; + } rc = l2_ioctl(OBD_DEV_ID, OBD_IOC_SETATTR, &data); shmem_bump(); if (rc < 0) { @@ -1234,13 +1277,15 @@ int jt_obd_destroy(int argc, char **argv) { struct obd_ioctl_data data; struct timeval next_time; + char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf; __u64 count = 1, next_count; int verbose = 1; __u64 id; char *end; int rc = 0, i; - IOC_INIT(data); + memset(&data, 0x00, sizeof(data)); + data.ioc_dev = cur_device; if (argc < 2 || argc > 4) return CMD_HELP; @@ -1275,9 +1320,15 @@ int jt_obd_destroy(int argc, char **argv) data.ioc_obdo1.o_mode = S_IFREG | 0644; data.ioc_obdo1.o_valid = OBD_MD_FLID | OBD_MD_FLMODE; - IOC_PACK(argv[0], data); + memset(buf, 0, sizeof(rawbuf)); + rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf)); + if (rc) { + fprintf(stderr, "error: %s: invalid ioctl\n", + jt_cmdname(argv[0])); + return rc; + } rc = l2_ioctl(OBD_DEV_ID, OBD_IOC_DESTROY, buf); - IOC_UNPACK(argv[0], data); + obd_ioctl_unpack(&data, buf, sizeof(rawbuf)); shmem_bump(); if (rc < 0) { fprintf(stderr, "error: %s: objid "LPX64": %s\n", @@ -1296,13 +1347,15 @@ int jt_obd_destroy(int argc, char **argv) int jt_obd_getattr(int argc, char **argv) { struct obd_ioctl_data data; + char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf; char *end; int rc; if (argc != 2) return CMD_HELP; - IOC_INIT(data); + memset(&data, 0x00, sizeof(data)); + data.ioc_dev = cur_device; data.ioc_obdo1.o_id = strtoull(argv[1], &end, 0); if (*end) { fprintf(stderr, "error: %s: invalid objid '%s'\n", @@ -1314,9 +1367,15 @@ int jt_obd_getattr(int argc, char **argv) data.ioc_obdo1.o_valid = 0xffffffff; printf("%s: object id "LPX64"\n", jt_cmdname(argv[0]),data.ioc_obdo1.o_id); - IOC_PACK(argv[0], data); + memset(buf, 0, sizeof(rawbuf)); + rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf)); + if (rc) { + fprintf(stderr, "error: %s: invalid ioctl\n", + jt_cmdname(argv[0])); + return rc; + } rc = l2_ioctl(OBD_DEV_ID, OBD_IOC_GETATTR, buf); - IOC_UNPACK(argv[0], data); + obd_ioctl_unpack(&data, buf, sizeof(rawbuf)); if (rc) { fprintf(stderr, "error: %s: %s\n", jt_cmdname(argv[0]), strerror(rc = errno)); @@ -1331,6 +1390,7 @@ int jt_obd_test_getattr(int argc, char **argv) { struct obd_ioctl_data data; struct timeval start, next_time; + char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf; __u64 i, count, next_count; int verbose = 1; obd_id objid = 3; @@ -1340,7 +1400,8 @@ int jt_obd_test_getattr(int argc, char **argv) if (argc < 2 || argc > 4) return CMD_HELP; - IOC_INIT(data); + memset(&data, 0x00, sizeof(data)); + data.ioc_dev = cur_device; count = strtoull(argv[1], &end, 0); if (*end) { fprintf(stderr, "error: %s: invalid iteration count '%s'\n", @@ -1379,7 +1440,13 @@ int jt_obd_test_getattr(int argc, char **argv) data.ioc_obdo1.o_id = objid; data.ioc_obdo1.o_mode = S_IFREG; data.ioc_obdo1.o_valid = 0xffffffff; - IOC_PACK(argv[0], data); + memset(buf, 0x00, sizeof(rawbuf)); + rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf)); + if (rc) { + fprintf(stderr, "error: %s: invalid ioctl\n", + jt_cmdname(argv[0])); + return rc; + } rc = l2_ioctl(OBD_DEV_ID, OBD_IOC_GETATTR, &data); shmem_bump(); if (rc < 0) { @@ -1421,6 +1488,7 @@ int jt_obd_test_brw(int argc, char **argv) { struct obd_ioctl_data data; struct timeval start, next_time; + char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf; __u64 count, next_count, len, stride, thr_offset = 0, objid = 3; int write = 0, verbose = 1, cmd, i, rc = 0, pages = 1; int offset_pages = 0; @@ -1511,7 +1579,8 @@ int jt_obd_test_brw(int argc, char **argv) } } - IOC_INIT(data); + memset(&data, 0x00, sizeof(data)); + data.ioc_dev = cur_device; /* communicate the 'type' of brw test and batching to echo_client. * don't start. we'd love to refactor this lctl->echo_client @@ -1596,7 +1665,13 @@ int jt_obd_test_brw(int argc, char **argv) cmd = write ? OBD_IOC_BRW_WRITE : OBD_IOC_BRW_READ; for (i = 1, next_count = verbose; i <= count && shmem_running(); i++) { data.ioc_obdo1.o_valid &= ~(OBD_MD_FLBLOCKS|OBD_MD_FLGRANT); - IOC_PACK(argv[0], data); + memset(buf, 0x00, sizeof(rawbuf)); + rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf)); + if (rc) { + fprintf(stderr, "error: %s: invalid ioctl\n", + jt_cmdname(argv[0])); + return rc; + } rc = l2_ioctl(OBD_DEV_ID, cmd, buf); shmem_bump(); if (rc) { @@ -1656,11 +1731,13 @@ int jt_obd_lov_getconfig(int argc, char **argv) struct obd_ioctl_data data; struct lov_desc desc; struct obd_uuid *uuidarray; + char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf; __u32 *obdgens; char *path; int rc, fd; - IOC_INIT(data); + memset(&data, 0x00, sizeof(data)); + data.ioc_dev = cur_device; if (argc != 2) return CMD_HELP; @@ -1678,7 +1755,6 @@ int jt_obd_lov_getconfig(int argc, char **argv) desc.ld_tgt_count = ((OBD_MAX_IOCTL_BUFFER-sizeof(data)-sizeof(desc)) / (sizeof(*uuidarray) + sizeof(*obdgens))); - repeat: uuidarray = calloc(desc.ld_tgt_count, sizeof(*uuidarray)); if (!uuidarray) { @@ -1695,6 +1771,7 @@ repeat: goto out_uuidarray; } + memset(buf, 0x00, sizeof(rawbuf)); data.ioc_inllen1 = sizeof(desc); data.ioc_inlbuf1 = (char *)&desc; data.ioc_inllen2 = desc.ld_tgt_count * sizeof(*uuidarray); @@ -1702,7 +1779,7 @@ repeat: data.ioc_inllen3 = desc.ld_tgt_count * sizeof(*obdgens); data.ioc_inlbuf3 = (char *)obdgens; - if (obd_ioctl_pack(&data, &buf, max)) { + if (obd_ioctl_pack(&data, &buf, sizeof(rawbuf))) { fprintf(stderr, "error: %s: invalid ioctl\n", jt_cmdname(argv[0])); rc = -EINVAL; @@ -1721,7 +1798,7 @@ repeat: __u32 *genp; int i; - if (obd_ioctl_unpack(&data, buf, max)) { + if (obd_ioctl_unpack(&data, buf, sizeof(rawbuf))) { fprintf(stderr, "error: %s: invalid reply\n", jt_cmdname(argv[0])); rc = -EINVAL; @@ -1757,10 +1834,12 @@ int jt_obd_ldlm_regress_start(int argc, char **argv) { int rc; struct obd_ioctl_data data; + char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf; char argstring[200]; int i, count = sizeof(argstring) - 1; - IOC_INIT(data); + memset(&data, 0x00, sizeof(data)); + data.ioc_dev = cur_device; if (argc > 5) return CMD_HELP; @@ -1777,7 +1856,13 @@ int jt_obd_ldlm_regress_start(int argc, char **argv) data.ioc_inllen1 = strlen(argstring) + 1; } - IOC_PACK(argv[0], data); + memset(buf, 0, sizeof(rawbuf)); + rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf)); + if (rc) { + fprintf(stderr, "error: %s: invalid ioctl\n", + jt_cmdname(argv[0])); + return rc; + } rc = l2_ioctl(OBD_DEV_ID, IOC_LDLM_REGRESS_START, buf); if (rc) fprintf(stderr, "error: %s: test failed: %s\n", @@ -1789,13 +1874,22 @@ int jt_obd_ldlm_regress_start(int argc, char **argv) int jt_obd_ldlm_regress_stop(int argc, char **argv) { int rc; + char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf; struct obd_ioctl_data data; - IOC_INIT(data); + + memset(&data, 0x00, sizeof(data)); + data.ioc_dev = cur_device; if (argc != 1) return CMD_HELP; - IOC_PACK(argv[0], data); + memset(buf, 0, sizeof(rawbuf)); + rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf)); + if (rc) { + fprintf(stderr, "error: %s: invalid ioctl\n", + jt_cmdname(argv[0])); + return rc; + } rc = l2_ioctl(OBD_DEV_ID, IOC_LDLM_REGRESS_STOP, buf); if (rc) @@ -1807,16 +1901,24 @@ int jt_obd_ldlm_regress_stop(int argc, char **argv) static int do_activate(int argc, char **argv, int flag) { struct obd_ioctl_data data; + char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf; int rc; - IOC_INIT(data); + memset(&data, 0x00, sizeof(data)); + data.ioc_dev = cur_device; if (argc != 1) return CMD_HELP; /* reuse offset for 'active' */ data.ioc_offset = flag; - IOC_PACK(argv[0], data); + memset(buf, 0, sizeof(rawbuf)); + rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf)); + if (rc) { + fprintf(stderr, "error: %s: invalid ioctl\n", + jt_cmdname(argv[0])); + return rc; + } rc = l2_ioctl(OBD_DEV_ID, IOC_OSC_SET_ACTIVE, buf); if (rc) fprintf(stderr, "error: %s: failed: %s\n", @@ -1838,9 +1940,11 @@ int jt_obd_activate(int argc, char **argv) int jt_obd_recover(int argc, char **argv) { int rc; + char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf; struct obd_ioctl_data data; - IOC_INIT(data); + memset(&data, 0x00, sizeof(data)); + data.ioc_dev = cur_device; if (argc > 2) return CMD_HELP; @@ -1849,7 +1953,13 @@ int jt_obd_recover(int argc, char **argv) data.ioc_inlbuf1 = argv[1]; } - IOC_PACK(argv[0], data); + memset(buf, 0, sizeof(rawbuf)); + rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf)); + if (rc) { + fprintf(stderr, "error: %s: invalid ioctl\n", + jt_cmdname(argv[0])); + return rc; + } rc = l2_ioctl(OBD_DEV_ID, OBD_IOC_CLIENT_RECOVER, buf); if (rc < 0) { fprintf(stderr, "error: %s: %s\n", jt_cmdname(argv[0]), @@ -1862,6 +1972,7 @@ int jt_obd_recover(int argc, char **argv) int jt_obd_mdc_lookup(int argc, char **argv) { struct obd_ioctl_data data; + char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf; char *parent, *child; int rc, fd, verbose = 1; @@ -1873,12 +1984,19 @@ int jt_obd_mdc_lookup(int argc, char **argv) if (argc == 4) verbose = get_verbose(argv[0], argv[3]); - IOC_INIT(data); + memset(&data, 0x00, sizeof(data)); + data.ioc_dev = cur_device; data.ioc_inllen1 = strlen(child) + 1; data.ioc_inlbuf1 = child; - IOC_PACK(argv[0], data); + memset(buf, 0, sizeof(rawbuf)); + rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf)); + if (rc) { + fprintf(stderr, "error: %s: invalid ioctl\n", + jt_cmdname(argv[0])); + return rc; + } fd = open(parent, O_RDONLY); if (fd < 0) { @@ -1895,7 +2013,12 @@ int jt_obd_mdc_lookup(int argc, char **argv) close(fd); if (verbose) { - IOC_UNPACK(argv[0], data); + rc = obd_ioctl_unpack(&data, buf, sizeof(rawbuf)); + if (rc) { + fprintf(stderr, "error: %s: invalid reply\n", + jt_cmdname(argv[0])); + return rc; + } printf("%s: mode %o uid %d gid %d\n", child, data.ioc_obdo1.o_mode, data.ioc_obdo1.o_uid, data.ioc_obdo1.o_gid); @@ -1907,9 +2030,11 @@ int jt_obd_mdc_lookup(int argc, char **argv) int jt_cfg_dump_log(int argc, char **argv) { struct obd_ioctl_data data; + char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf; int rc; - IOC_INIT(data); + memset(&data, 0x00, sizeof(data)); + data.ioc_dev = cur_device; if (argc != 2) return CMD_HELP; @@ -1917,7 +2042,13 @@ int jt_cfg_dump_log(int argc, char **argv) data.ioc_inllen1 = strlen(argv[1]) + 1; data.ioc_inlbuf1 = argv[1]; - IOC_PACK(argv[0], data); + memset(buf, 0, sizeof(rawbuf)); + rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf)); + if (rc) { + fprintf(stderr, "error: %s: invalid ioctl\n", + jt_cmdname(argv[0])); + return rc; + } rc = l_ioctl(OBD_DEV_ID, OBD_IOC_DUMP_LOG, buf); if (rc < 0) fprintf(stderr, "OBD_IOC_DUMP_LOG failed: %s\n", @@ -1929,15 +2060,22 @@ int jt_cfg_dump_log(int argc, char **argv) int jt_llog_catlist(int argc, char **argv) { struct obd_ioctl_data data; + char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf; int rc; if (argc != 1) return CMD_HELP; - IOC_INIT(data); - data.ioc_inllen1 = max - size_round(sizeof(data)); - IOC_PACK(argv[0], data); - + memset(&data, 0x00, sizeof(data)); + data.ioc_dev = cur_device; + data.ioc_inllen1 = sizeof(rawbuf) - size_round(sizeof(data)); + memset(buf, 0, sizeof(rawbuf)); + rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf)); + if (rc) { + fprintf(stderr, "error: %s: invalid ioctl\n", + jt_cmdname(argv[0])); + return rc; + } rc = l_ioctl(OBD_DEV_ID, OBD_IOC_CATLOGLIST, buf); if (rc == 0) fprintf(stdout, "%s", ((struct obd_ioctl_data*)buf)->ioc_bulk); @@ -1951,17 +2089,25 @@ int jt_llog_catlist(int argc, char **argv) int jt_llog_info(int argc, char **argv) { struct obd_ioctl_data data; + char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf; int rc; if (argc != 2) return CMD_HELP; - IOC_INIT(data); + memset(&data, 0x00, sizeof(data)); + data.ioc_dev = cur_device; data.ioc_inllen1 = strlen(argv[1]) + 1; data.ioc_inlbuf1 = argv[1]; - data.ioc_inllen2 = max - size_round(sizeof(data)) - + data.ioc_inllen2 = sizeof(rawbuf) - size_round(sizeof(data)) - size_round(data.ioc_inllen1); - IOC_PACK(argv[0], data); + memset(buf, 0, sizeof(rawbuf)); + rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf)); + if (rc) { + fprintf(stderr, "error: %s: invalid ioctl\n", + jt_cmdname(argv[0])); + return rc; + } rc = l_ioctl(OBD_DEV_ID, OBD_IOC_LLOG_INFO, buf); if (rc == 0) @@ -1976,12 +2122,14 @@ int jt_llog_info(int argc, char **argv) int jt_llog_print(int argc, char **argv) { struct obd_ioctl_data data; + char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf; int rc; if (argc != 2 && argc != 4) return CMD_HELP; - IOC_INIT(data); + memset(&data, 0x00, sizeof(data)); + data.ioc_dev = cur_device; data.ioc_inllen1 = strlen(argv[1]) + 1; data.ioc_inlbuf1 = argv[1]; if (argc == 4) { @@ -1996,11 +2144,17 @@ int jt_llog_print(int argc, char **argv) data.ioc_inllen3 = strlen(to) + 1; data.ioc_inlbuf3 = to; } - data.ioc_inllen4 = max - size_round(sizeof(data)) - + data.ioc_inllen4 = sizeof(rawbuf) - size_round(sizeof(data)) - size_round(data.ioc_inllen1) - size_round(data.ioc_inllen2) - size_round(data.ioc_inllen3); - IOC_PACK(argv[0], data); + memset(buf, 0, sizeof(rawbuf)); + rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf)); + if (rc) { + fprintf(stderr, "error: %s: invalid ioctl\n", + jt_cmdname(argv[0])); + return rc; + } rc = l_ioctl(OBD_DEV_ID, OBD_IOC_LLOG_PRINT, buf); if (rc == 0) @@ -2015,19 +2169,27 @@ int jt_llog_print(int argc, char **argv) int jt_llog_cancel(int argc, char **argv) { struct obd_ioctl_data data; + char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf; int rc; if (argc != 4) return CMD_HELP; - IOC_INIT(data); + memset(&data, 0x00, sizeof(data)); + data.ioc_dev = cur_device; data.ioc_inllen1 = strlen(argv[1]) + 1; data.ioc_inlbuf1 = argv[1]; data.ioc_inllen2 = strlen(argv[2]) + 1; data.ioc_inlbuf2 = argv[2]; data.ioc_inllen3 = strlen(argv[3]) + 1; data.ioc_inlbuf3 = argv[3]; - IOC_PACK(argv[0], data); + memset(buf, 0, sizeof(rawbuf)); + rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf)); + if (rc) { + fprintf(stderr, "error: %s: invalid ioctl\n", + jt_cmdname(argv[0])); + return rc; + } rc = l_ioctl(OBD_DEV_ID, OBD_IOC_LLOG_CANCEL, buf); if (rc == 0) @@ -2042,12 +2204,14 @@ int jt_llog_cancel(int argc, char **argv) int jt_llog_check(int argc, char **argv) { struct obd_ioctl_data data; + char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf; int rc; if (argc != 2 && argc != 4) return CMD_HELP; - IOC_INIT(data); + memset(&data, 0x00, sizeof(data)); + data.ioc_dev = cur_device; data.ioc_inllen1 = strlen(argv[1]) + 1; data.ioc_inlbuf1 = argv[1]; if (argc == 4) { @@ -2062,11 +2226,17 @@ int jt_llog_check(int argc, char **argv) data.ioc_inllen3 = strlen(to) + 1; data.ioc_inlbuf3 = to; } - data.ioc_inllen4 = max - size_round(sizeof(data)) - + data.ioc_inllen4 = sizeof(rawbuf) - size_round(sizeof(data)) - size_round(data.ioc_inllen1) - size_round(data.ioc_inllen2) - size_round(data.ioc_inllen3); - IOC_PACK(argv[0], data); + memset(buf, 0, sizeof(rawbuf)); + rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf)); + if (rc) { + fprintf(stderr, "error: %s: invalid ioctl\n", + jt_cmdname(argv[0])); + return rc; + } rc = l_ioctl(OBD_DEV_ID, OBD_IOC_LLOG_CHECK, buf); if (rc == 0) @@ -2080,19 +2250,27 @@ int jt_llog_check(int argc, char **argv) int jt_llog_remove(int argc, char **argv) { struct obd_ioctl_data data; + char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf; int rc; if (argc != 3 && argc != 2) return CMD_HELP; - IOC_INIT(data); + memset(&data, 0x00, sizeof(data)); + data.ioc_dev = cur_device; data.ioc_inllen1 = strlen(argv[1]) + 1; data.ioc_inlbuf1 = argv[1]; if (argc == 3){ data.ioc_inllen2 = strlen(argv[2]) + 1; data.ioc_inlbuf2 = argv[2]; } - IOC_PACK(argv[0], data); + memset(buf, 0, sizeof(rawbuf)); + rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf)); + if (rc) { + fprintf(stderr, "error: %s: invalid ioctl\n", + jt_cmdname(argv[0])); + return rc; + } rc = l_ioctl(OBD_DEV_ID, OBD_IOC_LLOG_REMOVE, buf); if (rc == 0) { @@ -2345,13 +2523,19 @@ void llapi_ping_target(char *obd_type, char *obd_name, char *obd_uuid, void *args) { int rc; + char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf; struct obd_ioctl_data data; - IOC_INIT(data); + memset(&data, 0x00, sizeof(data)); data.ioc_inlbuf4 = obd_name; data.ioc_inllen4 = strlen(obd_name) + 1; data.ioc_dev = OBD_DEV_BY_DEVNAME; - IOC_PACK("ping", data); + memset(buf, 0, sizeof(rawbuf)); + rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf)); + if (rc) { + fprintf(stderr, "error: obd_ping: invalid ioctl(%d)\n", rc); + return; + } rc = l_ioctl(OBD_DEV_ID, OBD_IOC_PING_TARGET, buf); if (rc) rc = errno; @@ -2363,5 +2547,4 @@ void llapi_ping_target(char *obd_type, char *obd_name, } else { printf("%s active.\n", obd_name); } - } -- 1.8.3.1