return len > 0 || bv->bv_len > max_len;
 }
 
+static unsigned int bio_split_alignment(struct bio *bio,
+               const struct queue_limits *lim)
+{
+       if (op_is_write(bio_op(bio)) && lim->zone_write_granularity)
+               return lim->zone_write_granularity;
+       return lim->logical_block_size;
+}
+
 /**
  * bio_split_rw_at - check if and where to split a read/write bio
  * @bio:  [in] bio to be split
         * split size so that each bio is properly block size aligned, even if
         * we do not use the full hardware limits.
         */
-       bytes = ALIGN_DOWN(bytes, lim->logical_block_size);
+       bytes = ALIGN_DOWN(bytes, bio_split_alignment(bio, lim));
 
        /*
         * Bio splitting may cause subtle trouble such as hang when doing sync