RE: [PATCH 12/19] kernel: convert css_set.refcount from atomic_t to refcount_t

From: Reshetova, Elena
Date: Tue Mar 07 2017 - 14:19:23 EST


> Hello,
>
> On Mon, Feb 20, 2017 at 12:19:01PM +0200, Elena Reshetova wrote:
> > @@ -134,10 +135,13 @@ static inline void put_css_set(struct css_set *cset)
> > * can see it. Similar to atomic_dec_and_lock(), but for an
> > * rwlock
> > */
> > - if (atomic_add_unless(&cset->refcount, -1, 1))
> > + spin_lock_irqsave(&css_set_lock, flags);
> > + if (refcount_read(&cset->refcount) != 1) {
> > + WARN_ON(refcount_dec_and_test(&cset-
> >refcount));
> > + spin_unlock_irqrestore(&css_set_lock, flags);
> > return;
> > + }
>
> This isn't an equivalent conversion and should have been mentioned in
> the patch description. Hmm... and I'm not sure this is a good idea.
> Can't we add the matching operation on refcount_t rather than adding
> extra locking like this?

Oh, actually this is fault on our side: initially we didn't have a refcount_dec_not_one() interface and we had to be creative in converting cases like this, but now the interface is present, but we actually forgot to convert this particular case.
So, the above change should be:

- if (atomic_add_unless(&cset->refcount, -1, 1))
+ if (refcount_dec_not_one(&cset->refcount))


Do you want me to resend or could you modify the patch while applying?

Best Regards,
Elena.

>
> Thanks.
>
> --
> tejun