Subject: Re: linux-next: manual merge of the block tree with the vfs tree

From: Stephen Rothwell <[email-masked]>
Date: Wed, 22 Feb 2017 09:14:14 +1100

Hi all,

On Thu, 2 Feb 2017 13:44:07 +1100 Stephen Rothwell <[email-masked]> wrote:
>
> Today's linux-next merge of the block tree got a conflict in:
> 
>   drivers/block/nbd.c
> 
> between commit:
> 
>   c9f2b6aeb922 ("[nbd] pass iov_iter to nbd_xmit()")
> 
> from the vfs tree and commit:
> 
>   09fc54ccc427 ("nbd: move request validity checking into nbd_send_cmd")
>   aebf526b53ae ("block: fold cmd_type into the REQ_OP_ space")
> 
> from the block tree.
> 
> I fixed it up (see below) and can carry the fix as necessary. This
> is now fixed as far as linux-next is concerned, but any non trivial
> conflicts should be mentioned to your upstream maintainer when your tree
> is submitted for merging.  You may also want to consider cooperating
> with the maintainer of the conflicting tree to minimise any particularly
> complex conflicts.
> 
> -- 
> Cheers,
> Stephen Rothwell
> 
> diff --cc drivers/block/nbd.c
> index 48132b0530fe,0be84a3cb6d7..000000000000
> --- a/drivers/block/nbd.c
> +++ b/drivers/block/nbd.c
> @@@ -265,17 -275,32 +262,32 @@@ static int nbd_send_cmd(struct nbd_devi
>   	u32 type;
>   	u32 tag = blk_mq_unique_tag(req);
>   
>  +	iov_iter_kvec(&from, WRITE | ITER_KVEC, &iov, 1, sizeof(request));
>  +
> - 	if (req_op(req) == REQ_OP_DISCARD)
> + 	switch (req_op(req)) {
> + 	case REQ_OP_DISCARD:
>   		type = NBD_CMD_TRIM;
> - 	else if (req_op(req) == REQ_OP_FLUSH)
> + 		break;
> + 	case REQ_OP_FLUSH:
>   		type = NBD_CMD_FLUSH;
> - 	else if (rq_data_dir(req) == WRITE)
> + 		break;
> + 	case REQ_OP_WRITE:
>   		type = NBD_CMD_WRITE;
> - 	else
> + 		break;
> + 	case REQ_OP_READ:
>   		type = NBD_CMD_READ;
> + 		break;
> + 	default:
> + 		return -EIO;
> + 	}
> + 
> + 	if (rq_data_dir(req) == WRITE &&
> + 	    (nbd->flags & NBD_FLAG_READ_ONLY)) {
> + 		dev_err_ratelimited(disk_to_dev(nbd->disk),
> + 				    "Write on read-only\n");
> + 		return -EIO;
> + 	}
>   
>  -	memset(&request, 0, sizeof(request));
>  -	request.magic = htonl(NBD_REQUEST_MAGIC);
>   	request.type = htonl(type);
>   	if (type != NBD_CMD_FLUSH) {
>   		request.from = cpu_to_be64((u64)blk_rq_pos(req) << 9);

This is now a conflict between the vfs tree and Linus' tree.

-- 
Cheers,
Stephen Rothwell