CTM_BEGIN 2.0 src-10 646 20150221040607Z .
CTMFS .ctm_status 1004 1004 644 2ed9bb9f1064bcfa64b608f20e195500 a37b03e25a34f3ac917024aaf602dc39 11
src-10 646
CTMFS .svn_revision 1004 1004 644 2d397ee6957c510c1117f35e851593bb 499ef174a0a9900fa6faa9e8434e017e 7
279092
CTMFN lib/libproc/proc_sym.c 1004 1004 644 d744e1fff25026239fd9fb9b46ac1100 8e2cc2ff8a4afb16ada69ae3a5d4683d 550
d30 1
a30 1
* $FreeBSD: stable/10/lib/libproc/proc_sym.c 279082 2015-02-20 20:02:47Z rpaulo $
a73 15
static int
find_dbg_obj(const char *path)
{
int fd;
char dbg_path[PATH_MAX];
snprintf(dbg_path, sizeof(dbg_path),
"/usr/lib/debug/%s.debug", path);
fd = open(dbg_path, O_RDONLY);
if (fd > 0)
return (fd);
else
return (open(path, O_RDONLY));
}
d250 1
a250 1
if ((fd = find_dbg_obj(map->pr_mapname)) < 0) {
d431 1
a431 1
if ((fd = find_dbg_obj(map->pr_mapname)) < 0) {
d528 1
a528 1
if ((fd = find_dbg_obj(map->pr_mapname)) < 0) {
CTMFN release/doc/en_US.ISO8859-1/relnotes/article.xml 1004 1004 644 35927d0a6f0fb7a1adde6037ffd8f6f8 09f9335bbba33b6a9bccdf70729bdce2 1513
d23 1
a23 1
$FreeBSD: stable/10/release/doc/en_US.ISO8859-1/relnotes/article.xml 279088 2015-02-20 20:33:43Z gjb $
d25 1
a25 1
a180 4
The
&man.fstyp.8; utility has been added, which is used to
determine the filesystem on a specified device.
a248 5
The
&man.hwpmc.4; default and maximum callchain depths have been
increased. The default has been increased from 16 to 32, and
the maximum increased from 32 to 128.
a309 12
General Storage
The
&man.ctl.4; LUN mapping has been rewritten,
replacing iSCSI-specific mapping mechanisms
with a new mechanism that works for any port.
The
&man.ctld.8; utility has been updated to allow controlling
non-iSCSI &man.ctl.4; ports.
a327 8
The arc_meta_limit
statistics are now visible through the
kstat &man.sysctl.8;. As a result of this
change, the vfs.zfs.arc_meta_used
&man.sysctl.8; has been removed, and replaced with the
kstat.zfs.misc.arcstats.arc_meta_used
&man.sysctl.8;.
CTMFN usr.sbin/ctld/ctl.conf.5 1004 1004 644 a0a8fe35721e10de493f7466b58dc029 a43e24b4d64b308d69c50f0d2a73aef6 353
d28 1
a28 1
.\" $FreeBSD: stable/10/usr.sbin/ctld/ctl.conf.5 279055 2015-02-20 17:09:49Z mav $
d30 1
a30 1
.Dd February 7, 2015
a69 1
.Dl port Ar name
a321 4
.It Ic port Ar name
Assign specified CTL port (such as "isp0") to the target.
On startup ctld configures LUN mapping and enables all assigned ports.
Each port can be assigned to only one target.
CTMFN usr.sbin/ctld/ctld.c 1004 1004 644 343444ef7d4fa9bfc9a70c6c137ae0cd e9fb717e4563937281eafa2be9ae5ba8 2650
d32 1
a32 1
__FBSDID("$FreeBSD: stable/10/usr.sbin/ctld/ctld.c 279056 2015-02-20 17:10:46Z mav $");
a95 1
TAILQ_INIT(&conf->conf_pports);
a113 1
struct pport *pp, *pptmp;
a125 2
TAILQ_FOREACH_SAFE(pp, &conf->conf_pports, pp_next, pptmp)
pport_delete(pp);
a1135 49
struct pport *
pport_new(struct conf *conf, const char *name, uint32_t ctl_port)
{
struct pport *pp;
pp = calloc(1, sizeof(*pp));
if (pp == NULL)
log_err(1, "calloc");
pp->pp_conf = conf;
pp->pp_name = checked_strdup(name);
pp->pp_ctl_port = ctl_port;
TAILQ_INIT(&pp->pp_ports);
TAILQ_INSERT_TAIL(&conf->conf_pports, pp, pp_next);
return (pp);
}
struct pport *
pport_find(const struct conf *conf, const char *name)
{
struct pport *pp;
TAILQ_FOREACH(pp, &conf->conf_pports, pp_next) {
if (strcasecmp(pp->pp_name, name) == 0)
return (pp);
}
return (NULL);
}
struct pport *
pport_copy(struct pport *pp, struct conf *conf)
{
struct pport *ppnew;
ppnew = pport_new(conf, pp->pp_name, pp->pp_ctl_port);
return (ppnew);
}
void
pport_delete(struct pport *pp)
{
struct port *port, *tport;
TAILQ_FOREACH_SAFE(port, &pp->pp_ports, p_ts, tport)
port_delete(port);
TAILQ_REMOVE(&pp->pp_conf->conf_pports, pp, pp_next);
free(pp->pp_name);
free(pp);
}
a1139 2
char *name;
int ret;
a1140 8
ret = asprintf(&name, "%s-%s", pg->pg_name, target->t_name);
if (ret <= 0)
log_err(1, "asprintf");
if (port_find(conf, name) != NULL) {
log_warnx("duplicate port \"%s\"", name);
free(name);
return (NULL);
}
d1144 6
a1150 1
port->p_name = name;
a1159 28
port_new_pp(struct conf *conf, struct target *target, struct pport *pp)
{
struct port *port;
char *name;
int ret;
ret = asprintf(&name, "%s-%s", pp->pp_name, target->t_name);
if (ret <= 0)
log_err(1, "asprintf");
if (port_find(conf, name) != NULL) {
log_warnx("duplicate port \"%s\"", name);
free(name);
return (NULL);
}
port = calloc(1, sizeof(*port));
if (port == NULL)
log_err(1, "calloc");
port->p_conf = conf;
port->p_name = name;
TAILQ_INSERT_TAIL(&conf->conf_ports, port, p_next);
TAILQ_INSERT_TAIL(&target->t_ports, port, p_ts);
port->p_target = target;
TAILQ_INSERT_TAIL(&pp->pp_ports, port, p_pps);
port->p_pport = pp;
return (port);
}
struct port *
a1190 2
if (port->p_pport)
TAILQ_REMOVE(&port->p_pport->pp_ports, port, p_pps);
a1763 1
log_debugx("removing port \"%s\"", oldport->p_name);
a1887 1
log_debugx("adding port \"%s\"", newport->p_name);
a1889 1
log_debugx("updating port \"%s\"", newport->p_name);
d2401 1
a2401 1
newconf = conf_new_from_file(config_path, oldconf);
d2436 1
a2436 1
tmpconf = conf_new_from_file(config_path, newconf);
CTMFN usr.sbin/ctld/ctld.h 1004 1004 644 0172bfa772bb3ef859e9959c8c87d799 2481443ab36c82dabec01cf674476131 817
d29 1
a29 1
* $FreeBSD: stable/10/usr.sbin/ctld/ctld.h 279055 2015-02-20 17:09:49Z mav $
a127 9
struct pport {
TAILQ_ENTRY(pport) pp_next;
TAILQ_HEAD(, port) pp_ports;
struct conf *pp_conf;
char *pp_name;
uint32_t pp_ctl_port;
};
a130 1
TAILQ_ENTRY(port) p_pps;
a135 1
struct pport *p_pport;
a188 1
TAILQ_HEAD(, pport) conf_pports;
d281 1
a281 1
struct conf *conf_new_from_file(const char *path, struct conf *old);
a333 6
struct pport *pport_new(struct conf *conf, const char *name,
uint32_t ctl_port);
struct pport *pport_find(const struct conf *conf, const char *name);
struct pport *pport_copy(struct pport *pport, struct conf *conf);
void pport_delete(struct pport *pport);
a335 2
struct port *port_new_pp(struct conf *conf, struct target *target,
struct pport *pp);
CTMFN usr.sbin/ctld/kernel.c 1004 1004 644 41f2a09391e3a96069e4e8bd557ccade d23709bdaf5e06f23a9b6f39d47a412b 3377
d38 1
a38 1
__FBSDID("$FreeBSD: stable/10/usr.sbin/ctld/kernel.c 279055 2015-02-20 17:09:49Z mav $");
a123 1
char *port_name;
d333 1
a333 4
if (strcmp(name, "port_name") == 0) {
cur_port->port_name = str;
str = NULL;
} else if (strcmp(name, "cfiscsi_target") == 0) {
a380 1
struct pport *pp;
d501 2
a502 14
log_debugx("CTL port %u \"%s\" wasn't managed by ctld; ",
port->port_id, port->port_name);
pp = pport_find(conf, port->port_name);
if (pp == NULL) {
#if 0
log_debugx("found new kernel port %u \"%s\"",
port->port_id, port->port_name);
#endif
pp = pport_new(conf, port->port_name, port->port_id);
if (pp == NULL) {
log_warnx("pport_new failed");
continue;
}
}
d846 33
a878 36
if (port->p_portal_group) {
bzero(&req, sizeof(req));
strlcpy(req.driver, "iscsi", sizeof(req.driver));
req.reqtype = CTL_REQ_CREATE;
req.args = malloc(req.num_args * sizeof(*req.args));
n = 0;
req.args[n].namelen = sizeof("port_id");
req.args[n].name = __DECONST(char *, "port_id");
req.args[n].vallen = sizeof(port->p_ctl_port);
req.args[n].value = &port->p_ctl_port;
req.args[n++].flags = CTL_BEARG_WR;
str_arg(&req.args[n++], "cfiscsi_target", targ->t_name);
snprintf(tagstr, sizeof(tagstr), "%d", pg->pg_tag);
str_arg(&req.args[n++], "cfiscsi_portal_group_tag", tagstr);
if (targ->t_alias)
str_arg(&req.args[n++], "cfiscsi_target_alias", targ->t_alias);
str_arg(&req.args[n++], "ctld_portal_group_name", pg->pg_name);
req.num_args = n;
error = ioctl(ctl_fd, CTL_PORT_REQ, &req);
free(req.args);
if (error != 0) {
log_warn("error issuing CTL_PORT_REQ ioctl");
return (1);
}
if (req.status == CTL_LUN_ERROR) {
log_warnx("error returned from port creation request: %s",
req.error_str);
return (1);
}
if (req.status != CTL_LUN_OK) {
log_warnx("unknown port creation request status %d",
req.status);
return (1);
}
} else if (port->p_pport)
port->p_ctl_port = port->p_pport->pp_ctl_port;
a936 2
struct ctl_port_entry entry;
struct ctl_lun_map lm;
d943 11
a953 4
/* Disable port */
bzero(&entry, sizeof(entry));
entry.targ_port = port->p_ctl_port;
error = ioctl(ctl_fd, CTL_DISABLE_PORT, &entry);
d955 8
a962 2
log_warn("CTL_DISABLE_PORT ioctl failed");
return (-1);
d965 4
a968 34
/* Remove iSCSI port. */
if (port->p_portal_group) {
bzero(&req, sizeof(req));
strlcpy(req.driver, "iscsi", sizeof(req.driver));
req.reqtype = CTL_REQ_REMOVE;
req.num_args = 2;
req.args = malloc(req.num_args * sizeof(*req.args));
str_arg(&req.args[0], "cfiscsi_target", targ->t_name);
snprintf(tagstr, sizeof(tagstr), "%d", pg->pg_tag);
str_arg(&req.args[1], "cfiscsi_portal_group_tag", tagstr);
error = ioctl(ctl_fd, CTL_PORT_REQ, &req);
free(req.args);
if (error != 0) {
log_warn("error issuing CTL_PORT_REQ ioctl");
return (1);
}
if (req.status == CTL_LUN_ERROR) {
log_warnx("error returned from port removal request: %s",
req.error_str);
return (1);
}
if (req.status != CTL_LUN_OK) {
log_warnx("unknown port removal request status %d",
req.status);
return (1);
}
} else {
/* Disable LUN mapping. */
lm.port = port->p_ctl_port;
lm.plun = UINT32_MAX;
lm.lun = UINT32_MAX;
error = ioctl(ctl_fd, CTL_LUN_MAP, &lm);
if (error != 0)
log_warn("CTL_LUN_MAP ioctl failed");
d970 1
CTMFN usr.sbin/ctld/parse.y 1004 1004 644 d27a8abc28a36ffcc8be76b1343e8bbe 5344a953500f45dbc102f5e9b297fcdb 1009
d30 1
a30 1
* $FreeBSD: stable/10/usr.sbin/ctld/parse.y 279055 2015-02-20 17:09:49Z mav $
d64 1
a64 1
%token PATH PIDFILE PORT PORTAL_GROUP REDIRECT SEMICOLON SERIAL SIZE STR
a467 2
target_port
|
a710 30
target_port: PORT STR
{
struct pport *pp;
struct port *tp;
pp = pport_find(conf, $2);
if (pp == NULL) {
log_warnx("unknown port \"%s\" for target \"%s\"",
$2, target->t_name);
free($2);
return (1);
}
if (!TAILQ_EMPTY(&pp->pp_ports)) {
log_warnx("can't link port \"%s\" to target \"%s\", "
"port already linked to some target",
$2, target->t_name);
free($2);
return (1);
}
tp = port_new_pp(conf, target, pp);
if (tp == NULL) {
log_warnx("can't link port \"%s\" to target \"%s\"",
$2, target->t_name);
free($2);
return (1);
}
free($2);
}
;
d940 1
a940 1
conf_new_from_file(const char *path, struct conf *oldconf)
a943 1
struct pport *pp;
a949 3
TAILQ_FOREACH(pp, &oldconf->conf_pports, pp_next)
pport_copy(pp, conf);
CTMFN usr.sbin/ctld/token.l 1004 1004 644 e6a0b597ae94b4a7e57b4a98b18103ae ce421515dd6aa37c3ae4de7b10c1db5f 121
d30 1
a30 1
* $FreeBSD: stable/10/usr.sbin/ctld/token.l 279055 2015-02-20 17:09:49Z mav $
a73 1
port { return PORT; }
CTM_END 18f3870f0374a27225b15b9b79e6bf72