On Tue, 2018-08-14 at 09:33 +-0200, Hannes Reinecke wrote: +AD4- +-const struct attribute+AF8-group +ACo-nvme+AF8-ns+AF8-id+AF8-attr+AF8-groups+AFsAXQ- +AD0- +AHs- +AD4- +- +ACY-nvme+AF8-ns+AF8-id+AF8-attr+AF8-group, +AD4- +- NULL, /+ACo- Will be filled in by lightnvm if present +ACo-/ +AD4- +- NULL, +AD4- +-+AH0AOw- +AFs- ... +AF0- +AD4- -void nvme+AF8-nvm+AF8-unregister+AF8-sysfs(struct nvme+AF8-ns +ACo-ns) +AD4- -+AHs- +AD4- - struct nvm+AF8-dev +ACo-ndev +AD0- ns-+AD4-ndev+ADs- +AD4- - struct nvm+AF8-geo +ACo-geo +AD0- +ACY-ndev-+AD4-geo+ADs- +AD4- +- return+ADs- +AD4- +AD4- switch (geo-+AD4-major+AF8-ver+AF8-id) +AHs- +AD4- case 1: +AD4- - sysfs+AF8-remove+AF8-group(+ACY-disk+AF8-to+AF8-dev(ns-+AD4-disk)-+AD4-kobj, +AD4- - +ACY-nvm+AF8-dev+AF8-attr+AF8-group+AF8-12)+ADs- +AD4- +- nvme+AF8-ns+AF8-id+AF8-attr+AF8-groups+AFs-1+AF0- +AD0- +ACY-nvm+AF8-dev+AF8-attr+AF8-group+AF8-12+ADs- +AD4- break+ADs- +AD4- case 2: +AD4- - sysfs+AF8-remove+AF8-group(+ACY-disk+AF8-to+AF8-dev(ns-+AD4-disk)-+AD4-kobj, +AD4- - +ACY-nvm+AF8-dev+AF8-attr+AF8-group+AF8-20)+ADs- +AD4- +- nvme+AF8-ns+AF8-id+AF8-attr+AF8-groups+AFs-1+AF0- +AD0- +ACY-nvm+AF8-dev+AF8-attr+AF8-group+AF8-20+ADs- This patch introduces a really ugly dependency between the NVMe core code and the lightnvm code, namely that the lightnvm code has to know at which position in the nvme+AF8-ns+AF8-id+AF8-attr+AF8-groups it can fill in its attribute group pointer. Have you considered to make nvme+AF8-nvm+AF8-register+AF8-sysfs() return an attribute group pointer such that the nvme+AF8-ns+AF8-id+AF8-attr+AF8-groups can be changed from a global into a static array? Thanks, Bart.