ceph集群销毁时,对ceph文件系统进行了umount,然后调用sgdisk -o清除分区信息,由于umount没有成功,导致sgdisk线程被卡住,原因是:
下图umount线程3384374调用的deactivate_super函数占用了读写锁的写锁:down_write(&s->s_umount);
而线程3544214调用的iterate_super函数将要申请读写锁的读锁:down_write(&s->s_umount);
由于写锁具有排他性,读锁将申请不到。所以所有尝试执行的sgdisk都进入D状态。
umount没有成功原因:
因为page cache中有个page正在回写(PG_writeback),即存在其他线程还在使用该ceph文件系统,该umount操作只有等待该page回写完成才能成功。所以销毁前需要保证所有连接该文件系统的客户端(nfs,ssh等)都要停掉,所以集群重启下再做销毁方可成功。