On Wed, Apr 26, 2017 at 12:11:33PM -0600, Logan Gunthorpe wrote:
Ok, well for starters I think you are mistaken about kmap being able
to
fail. I'm having a hard time finding many users of that function that
bother to check for an error when calling it.
A quick audit of the arch code shows you're right - kmap can't fail
anywhere anymore.
The main difficulty we
have now is that neither of those functions are expected to fail and we
need them to be able to in cases where the page doesn't map to system
RAM. This patch series is trying to address it for users of scatterlist.
I'm certainly open to other suggestions.
I think you'll need to follow the existing kmap semantics and never
fail the iomem version either. Otherwise you'll have a special case
that's almost never used that has a different error path.
There are a fair number of cases in the kernel that do something
like:
if (something)
x = kmap(page);
else
x = kmap_atomic(page);
...
if (something)
kunmap(page)
else
kunmap_atomic(x)
Which just seems cumbersome to me.
Passing a different flag based on something isn't really much better.
In any case, if you can accept an sg_kmap and sg_kmap_atomic api
just
say so and I'll make the change. But I'll still need a flags variable
for SG_MAP_MUST_NOT_FAIL to support legacy cases that have no fail path
and both of those functions will need to be pretty nearly replicas of
each other.
Again, wrong way. Suddenly making things fail for your special case
that normally don't fail is a receipe for bugs.