On Fri, 2015-12-04 at 15:33 -0800, James Bottomley wrote: [...] > > static void register_disk(struct gendisk *disk) > > { > > struct device *ddev = disk_to_dev(disk); > > @@ -609,6 +624,7 @@ void add_disk(struct gendisk *disk) > > disk->first_minor = MINOR(devt); > > > > disk_alloc_events(disk); > > + disk_alloc_badblocks(disk); > > Why unconditionally do this? No-one currently uses the interface, but > every disk will now pay the price of an additional structure plus a > page > for no benefit. You should probably either export the initializer for > those who want to use it or, perhaps even better, make it lazily > allocated the first time anyone tries to set a bad block. > > If you come up with a really good reason for allocating it > unconditionally, then it should probably be an embedded structure in > the gendisk. > Agreed - I'll fix for v3. I'm considering an embedded structure in gendisk (same as md) (why is this preferred to pointer chasing, especially when this wastes more space?), and a new exported initializer that is used by anyone who wants to use gendisk's badblocks. -Vishal��.n��������+%������w��{.n�����{������ܨ}���Ơz�j:+v�����w����ޙ��&�)ߡ�a����z�ޗ���ݢj��w�f