On 12/24/19 5:18 AM, Christoph Hellwig wrote:
On Wed, Dec 11, 2019 at 09:15:03PM -0700, Allison Collins wrote:
From: Allison Henderson <allison.henderson@xxxxxxxxxx>
This patch adds a new functions to check for the existence of
an attribute. Subroutines are also added to handle the cases
of leaf blocks, nodes or shortform. Common code that appears
in existing attr add and remove functions have been factored
out to help reduce the appearance of duplicated code. We will
need these routines later for delayed attributes since delayed
operations cannot return error codes.
Can you explain why we need the ahead of time check? The first
operation should be able to still return an error, and doing
a separate check instead of letting the actual operation fail
gracefully is more expensive, and also creates a lot of additional
code. As is I can't say I like the direction at all.
This one I can answer quickly: later when we get into delayed
attributes, this will get called from xfs_defer_finish_noroll as part of
a .finish_item call back. If these callbacks return anything other than
0 or -EAGAIN, it causes a shutdown. Which is not what we would want for
example: when the user tries to rename a non-existent attribute. The
error code needs to go back up. So we check for things like that before
starting a delayed operation. Hope that helps. Thanks!
Allison