The block device being a fraction of a file system block larger is normal. The superblock should round down since that fraction is unusable by the file system. The check is buggy, IMO. device->total_bytes isn't read from disk - it's defined by the kernel's view of how large the device is. We should round that down as well before doing the comparison.