Re: Resend: [PATCH] blkdev: fix blkdev_issue_zeroout return value

Jens Axboe
2010-08-06T10:56:17Z

On 2010-08-06 12:42, Dmitry Monakhov wrote:
> Hi Jens,
> Seems that my first mail was missed somewhere.
> I've found couple of trivial issues in blkdev_issue_zeroout()
> implementation. Unfortunately I've miss during initial testing phase
> because always called it with BARRIER|WAIT flags.

BTW, this:

@@ -218,15 +222,18 @@ submit:
/* One of bios in the batch was completed with error.*/
ret = -EIO;

- if (ret)
+ if (ret && ret != -ENOMEM)
goto out;

if (test_bit(BIO_EOPNOTSUPP, &bb.flags)) {
ret = -EOPNOTSUPP;
goto out;
}
- if (nr_sects != 0)
+ if (nr_sects != 0) {
+ if (ret == -ENOMEM)
+ io_schedule();
goto submit;
+ }
out:
return ret;
}

is broken. Either the caller sets __GFP_WAIT and then bio_alloc() will
not fail, or GFP_ATOMIC is used knowing that the call can fail and
return ENOMEM. Don't code in retry logic like this.

--
Jens Axboe