From: David Howells > Sent: 25 January 2023 21:46 > Add a helper function to read data from a socket into the given iterator. ... > +int > +cifs_read_iter_from_socket(struct TCP_Server_Info *server, struct iov_iter *iter, > + unsigned int to_read) > +{ > + struct msghdr smb_msg; > + int ret; > + > + smb_msg.msg_iter = *iter; > + if (smb_msg.msg_iter.count > to_read) > + smb_msg.msg_iter.count = to_read; > + ret = cifs_readv_from_socket(server, &smb_msg); > + if (ret > 0) > + iov_iter_advance(iter, ret); > + return ret; > +} On the face of it that passes a largely uninitialised 'struct msghdr' to cifs_readv_from_socket() in order to pass an iov_iter. That seems to be asking for trouble. I'm also not 100% sure that taking a copy of an iov_iter is a good idea. If cifs_readv_from_socket() only needs the iov_iter then wouldn't it be better to do the wrapper the other way around? (Probably as an inline function) Something like: int cifs_readv_from_socket(struct TCP_Server_Info *server, struct msghdr *smb_msg) { return cifs_read_iter_from_socket(server, &smb_msg->msg_iter, smb_msg->msg_iter.count); } and then changing cifs_readv_from_socket() to just use the iov_iter. David - Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales)