set_blocksize just sets the block sise used for buffer heads and should not be called by the driver. blkdev_get updates the block size, so you must already have the fd re-reading the partition table open? I'm not entirely sure how we can work around this except by avoiding buffer head I/O in the partition reread code. Note that this affects all block drivers where the block size could change at runtime.