On Fri, Dec 08, 2023 at 07:47:01AM +0800, John Sanpe wrote: > WARN_ON(clu < EXFAT_FIRST_CLUSTER); > - ent_idx = CLUSTER_TO_BITMAP_ENT(clu); > - clu_base = BITMAP_ENT_TO_CLUSTER(ent_idx & ~(BITS_PER_BYTE_MASK)); > + ent_idx = ALIGN_DOWN(CLUSTER_TO_BITMAP_ENT(clu), BITS_PER_LONG); > + clu_base = BITMAP_ENT_TO_CLUSTER(ent_idx); > clu_mask = IGNORED_BITS_REMAINED(clu, clu_base); > > map_i = BITMAP_OFFSET_SECTOR_INDEX(sb, ent_idx); > map_b = BITMAP_OFFSET_BYTE_IN_SECTOR(sb, ent_idx); > > for (i = EXFAT_FIRST_CLUSTER; i < sbi->num_clusters; > - i += BITS_PER_BYTE) { > - k = *(sbi->vol_amap[map_i]->b_data + map_b); > + i += BITS_PER_LONG) { > + bitval = *(__le_long *)(sbi->vol_amap[map_i]->b_data + map_b); Is this guaranteed to be word-aligned, or might we end up doing misaligned loads here?