From: "Darrick J. Wong" <darrick.wong@oracle.com>
To: Christoph Hellwig <hch@infradead.org>
Cc: linux-xfs@vger.kernel.org
Subject: Re: [PATCH 10/10] xfs: cache unlinked pointers in an rhashtable
Date: Mon, 4 Feb 2019 17:02:43 -0800 [thread overview]
Message-ID: <20190205010242.GG7991@magnolia> (raw)
In-Reply-To: <20190204210848.GI30334@infradead.org>
On Mon, Feb 04, 2019 at 01:08:48PM -0800, Christoph Hellwig wrote:
> > +int xfs_iunlink_init(struct xfs_perag *pag);
> > +void xfs_iunlink_destroy(struct xfs_perag *pag);
> > +xfs_agino_t xfs_iunlink_lookup_backref(struct xfs_perag *pag,
> > + xfs_agino_t agino);
> > +int xfs_iunlink_add_backref(struct xfs_perag *pag, xfs_agino_t prev_agino,
> > + xfs_agino_t this_agino);
> > +int xfs_iunlink_change_backref(struct xfs_perag *pag, xfs_agino_t prev_agino,
> > + xfs_agino_t this_agino);
>
> xfs_iunlink_lookup_backref and xfs_iunlink_change_backref aren't
> used outside of xfs_inode.c and should be marked static.
Fixed.
> > + /*
> > + * Make sure the in-core data knows about this unlinked inode. Since
> > + * our iunlinks recovery basically just deletes the head of a bucket
> > + * list until the bucket is empty, we need only to add the backref from
> > + * the current list item to the next one, if this isn't the list tail.
> > + */
> > pag = xfs_perag_get(mp, agno);
> > pag->pagi_unlinked_count++;
> > + if (agino != NULLAGINO)
> > + error = xfs_iunlink_add_backref(pag, XFS_INO_TO_AGINO(mp, ino),
> > + agino);
> > xfs_perag_put(pag);
> > + if (error)
> > + goto fail_iput;
>
> Note that the previos agino that we recaculate above is actually passed
> to the function as an argument. I think we should just add a new
> next_agino variable for the one we read from the dinode and return and
> reuse the argument here instead of recaculating it.
Ok, I'll change the variable names.
> Question: what lock now protects the rhastable modifications? Maybe
> we need to add some lockdep asserts to document that.
Callers are expected to hold the AGI buffer lock to serialize accesses
to the incore unlinked data. That includes pagi_unlinked_count and
the new rhashtable.
--D
next prev parent reply other threads:[~2019-02-05 1:02 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-02-04 17:58 [PATCH v2 00/10] xfs: incore unlinked list Darrick J. Wong
2019-02-04 17:59 ` [PATCH 01/10] xfs: clean up iunlink functions Darrick J. Wong
2019-02-04 19:24 ` Brian Foster
2019-02-04 20:51 ` Christoph Hellwig
2019-02-04 17:59 ` [PATCH 02/10] xfs: track unlinked inode counts in per-ag data Darrick J. Wong
2019-02-04 19:24 ` Brian Foster
2019-02-04 20:53 ` Christoph Hellwig
2019-02-05 0:26 ` Darrick J. Wong
2019-02-05 6:55 ` Christoph Hellwig
2019-02-05 7:07 ` Darrick J. Wong
2019-02-05 0:42 ` Darrick J. Wong
2019-02-04 17:59 ` [PATCH 03/10] xfs: add xfs_verify_agino_or_null helper Darrick J. Wong
2019-02-04 19:24 ` Brian Foster
2019-02-04 20:53 ` Christoph Hellwig
2019-02-04 17:59 ` [PATCH 04/10] xfs: refactor AGI unlinked bucket updates Darrick J. Wong
2019-02-04 19:25 ` Brian Foster
2019-02-04 20:54 ` Christoph Hellwig
2019-02-04 17:59 ` [PATCH 05/10] xfs: strengthen AGI unlinked inode bucket pointer checks Darrick J. Wong
2019-02-04 17:59 ` [PATCH 06/10] xfs: refactor inode unlinked pointer update functions Darrick J. Wong
2019-02-04 20:56 ` Christoph Hellwig
2019-02-04 21:49 ` Darrick J. Wong
2019-02-05 14:23 ` Brian Foster
2019-02-04 17:59 ` [PATCH 07/10] xfs: refactor unlinked list search and mapping to a separate function Darrick J. Wong
2019-02-04 20:58 ` Christoph Hellwig
2019-02-04 22:23 ` Darrick J. Wong
2019-02-04 17:59 ` [PATCH 08/10] xfs: refactor inode update in iunlink_remove Darrick J. Wong
2019-02-04 20:58 ` Christoph Hellwig
2019-02-05 14:23 ` Brian Foster
2019-02-04 17:59 ` [PATCH 09/10] xfs: add tracepoints for high level iunlink operations Darrick J. Wong
2019-02-04 20:59 ` Christoph Hellwig
2019-02-05 14:24 ` Brian Foster
2019-02-04 18:00 ` [PATCH 10/10] xfs: cache unlinked pointers in an rhashtable Darrick J. Wong
2019-02-04 21:08 ` Christoph Hellwig
2019-02-05 1:02 ` Darrick J. Wong [this message]
2019-02-05 14:24 ` Brian Foster
2019-02-05 17:53 ` Darrick J. Wong
2019-02-05 17:57 ` Christoph Hellwig
2019-02-05 18:17 ` Darrick J. Wong
2019-02-05 19:06 ` Brian Foster
2019-02-05 19:20 ` Darrick J. Wong
2019-02-05 20:59 ` Dave Chinner
2019-02-06 18:25 ` Darrick J. Wong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190205010242.GG7991@magnolia \
--to=darrick.wong@oracle.com \
--cc=hch@infradead.org \
--cc=linux-xfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.