Lines Matching +full:close +full:- +full:pr
24 #include <linux/dm-ioctl.h>
28 #include <cap-ng.h>
39 #include "qemu/help-texts.h"
42 #include "qemu/main-loop.h"
44 #include "qemu/error-report.h"
45 #include "qemu/config-file.h"
51 #include "io/channel-socket.h"
53 #include "qemu-version.h"
56 #include "block/thread-pool.h"
60 #include "pr-helper.h"
74 static int uid = -1;
75 static int gid = -1;
82 socket_path = g_build_filename(state, "run", "qemu-pr-helper.sock", NULL); in compute_default_paths()
83 pidfile = g_build_filename(state, "run", "qemu-pr-helper.pid", NULL); in compute_default_paths()
92 " -h, --help display this help and exit\n" in usage()
93 " -V, --version output version information and exit\n" in usage()
95 " -d, --daemon run in the background\n" in usage()
96 " -f, --pidfile=PATH PID file when running as a daemon\n" in usage()
98 " -k, --socket=PATH path to the unix socket\n" in usage()
100 " -T, --trace [[enable=]<pattern>][,events=<file>][,file=<file>]\n" in usage()
103 " -u, --user=USER user to drop privileges to\n" in usage()
104 " -g, --group=GROUP group to drop privileges to\n" in usage()
142 memset(data->sense, 0, PR_HELPER_SENSE_SIZE); in do_sgio_worker()
146 io_hdr.cmdp = (uint8_t *)data->cdb; in do_sgio_worker()
147 io_hdr.sbp = data->sense; in do_sgio_worker()
150 io_hdr.dxfer_direction = data->dir; in do_sgio_worker()
151 io_hdr.dxferp = (char *)data->buf; in do_sgio_worker()
152 io_hdr.dxfer_len = data->sz; in do_sgio_worker()
153 ret = ioctl(data->fd, SG_IO, &io_hdr); in do_sgio_worker()
158 scsi_build_sense(data->sense, sense_code); in do_sgio_worker()
163 scsi_build_sense(data->sense, sense_code); in do_sgio_worker()
172 data->sz -= io_hdr.resid; in do_sgio_worker()
174 data->sz = 0; in do_sgio_worker()
240 dm->dev = st.st_rdev; in dm_dev_ioctl()
299 return !strncmp(tgt->target_type, "multipath", DM_MAX_TYPE_NAME); in is_mpath()
398 written = MIN(out->additional_length + 8, sz); in multipath_pr_in()
399 stl_be_p(&data[0], out->prgeneration); in multipath_pr_in()
400 stl_be_p(&data[4], out->additional_length); in multipath_pr_in()
401 memcpy(&data[8], out->key_list, written - 8); in multipath_pr_in()
408 stw_be_p(&data[0], out->length); in multipath_pr_in()
409 data[2] = out->flags[0]; in multipath_pr_in()
410 data[3] = out->flags[1]; in multipath_pr_in()
411 stw_be_p(&data[4], out->pr_type_mask); in multipath_pr_in()
419 memset(data + written, 0, sz - written); in multipath_pr_in()
467 memcpy(¶mp->key, ¶m[0], 8); in multipath_pr_out()
468 memcpy(¶mp->sa_key, ¶m[8], 8); in multipath_pr_out()
469 paramp->sa_flags = param[20]; in multipath_pr_out()
486 id->format_code = param[i] & 0xc0; in multipath_pr_out()
487 id->protocol_id = param[i] & 0x0f; in multipath_pr_out()
494 memcpy(id->n_port_name, ¶m[i + 8], 8); in multipath_pr_out()
506 * byte of id->iscsi_name so our maximum is 252. in multipath_pr_out()
513 memcpy(id->iscsi_name, ¶m[i + 2], len + 2); in multipath_pr_out()
522 memcpy(id->sas_address, ¶m[i + 4], 8); in multipath_pr_out()
532 assert(paramp->num_transportid < MPATH_MX_TIDS); in multipath_pr_out()
533 paramp->trnptid_list[paramp->num_transportid++] = id; in multipath_pr_out()
611 n_read = qio_channel_readv_full(QIO_CHANNEL(client->ioc), &iov, 1, in prh_read()
615 qio_channel_yield(QIO_CHANNEL(client->ioc), G_IO_IN); in prh_read()
619 ret = n_read ? n_read : -1; in prh_read()
627 if (client->fd == -1) { in prh_read()
628 client->fd = fds[i]; in prh_read()
630 close(fds[i]); in prh_read()
636 ret = -1; in prh_read()
642 sz -= n_read; in prh_read()
648 if (client->fd != -1) { in prh_read()
649 close(client->fd); in prh_read()
650 client->fd = -1; in prh_read()
661 if (prh_read(client, req->cdb, sizeof(req->cdb), NULL) < 0) { in prh_read_request()
662 return -1; in prh_read_request()
665 if (client->fd == -1) { in prh_read_request()
667 return -1; in prh_read_request()
670 if (req->cdb[0] != PERSISTENT_RESERVE_OUT && in prh_read_request()
671 req->cdb[0] != PERSISTENT_RESERVE_IN) { in prh_read_request()
676 sz = scsi_cdb_xfer(req->cdb); in prh_read_request()
677 if (sz > sizeof(client->data)) { in prh_read_request()
681 if (req->cdb[0] == PERSISTENT_RESERVE_OUT) { in prh_read_request()
682 if (qio_channel_read_all(QIO_CHANNEL(client->ioc), in prh_read_request()
683 (char *)client->data, sz, in prh_read_request()
689 req->fd = client->fd; in prh_read_request()
690 req->sz = sz; in prh_read_request()
691 client->fd = -1; in prh_read_request()
695 close(client->fd); in prh_read_request()
696 client->fd = -1; in prh_read_request()
697 return -1; in prh_read_request()
707 if (req->cdb[0] == PERSISTENT_RESERVE_IN && resp->result == GOOD) { in prh_write_response()
708 assert(resp->sz <= req->sz && resp->sz <= sizeof(client->data)); in prh_write_response()
710 assert(resp->sz == 0); in prh_write_response()
713 sz = resp->sz; in prh_write_response()
715 resp->result = cpu_to_be32(resp->result); in prh_write_response()
716 resp->sz = cpu_to_be32(resp->sz); in prh_write_response()
717 r = qio_channel_write_all(QIO_CHANNEL(client->ioc), in prh_write_response()
723 r = qio_channel_write_all(QIO_CHANNEL(client->ioc), in prh_write_response()
724 (char *) client->data, in prh_write_response()
736 qio_channel_set_blocking(QIO_CHANNEL(client->ioc), in prh_co_entry()
738 qio_channel_set_follow_coroutine_ctx(QIO_CHANNEL(client->ioc), true); in prh_co_entry()
744 r = qio_channel_write_all(QIO_CHANNEL(client->ioc), in prh_co_entry()
750 r = qio_channel_read_all(QIO_CHANNEL(client->ioc), in prh_co_entry()
769 client->data, sz); in prh_co_entry()
772 resp.sz = sizeof(client->data); in prh_co_entry()
774 client->data, &resp.sz); in prh_co_entry()
777 num_active_sockets--; in prh_co_entry()
778 close(req.fd); in prh_co_entry()
779 if (r == -1) { in prh_co_entry()
798 object_unref(OBJECT(client->ioc)); in prh_co_entry()
814 prh->ioc = cioc; in accept_client()
815 prh->fd = -1; in accept_client()
816 prh->co = qemu_coroutine_create(prh_co_entry, prh); in accept_client()
817 qemu_coroutine_enter(prh->co); in accept_client()
833 server_watch = -1; in close_server_socket()
835 num_active_sockets--; in close_server_socket()
846 return -1; in drop_privileges()
853 return -1; in drop_privileges()
861 if (capng_change_id(uid != -1 ? uid : getuid(), in drop_privileges()
862 gid != -1 ? gid : getgid(), in drop_privileges()
864 return -1; in drop_privileges()
914 while ((ch = getopt_long(argc, argv, sopt, lopt, &opt_ind)) != -1) { in main()
935 uid = userinfo->pw_uid; in main()
949 gid = groupinfo->gr_gid; in main()
962 error_report("-%c not supported by this %s", ch, argv[0]); in main()
986 error_report("Try `%s --help' for more information.", argv[0]); in main()
1021 /* Using socket activation - check user didn't use -p etc. */ in main()