广元十五年九月,朝廷以左武威大将军甘潜为大都督,领军五万出武宁关前往河东平叛。
甘潜能力平庸,但为人谨慎,领军五万,稳扎稳打,一路顺利,三战三捷,不到一个月,已然全面肃清河东道白巾军,随即进军河南道。
刘志恒主动退出河东道,示敌以弱,一让再让,甘潜被连番的胜利冲昏了头脑,率大军直逼兴州三原县,寻求白巾军主力决战,意图一战而定全局。
刘志恒详而退,甘潜率军追击,在无佘山受到伏击,措不及防,大败,几近全军覆灭,甘潜战死。
白巾军士气大震,刘志恒复占河南道,随即领十万大军再次兵围河东首府晋阳城,天下震动,朝野震动。
十月底。
河东道节度副使,晋阳留守,司马图断然拒绝刘志恒的劝降,并把其派来的使者枭首示众,悬挂于城墙之上。
刘志恒大怒,随即率军攻城,昼夜不停。
司马图一面派人前往朝廷求援,一面聚兵一万以及数万城中青壮百姓,拒城死守,竭力抗御。
双方大战数日,皆是死伤惨重。
十一月。
晋阳城久攻不下,刘志恒命人在城南筑土山,欲居高临下攻城,司马图缚木加高城楼,使白巾军之计无法得逞。
刘志恒随即改变战术,命人领军三千详攻南城,自己则是领五万大军,趁夜主攻北城,并让人挖掘十数条地道,双管齐下。
司马图识破其计,命手下将军领五百士兵,多做木人以充数量,守卫南城,以虚对虚,本人则是领军五千守卫北城,并挖掘长沟,切断白巾军的地道,待白巾军挖至深沟时,将其擒杀。司马图又在沟外堆积木柴,备好火种,发现白巾军在地道中潜伏,便将木柴塞进地道,大火燃烧,还借助牛皮囊鼓风,烈火浓烟,地道中的白巾军士兵被烧得焦头烂额,以致数千白巾军活活窒息死于地道之中,其状惨不忍睹。
城外,刘志恒一面率军强攻,一面让人用攻车撞击城墙,司马图听从手下幕僚之计,用布匹做成帐幔,随其攻车所向张开,攻车撞之,布受冲击立即悬空,城墙未受损坏。
死守的同时,司马图命人从城东悬绳而下,聚两千敢死之士,趁夜绕其白巾军身后,突然发起进攻,并高呼朝廷援军以致,白巾军不知有诈,真的以为朝廷大军到来,士气溃散,阵型大乱,被杀者数以千计,刘志恒率军退避百里,直到天明,才知上当受骗,顿时怒火攻心,昏厥于地。
广元十五年,十二月中旬,当刘志恒久攻不下,被困晋阳城之时。
楚州节度使王怀烈,领军两万,在徐州大破刘志恒手下大将李默安,其人被斩于军前,王怀烈领军北上,杀入河南道,一路势如破竹,连战连捷,镇守河南道的白巾军主将黄百川,放弃所有城池,收拢士兵,得军五万,死守河南道重镇相州。
另一方面,成、荣节度使唐世安,领一万精锐,借着大雪之际,忍受天寒地冻,一夜行军五百里,奇袭袁州城,一举而破之,据守此城的四万白巾军全军覆灭,随后仅用半月时间,基本肃清山南道境内的所有白巾军。