> + if (!vec) > + ret = blk_rq_map_user(q, req, NULL, ubuffer, bufflen, > + GFP_KERNEL); > + else { > + struct iovec fast_iov[UIO_FASTIOV]; > + struct iovec *iov = fast_iov; > + struct iov_iter iter; > + > + ret = import_iovec(rq_data_dir(req), ubuffer, bufflen, > + UIO_FASTIOV, &iov, &iter); > + if (ret < 0) > goto out; > + > + ret = blk_rq_map_user_iov(q, req, NULL, &iter, GFP_KERNEL); > + kfree(iov); > + } As mentioned before this is something that should got into blk-map.c as a separate helper, and scsi_ioctl.c and sg.c should be switched to use it as well. Otherwise this looks good.