1.一种多控存储中IO管理的方法,其特征在于,包括:
接收上层发来的IO的请求;
根据所述IO的属性,判断所述IO所属的虚拟卷是否存在,如果否,则结束;
如果是,则判断所述虚拟卷是否属于当前的控制器,如果否,则查询所述虚拟卷所属的控制器,并转发至与所述虚拟卷对应的控制器;
判断所述虚拟卷是否处于正常状态,如果是,则将所述IO加入route_IOQ队列中,调用所述route_IOQ队列的线程进行处理。
2.根据权利要求1所述的多控存储中IO管理的方法,其特征在于,所述调用所述route_IOQ队列的线程进行处理之后,还包括:
将处理完毕的所述IO加入到submmit_IOQ队列中,向下层下发。
3.根据权利要求2所述的多控存储中IO管理的方法,其特征在于,
所述将处理完毕的所述IO加入到submmit_IOQ队列中,向下层下发包括:
从所述submmit_IOQ中取出IOE,将所述IOE转换成下层所能处理的IO单位;
根据所述IOE的读写属性,调用下层的读接口或写接口,向下层下发所述IOE中的IO;
调用IOE的回调函数,释放所述IOE的数据结构。
4.根据权利要求3所述的多控存储中IO管理的方法,其特征在于,所述调用所述route_IOQ队列的线程进行处理包括:
从所述route_IOQ中取出IO;
判断当前的所述IO所属的控制器是否有注册的插件,如果有,则从插件链表中按照优先级从高到低依次选取插件,将所述IO依次交给所述插件处理;
当所述IO被所有的插件处理完毕后,休眠所述route_IOQ,将IO添加到所述submmit_IOQ队列中。
5.根据权利要求1-4任一项所述的多控存储中IO管理的方法,其特征在于,
所述判断所述虚拟卷是否处于正常状态之后还包括:
如果所述虚拟卷处于挂起状态或者error状态,则返回错误并结束流程。
6.一种多控存储中IO管理的装置,其特征在于,包括设置于存储系统中的多个控制器,以及与多个所述控制器连接的IO管理模块,其中,所述IO管理模块包括:
接收单元,用于接收上层发来的IO;
第一判断单元,用于根据所述IO的属性,判断所述IO所属的虚拟卷是否存在,如果否,则结束;
第二判断单元,用于如果是,则判断所述虚拟卷是否属于当前的控制器,如果否,则查询所述虚拟卷所属的控制器,并转发至与所述虚拟卷对应的控制器;
第三判断单元,用于判断所述虚拟卷是否处于正常状态,如果是,则将所述IO加入route_IOQ队列中,调用所述route_IOQ队列的线程进行处理。
7.根据权利要求6所述的多控存储中IO管理的装置,其特征在于,还包括:
下发单元,用于将处理完毕的所述IO加入到submmit_IOQ队列中,向下层下发。
8.根据权利要求7所述的多控存储中IO管理的装置,其特征在于,
所述下发单元包括:
转换部件,用于从所述submmit_IOQ中取出IOE,将所述IOE转换成下层所能处理的IO单位;
下发部件,用于根据所述IOE的读写属性,调用下层的读接口或写接口,向下层下发所述IOE中的IO;
释放部件,用于调用IOE的回调函数,释放所述IOE的数据结构。
9.根据权利要求8所述的多控存储中IO管理的装置,其特征在于,
所述第三判断单元包括:
取出部件,用于从所述route_IOQ中取出IO;
判断部件,用于判断当前的所述IO所属的控制器是否有注册的插件,如果有,则从插件链表中按照优先级从高到低依次选取插件,将所述IO依次交给所述插件处理;
休眠部件,用于当所述IO被所有的插件处理完毕后,休眠所述route_IOQ,将IO添加到所述submmit_IOQ队列中。
10.根据权利要求6-9任一项所述的多控存储中IO管理的装置,其特征在于,
还包括:
返回单元,用于如果所述虚拟卷处于挂起状态或者error状态,则返回错误并结束流程。