On Fri, Jul 22, 2022 at 01:09:30PM +0800, Ming Lei wrote: > + unsigned long *map = (unsigned long *)&ub->dev_info.flags[0]; > + > + /* We are not ready to support zero copy */ > + ub->dev_info.flags[0] &= ~UBLK_F_SUPPORT_ZERO_COPY; > + > + /* > + * 128bit flags will be copied back to userspace as feature > + * negotiation result, so have to clear flags which driver > + * doesn't support yet, then userspace can get correct flags > + * (features) to handle. > + */ > + bitmap_clear(map, __UBLK_F_NR_BITS, 128 - __UBLK_F_NR_BITS); Please don't do the cast and bitmap ops. In fact I think the current ABI is rather nasty. To make everyones life easier just use a single u64 flags, an mark the second one reserved so that we can extent into it with extra flags or something else. That way normal C operator leve bitops just work. > +enum ublk_flag_bits { > + __UBLK_F_SUPPORT_ZERO_COPY, > + __UBLK_F_URING_CMD_COMP_IN_TASK, > + __UBLK_F_NR_BITS, > +}; Please make these #defines so that userspace can detect if they exist in a header using #ifdef.