On Wed, Jun 09, 2021 at 01:55:22PM +0300, Leon Romanovsky wrote: > On Tue, Jun 08, 2021 at 05:09:35PM -0300, Jason Gunthorpe wrote: > > On Tue, Jun 08, 2021 at 08:12:24AM +0300, Leon Romanovsky wrote: > > > @@ -3198,6 +3199,13 @@ static int ib_uverbs_ex_create_flow(struct uverbs_attr_bundle *attrs) > > > if (err) > > > return err; > > > > > > + ucontext = ib_uverbs_get_ucontext(attrs); > > > + if (IS_ERR(ucontext)) > > > + return PTR_ERR(ucontext); > > > > ib_uverbs_get_ucontext() should only be used by methods that don't > > have a uboject, this one does so it should be using uobj->context > > instead > > Why "should"? > At the end, we will get same ucontext. The locking methodologies are different, they are not guarenteed to be exactly the same, but once the uobj is obtained then the related ucontext is fixed. > > It looks like this can be moved down to after the uobject is allocated > > The idea is to fail early, before first kmalloc and uobj_alloc, so we won't need > to do any error unwinding. The error handling is needed anyhow.. Jason