Re: [PATCH v5 07/14] xfs: Factor out xfs_attr_leaf_addname helper

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 12/24/19 5:22 AM, Christoph Hellwig wrote:
On Wed, Dec 11, 2019 at 09:15:06PM -0700, Allison Collins wrote:
Factor out new helper function xfs_attr_leaf_try_add.
Because new delayed attribute routines cannot roll
transactions, we carve off the parts of
xfs_attr_leaf_addname that we can use.  This will help
to reduce repetitive code later when we introduce
delayed attributes.

I have a hard time relating the subject to what is happening here,
maybe because the patch does too many things at once.  One thing
is plitting a xfs_attr_leaf_try_add from xfs_attr_leaf_addname, which
seems pretty sensible, but then it also moves code from
xfs_attr_node_addname into the only caller.  That probably should be
a separate patch with a proper description.

Sure, maybe it might help to look at it this way though: the goal of all this refactoring is to get all the transactions up into the xfs_attr_*_args routines. Once we have them pretty much corralled, we replace them with a sort of state machine like mechanic. This produces the "return EAGAIN for new a transaction" behavior that we need for the .finish_item callback.

In this case, xfs_attr_leaf_addname is a subroutine with a transaction in the middle. So we split it into two functions. Kind of like a top half and bottom half, and then the transaction moves up. While I can separate the split and the move into separate patches, it didnt really feel to me like the transaction or the node logic really fit with either of the helpers. They are supposed to be about leaves, not nodes. It's not a big deal I suppose to split up the patches, but I thought doing so creates a sort of transient patch with functions that have logic not particularly appropriate for their scope. Thoughts?

Also, perhaps I need to remove the line in the commit header about reducing repetitive code. It might be misleading you (apologies). This is left over from an earlier version of the series where I tried to avoid "monster function" by having two code paths: one for inline attrs and a separate one for delayed attrs. It generated a lot of repetitive code with subtle differences though, and i think folks preferred the code paths to stay merged. The goal being to first establish what "monster function" even looks like, and then simplify it into new helpers from there.

This is admittedly a very difficult series to review. People need to understand patches 1 - 12 to really understand what 13 and 14 are doing. But really, 13 and 14 are kind of driving the rest of the series. Like literally an entire patch fell out of the last set because of some changes we made in the end of the series. I know 13 and 14 are the hardest to look at, but they very much dictate what the lower patches end up doing. So I encourage people to try and focus attention there before loosing to much sanity on scaffolding. Certainty it all needs to get reviewed of course, but it may help to make more efficient use of peoples review time. :-)

Hope that helps!  Thanks for looking at it!
Allison



[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux