[PATCH v2 14/22] staging/rdma/hfi1: Implement Expected Receive TID caching

Dan Carpenter dan.carpenter at oracle.com
Fri Oct 23 03:53:37 UTC 2015


On Thu, Oct 22, 2015 at 07:18:19PM -0400, ira.weiny wrote:
> This follows the rest of the style of the case statement in this function.  We
> prefer to leave this as is for a number of reasons.
> 
> 1) This is consistent with the coding style elsewhere in this driver.

Don't try to match existing style if it is wrong.  If 99 lines are
consistent and 1 line is correct style then at least that's better than
no lines being correct.  I am worried that you will feel you have to do
this the wrong way forever for a silly reason...

> 2) It is functionally equivalent.

It is a style issue and I only complained about it because in the
next lines the bad style causes a bug.  If anyone finds this kind of
info leak in released code, then we always give them a CVE for it btw.
It's a headache.


> 3) I have a long list of patches which need to be processed and this may cause
>    later merge conflicts.
> 

Yes, that's fine.  I'm not insisting that you redo everything because of
a style issue.

Let me explain a little more why success handling is an anti-pattern.
Failure handling looks like this:

	ret = one();
	if (ret)
		return ret;
	ret = two();
	if (ret)
		goto undo_one;
	ret = three();
	if (ret)
		goto undo_two;

	return 0;

undo_two:
	undo_two();
undo_one:
	undo_one();
	return ret;

In this example the success path is always at indent level one.  The
code is a series of statements with no if conditions or indenting.  This
is how most kernel code looks.

With success handling it looks like:

	ret = one();
	if (!ret) {
		ret = two();
		if (!ret)
			ret = three();
	}
	return ret;

It is fewer lines but it is way more complicated.  It very quickly
starts to bump into the 80 character limit.

regards,
dan carpenter




More information about the devel mailing list