[Top] [All Lists]

Adding attr, inode reference query

To: "xfs@xxxxxxxxxxx" <xfs@xxxxxxxxxxx>, xfs-dev <xfs-dev@xxxxxxx>
Subject: Adding attr, inode reference query
From: "Barry Naujok" <bnaujok@xxxxxxx>
Date: Tue, 07 Oct 2008 11:04:32 +1100
Organization: SGI
User-agent: Opera Mail/9.52 (Win32)
I'm doing a bit of debugging with attr creation in xfs_repair which uses
libxfs which has it's own simple cache/ref counting/transaction mechanism
for inodes and buffers.

I came across a refcounting issue when adding an extended attribute to an
inode, calling xfs_attr_set_int (indirectly in Phase 6):
  - if there are no extended attributes, a attr fork area is created within
    the inode (calling xfs_bmap_add_attrfork). After this call in libxfs,
    the inode is derefenced.
  - if extended attributes already exist, the inode isn't dereferenced
    after calling xfs_attr_set_int.

I seem to have traced this down to xfs_bmap_add_attrfork not calling
xfs_trans_ihold after calling xfs_trans_ijoin like other similar functions.
BUT, it does call IHOLD(ip).

It seems most other routines do call xfs_trans_ihold, esp in the attr code.

Also, it seems IHOLD isn't normally called in these routine in the
core XFS code.

Is this a bug in xfs_bmap_add_attrfork?

<Prev in Thread] Current Thread [Next in Thread>