• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

C++ sdev_to_zfcp函数代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了C++中sdev_to_zfcp函数的典型用法代码示例。如果您正苦于以下问题:C++ sdev_to_zfcp函数的具体用法?C++ sdev_to_zfcp怎么用?C++ sdev_to_zfcp使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。



在下文中一共展示了sdev_to_zfcp函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: zfcp_erp_lun_unblock

static void zfcp_erp_lun_unblock(struct scsi_device *sdev)
{
    struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);

    if (status_change_set(ZFCP_STATUS_COMMON_UNBLOCKED, &zfcp_sdev->status))
        zfcp_dbf_rec_run("erlubl1", &sdev_to_zfcp(sdev)->erp_action);
    atomic_set_mask(ZFCP_STATUS_COMMON_UNBLOCKED, &zfcp_sdev->status);
}
开发者ID:mjduddin,项目名称:B14CKB1RD_kernel_m8,代码行数:8,代码来源:zfcp_erp.c


示例2: zfcp_scsi_slave_destroy

static void zfcp_scsi_slave_destroy(struct scsi_device *sdev)
{
	struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);

	zfcp_erp_lun_shutdown_wait(sdev, "scssd_1");
	put_device(&zfcp_sdev->port->dev);
}
开发者ID:ANFS,项目名称:ANFS-kernel,代码行数:7,代码来源:zfcp_scsi.c


示例3: zfcp_erp_action_dequeue

static void zfcp_erp_action_dequeue(struct zfcp_erp_action *erp_action)
{
    struct zfcp_adapter *adapter = erp_action->adapter;
    struct zfcp_scsi_dev *zfcp_sdev;

    adapter->erp_total_count--;
    if (erp_action->status & ZFCP_STATUS_ERP_LOWMEM) {
        adapter->erp_low_mem_count--;
        erp_action->status &= ~ZFCP_STATUS_ERP_LOWMEM;
    }

    list_del(&erp_action->list);
    zfcp_dbf_rec_run("eractd1", erp_action);

    switch (erp_action->action) {
    case ZFCP_ERP_ACTION_REOPEN_LUN:
        zfcp_sdev = sdev_to_zfcp(erp_action->sdev);
        atomic_clear_mask(ZFCP_STATUS_COMMON_ERP_INUSE,
                          &zfcp_sdev->status);
        break;

    case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
    case ZFCP_ERP_ACTION_REOPEN_PORT:
        atomic_clear_mask(ZFCP_STATUS_COMMON_ERP_INUSE,
                          &erp_action->port->status);
        break;

    case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
        atomic_clear_mask(ZFCP_STATUS_COMMON_ERP_INUSE,
                          &erp_action->adapter->status);
        break;
    }
}
开发者ID:mjduddin,项目名称:B14CKB1RD_kernel_m8,代码行数:33,代码来源:zfcp_erp.c


示例4: zfcp_erp_strategy_check_lun

static int zfcp_erp_strategy_check_lun(struct scsi_device *sdev, int result)
{
    struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);

    switch (result) {
    case ZFCP_ERP_SUCCEEDED :
        atomic_set(&zfcp_sdev->erp_counter, 0);
        zfcp_erp_lun_unblock(sdev);
        break;
    case ZFCP_ERP_FAILED :
        atomic_inc(&zfcp_sdev->erp_counter);
        if (atomic_read(&zfcp_sdev->erp_counter) > ZFCP_MAX_ERPS) {
            dev_err(&zfcp_sdev->port->adapter->ccw_device->dev,
                    "ERP failed for LUN 0x%016Lx on "
                    "port 0x%016Lx\n",
                    (unsigned long long)zfcp_scsi_dev_lun(sdev),
                    (unsigned long long)zfcp_sdev->port->wwpn);
            zfcp_erp_set_lun_status(sdev,
                                    ZFCP_STATUS_COMMON_ERP_FAILED);
        }
        break;
    }

    if (atomic_read(&zfcp_sdev->status) & ZFCP_STATUS_COMMON_ERP_FAILED) {
        zfcp_erp_lun_block(sdev, 0);
        result = ZFCP_ERP_EXIT;
    }
    return result;
}
开发者ID:mjduddin,项目名称:B14CKB1RD_kernel_m8,代码行数:29,代码来源:zfcp_erp.c


示例5: zfcp_erp_lun_strategy_clearstati

static void zfcp_erp_lun_strategy_clearstati(struct scsi_device *sdev)
{
	struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);

	atomic_andnot(ZFCP_STATUS_COMMON_ACCESS_DENIED,
			  &zfcp_sdev->status);
}
开发者ID:acton393,项目名称:linux,代码行数:7,代码来源:zfcp_erp.c


示例6: zfcp_erp_action_dismiss_lun

static void zfcp_erp_action_dismiss_lun(struct scsi_device *sdev)
{
    struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);

    if (atomic_read(&zfcp_sdev->status) & ZFCP_STATUS_COMMON_ERP_INUSE)
        zfcp_erp_action_dismiss(&zfcp_sdev->erp_action);
}
开发者ID:mjduddin,项目名称:B14CKB1RD_kernel_m8,代码行数:7,代码来源:zfcp_erp.c


示例7: zfcp_dbf_rec_run_lvl

/**
 * zfcp_dbf_rec_run_lvl - trace event related to running recovery
 * @level: trace level to be used for event
 * @tag: identifier for event
 * @erp: erp_action running
 */
void zfcp_dbf_rec_run_lvl(int level, char *tag, struct zfcp_erp_action *erp)
{
	struct zfcp_dbf *dbf = erp->adapter->dbf;
	struct zfcp_dbf_rec *rec = &dbf->rec_buf;
	unsigned long flags;

	if (!debug_level_enabled(dbf->rec, level))
		return;

	spin_lock_irqsave(&dbf->rec_lock, flags);
	memset(rec, 0, sizeof(*rec));

	rec->id = ZFCP_DBF_REC_RUN;
	memcpy(rec->tag, tag, ZFCP_DBF_TAG_LEN);
	zfcp_dbf_set_common(rec, erp->adapter, erp->port, erp->sdev);

	rec->u.run.fsf_req_id = erp->fsf_req_id;
	rec->u.run.rec_status = erp->status;
	rec->u.run.rec_step = erp->step;
	rec->u.run.rec_action = erp->action;

	if (erp->sdev)
		rec->u.run.rec_count =
			atomic_read(&sdev_to_zfcp(erp->sdev)->erp_counter);
	else if (erp->port)
		rec->u.run.rec_count = atomic_read(&erp->port->erp_counter);
	else
		rec->u.run.rec_count = atomic_read(&erp->adapter->erp_counter);

	debug_event(dbf->rec, level, rec, sizeof(*rec));
	spin_unlock_irqrestore(&dbf->rec_lock, flags);
}
开发者ID:mkrufky,项目名称:linux,代码行数:38,代码来源:zfcp_dbf.c


示例8: switch

static struct zfcp_erp_action *zfcp_erp_setup_act(int need, u32 act_status,
        struct zfcp_adapter *adapter,
        struct zfcp_port *port,
        struct scsi_device *sdev)
{
    struct zfcp_erp_action *erp_action;
    struct zfcp_scsi_dev *zfcp_sdev;

    switch (need) {
    case ZFCP_ERP_ACTION_REOPEN_LUN:
        zfcp_sdev = sdev_to_zfcp(sdev);
        if (!(act_status & ZFCP_STATUS_ERP_NO_REF))
            if (scsi_device_get(sdev))
                return NULL;
        atomic_set_mask(ZFCP_STATUS_COMMON_ERP_INUSE,
                        &zfcp_sdev->status);
        erp_action = &zfcp_sdev->erp_action;
        memset(erp_action, 0, sizeof(struct zfcp_erp_action));
        erp_action->port = port;
        erp_action->sdev = sdev;
        if (!(atomic_read(&zfcp_sdev->status) &
                ZFCP_STATUS_COMMON_RUNNING))
            act_status |= ZFCP_STATUS_ERP_CLOSE_ONLY;
        break;

    case ZFCP_ERP_ACTION_REOPEN_PORT:
    case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
        if (!get_device(&port->dev))
            return NULL;
        zfcp_erp_action_dismiss_port(port);
        atomic_set_mask(ZFCP_STATUS_COMMON_ERP_INUSE, &port->status);
        erp_action = &port->erp_action;
        memset(erp_action, 0, sizeof(struct zfcp_erp_action));
        erp_action->port = port;
        if (!(atomic_read(&port->status) & ZFCP_STATUS_COMMON_RUNNING))
            act_status |= ZFCP_STATUS_ERP_CLOSE_ONLY;
        break;

    case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
        kref_get(&adapter->ref);
        zfcp_erp_action_dismiss_adapter(adapter);
        atomic_set_mask(ZFCP_STATUS_COMMON_ERP_INUSE, &adapter->status);
        erp_action = &adapter->erp_action;
        memset(erp_action, 0, sizeof(struct zfcp_erp_action));
        if (!(atomic_read(&adapter->status) &
                ZFCP_STATUS_COMMON_RUNNING))
            act_status |= ZFCP_STATUS_ERP_CLOSE_ONLY;
        break;

    default:
        return NULL;
    }

    erp_action->adapter = adapter;
    erp_action->action = need;
    erp_action->status = act_status;

    return erp_action;
}
开发者ID:mjduddin,项目名称:B14CKB1RD_kernel_m8,代码行数:59,代码来源:zfcp_erp.c


示例9: zfcp_erp_lun_strategy_clearstati

static void zfcp_erp_lun_strategy_clearstati(struct scsi_device *sdev)
{
    struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);

    atomic_clear_mask(ZFCP_STATUS_COMMON_ACCESS_DENIED |
                      ZFCP_STATUS_LUN_SHARED | ZFCP_STATUS_LUN_READONLY,
                      &zfcp_sdev->status);
}
开发者ID:mjduddin,项目名称:B14CKB1RD_kernel_m8,代码行数:8,代码来源:zfcp_erp.c


示例10: _zfcp_erp_lun_reopen_all

static void _zfcp_erp_lun_reopen_all(struct zfcp_port *port, int clear,
				     char *id)
{
	struct scsi_device *sdev;

	shost_for_each_device(sdev, port->adapter->scsi_host)
		if (sdev_to_zfcp(sdev)->port == port)
			_zfcp_erp_lun_reopen(sdev, clear, id, 0);
}
开发者ID:119-org,项目名称:hi3518-osdrv,代码行数:9,代码来源:zfcp_erp.c


示例11: zfcp_erp_action_dismiss_port

static void zfcp_erp_action_dismiss_port(struct zfcp_port *port)
{
	struct scsi_device *sdev;

	if (atomic_read(&port->status) & ZFCP_STATUS_COMMON_ERP_INUSE)
		zfcp_erp_action_dismiss(&port->erp_action);
	else
		shost_for_each_device(sdev, port->adapter->scsi_host)
			if (sdev_to_zfcp(sdev)->port == port)
				zfcp_erp_action_dismiss_lun(sdev);
}
开发者ID:119-org,项目名称:hi3518-osdrv,代码行数:11,代码来源:zfcp_erp.c


示例12: zfcp_erp_lun_reopen

void zfcp_erp_lun_reopen(struct scsi_device *sdev, int clear, char *id)
{
    unsigned long flags;
    struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
    struct zfcp_port *port = zfcp_sdev->port;
    struct zfcp_adapter *adapter = port->adapter;

    write_lock_irqsave(&adapter->erp_lock, flags);
    _zfcp_erp_lun_reopen(sdev, clear, id, 0);
    write_unlock_irqrestore(&adapter->erp_lock, flags);
}
开发者ID:mjduddin,项目名称:B14CKB1RD_kernel_m8,代码行数:11,代码来源:zfcp_erp.c


示例13: zfcp_scsi_slave_destroy

static void zfcp_scsi_slave_destroy(struct scsi_device *sdev)
{
	struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);

	/* if previous slave_alloc returned early, there is nothing to do */
	if (!zfcp_sdev->port)
		return;

	zfcp_erp_lun_shutdown_wait(sdev, "scssd_1");
	put_device(&zfcp_sdev->port->dev);
}
开发者ID:AlexShiLucky,项目名称:linux,代码行数:11,代码来源:zfcp_scsi.c


示例14: zfcp_erp_try_rport_unblock

/**
 * zfcp_erp_try_rport_unblock - unblock rport if no more/new recovery
 * @port: zfcp_port whose fc_rport we should try to unblock
 */
static void zfcp_erp_try_rport_unblock(struct zfcp_port *port)
{
	unsigned long flags;
	struct zfcp_adapter *adapter = port->adapter;
	int port_status;
	struct Scsi_Host *shost = adapter->scsi_host;
	struct scsi_device *sdev;

	write_lock_irqsave(&adapter->erp_lock, flags);
	port_status = atomic_read(&port->status);
	if ((port_status & ZFCP_STATUS_COMMON_UNBLOCKED)    == 0 ||
	    (port_status & (ZFCP_STATUS_COMMON_ERP_INUSE |
			    ZFCP_STATUS_COMMON_ERP_FAILED)) != 0) {
		/* new ERP of severity >= port triggered elsewhere meanwhile or
		 * local link down (adapter erp_failed but not clear unblock)
		 */
		zfcp_dbf_rec_run_lvl(4, "ertru_p", &port->erp_action);
		write_unlock_irqrestore(&adapter->erp_lock, flags);
		return;
	}
	spin_lock(shost->host_lock);
	__shost_for_each_device(sdev, shost) {
		struct zfcp_scsi_dev *zsdev = sdev_to_zfcp(sdev);
		int lun_status;

		if (zsdev->port != port)
			continue;
		/* LUN under port of interest */
		lun_status = atomic_read(&zsdev->status);
		if ((lun_status & ZFCP_STATUS_COMMON_ERP_FAILED) != 0)
			continue; /* unblock rport despite failed LUNs */
		/* LUN recovery not given up yet [maybe follow-up pending] */
		if ((lun_status & ZFCP_STATUS_COMMON_UNBLOCKED) == 0 ||
		    (lun_status & ZFCP_STATUS_COMMON_ERP_INUSE) != 0) {
			/* LUN blocked:
			 * not yet unblocked [LUN recovery pending]
			 * or meanwhile blocked [new LUN recovery triggered]
			 */
			zfcp_dbf_rec_run_lvl(4, "ertru_l", &zsdev->erp_action);
			spin_unlock(shost->host_lock);
			write_unlock_irqrestore(&adapter->erp_lock, flags);
			return;
		}
	}
	/* now port has no child or all children have completed recovery,
	 * and no ERP of severity >= port was meanwhile triggered elsewhere
	 */
	zfcp_scsi_schedule_rport_register(port);
	spin_unlock(shost->host_lock);
	write_unlock_irqrestore(&adapter->erp_lock, flags);
}
开发者ID:AICP,项目名称:kernel_moto_shamu,代码行数:55,代码来源:zfcp_erp.c


示例15: zfcp_erp_lun_shutdown_wait

void zfcp_erp_lun_shutdown_wait(struct scsi_device *sdev, char *id)
{
    unsigned long flags;
    struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
    struct zfcp_port *port = zfcp_sdev->port;
    struct zfcp_adapter *adapter = port->adapter;
    int clear = ZFCP_STATUS_COMMON_RUNNING | ZFCP_STATUS_COMMON_ERP_FAILED;

    write_lock_irqsave(&adapter->erp_lock, flags);
    _zfcp_erp_lun_reopen(sdev, clear, id, ZFCP_STATUS_ERP_NO_REF);
    write_unlock_irqrestore(&adapter->erp_lock, flags);

    zfcp_erp_wait(adapter);
}
开发者ID:mjduddin,项目名称:B14CKB1RD_kernel_m8,代码行数:14,代码来源:zfcp_erp.c


示例16: zfcp_scsi_eh_host_reset_handler

static int zfcp_scsi_eh_host_reset_handler(struct scsi_cmnd *scpnt)
{
	struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(scpnt->device);
	struct zfcp_adapter *adapter = zfcp_sdev->port->adapter;
	int ret;

	zfcp_erp_adapter_reopen(adapter, 0, "schrh_1");
	zfcp_erp_wait(adapter);
	ret = fc_block_scsi_eh(scpnt);
	if (ret)
		return ret;

	return SUCCESS;
}
开发者ID:33d,项目名称:linux-2.6.21-hh20,代码行数:14,代码来源:zfcp_scsi.c


示例17: zfcp_erp_required_act

static int zfcp_erp_required_act(int want, struct zfcp_adapter *adapter,
                                 struct zfcp_port *port,
                                 struct scsi_device *sdev)
{
    int need = want;
    int l_status, p_status, a_status;
    struct zfcp_scsi_dev *zfcp_sdev;

    switch (want) {
    case ZFCP_ERP_ACTION_REOPEN_LUN:
        zfcp_sdev = sdev_to_zfcp(sdev);
        l_status = atomic_read(&zfcp_sdev->status);
        if (l_status & ZFCP_STATUS_COMMON_ERP_INUSE)
            return 0;
        p_status = atomic_read(&port->status);
        if (!(p_status & ZFCP_STATUS_COMMON_RUNNING) ||
                p_status & ZFCP_STATUS_COMMON_ERP_FAILED)
            return 0;
        if (!(p_status & ZFCP_STATUS_COMMON_UNBLOCKED))
            need = ZFCP_ERP_ACTION_REOPEN_PORT;

    case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
        p_status = atomic_read(&port->status);
        if (!(p_status & ZFCP_STATUS_COMMON_OPEN))
            need = ZFCP_ERP_ACTION_REOPEN_PORT;

    case ZFCP_ERP_ACTION_REOPEN_PORT:
        p_status = atomic_read(&port->status);
        if (p_status & ZFCP_STATUS_COMMON_ERP_INUSE)
            return 0;
        a_status = atomic_read(&adapter->status);
        if (!(a_status & ZFCP_STATUS_COMMON_RUNNING) ||
                a_status & ZFCP_STATUS_COMMON_ERP_FAILED)
            return 0;
        if (p_status & ZFCP_STATUS_COMMON_NOESC)
            return need;
        if (!(a_status & ZFCP_STATUS_COMMON_UNBLOCKED))
            need = ZFCP_ERP_ACTION_REOPEN_ADAPTER;

    case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
        a_status = atomic_read(&adapter->status);
        if (a_status & ZFCP_STATUS_COMMON_ERP_INUSE)
            return 0;
        if (!(a_status & ZFCP_STATUS_COMMON_RUNNING) &&
                !(a_status & ZFCP_STATUS_COMMON_OPEN))
            return 0;
    }

    return need;
}
开发者ID:mjduddin,项目名称:B14CKB1RD_kernel_m8,代码行数:50,代码来源:zfcp_erp.c


示例18: _zfcp_erp_lun_reopen

static void _zfcp_erp_lun_reopen(struct scsi_device *sdev, int clear, char *id,
                                 u32 act_status)
{
    struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
    struct zfcp_adapter *adapter = zfcp_sdev->port->adapter;

    zfcp_erp_lun_block(sdev, clear);

    if (atomic_read(&zfcp_sdev->status) & ZFCP_STATUS_COMMON_ERP_FAILED)
        return;

    zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_LUN, adapter,
                            zfcp_sdev->port, sdev, id, act_status);
}
开发者ID:mjduddin,项目名称:B14CKB1RD_kernel_m8,代码行数:14,代码来源:zfcp_erp.c


示例19: zfcp_scsi_queuecommand

static
int zfcp_scsi_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *scpnt)
{
	struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(scpnt->device);
	struct fc_rport *rport = starget_to_rport(scsi_target(scpnt->device));
	int    status, scsi_result, ret;

	/* reset the status for this request */
	scpnt->result = 0;
	scpnt->host_scribble = NULL;

	scsi_result = fc_remote_port_chkready(rport);
	if (unlikely(scsi_result)) {
		scpnt->result = scsi_result;
		zfcp_dbf_scsi_fail_send(scpnt);
		scpnt->scsi_done(scpnt);
		return 0;
	}

	status = atomic_read(&zfcp_sdev->status);
	if (unlikely(status & ZFCP_STATUS_COMMON_ERP_FAILED) &&
		     !(atomic_read(&zfcp_sdev->port->status) &
		       ZFCP_STATUS_COMMON_ERP_FAILED)) {
		/* only LUN access denied, but port is good
		 * not covered by FC transport, have to fail here */
		zfcp_scsi_command_fail(scpnt, DID_ERROR);
		return 0;
	}

	if (unlikely(!(status & ZFCP_STATUS_COMMON_UNBLOCKED))) {
		/* This could be either
		 * open LUN pending: this is temporary, will result in
		 *	open LUN or ERP_FAILED, so retry command
		 * call to rport_delete pending: mimic retry from
		 * 	fc_remote_port_chkready until rport is BLOCKED
		 */
		zfcp_scsi_command_fail(scpnt, DID_IMM_RETRY);
		return 0;
	}

	ret = zfcp_fsf_fcp_cmnd(scpnt);
	if (unlikely(ret == -EBUSY))
		return SCSI_MLQUEUE_DEVICE_BUSY;
	else if (unlikely(ret < 0))
		return SCSI_MLQUEUE_HOST_BUSY;

	return ret;
}
开发者ID:33d,项目名称:linux-2.6.21-hh20,代码行数:48,代码来源:zfcp_scsi.c


示例20: zfcp_dbf_set_common

static void zfcp_dbf_set_common(struct zfcp_dbf_rec *rec,
				struct zfcp_adapter *adapter,
				struct zfcp_port *port,
				struct scsi_device *sdev)
{
	rec->adapter_status = atomic_read(&adapter->status);
	if (port) {
		rec->port_status = atomic_read(&port->status);
		rec->wwpn = port->wwpn;
		rec->d_id = port->d_id;
	}
	if (sdev) {
		rec->lun_status = atomic_read(&sdev_to_zfcp(sdev)->status);
		rec->lun = zfcp_scsi_dev_lun(sdev);
	}
}
开发者ID:mjduddin,项目名称:B14CKB1RD_kernel_m8,代码行数:16,代码来源:zfcp_dbf.c



注:本文中的sdev_to_zfcp函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++ sdhci_add_host函数代码示例发布时间:2022-05-30
下一篇:
C++ sdev_printk函数代码示例发布时间:2022-05-30
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap