On Mon, Apr 09, 2018 at 01:26:50AM -0700, Christoph Hellwig wrote:
> On Mon, Apr 09, 2018 at 08:53:49AM +0200, Hannes Reinecke wrote:
> > Why don't you fold the 'flags' argument into the 'gfp_flags', and drop
> > the 'flags' argument completely?
> > Looks a bit pointless to me, having two arguments denoting basically
> > the same ...
>
> Wrong way around. gfp_flags doesn't really make much sense in this
> context. We just want the plain flags argument, including a non-block
> flag for it.
Look at this sequence from scsi_ioctl.c:
if (bytes) {
buffer = kzalloc(bytes, q->bounce_gfp | GFP_USER| __GFP_NOWARN);
if (!buffer)
return -ENOMEM;
}
rq = blk_get_request(q, in_len ? REQ_OP_SCSI_OUT : REQ_OP_SCSI_IN,
__GFP_RECLAIM);
That makes no damn sense. If the buffer can be allocated using GFP_USER,
then the request should also be allocatable using GFP_USER. In the current
tree, that (wrongly) gets translated into __GFP_DIRECT_RECLAIM.