Re: [RFC PATCH 2/4] xfs: introduce a new helper xfs_inobt_lookup_grab_ichunk()

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

 



> Refactor xfs_bulkstat() to make use of the founction.

                                         ... function.

> +int
> +xfs_inobt_lookup_grab_ichunk(
> +	struct xfs_btree_cur		*cur,	/* btree cursor */
> +	xfs_agino_t			agino,	/* starting inode of chunk */
> +	struct xfs_inobt_rec_incore	*irec,	/* btree record */
> +	int				*stat)	/* success/failure */
> +{
> +	int				idx;	/* Index into inode chunk */
> +	int				error;
> +
> +	/* Lookup the inode chunk that this inode lives in */
> +	error = xfs_inobt_lookup(cur, agino, XFS_LOOKUP_LE, stat);
> +	if (error || !*stat)
> +		return error;
> +
> +	/* Get the record, should always work */
> +	error = xfs_inobt_get_rec(cur, irec, stat);
> +	ASSERT(!error && *stat);

If it wails it's a corruption error, so this shouldn't be an assert,
but rather an XFS_WANT_CORRUPTED_GOTO/RETURN

> +	if (error || !*stat)
> +		return error;
> +
> +	*stat = 0;

Btw, I don't think we need to pass around the status pointer here,
the caller doesn't care about the internal lookup status, just if
we succeeded or failed.

> +	if (irec->ir_startino + XFS_INODES_PER_CHUNK <= agino)
> +		return error;

error will usually be zero here, shouldn't we return a real error?

> +	idx = agino - irec->ir_startino + 1;
> +	/*
> +	 * We got a right chunk and there are some left inodes allocated at it.
> +	 */
> +	if (idx < XFS_INODES_PER_CHUNK &&
> +	    (xfs_inobt_maskn(idx, XFS_INODES_PER_CHUNK - idx) & ~irec->ir_free)) {
> +		int	i;
> +
> +		/*
> +		 * Grab the chunk record.  Mark all the uninteresting inodes free
> +		 * (because they're before our start point).
> +		 */
> +		for (i = 0; i < idx; i++) {
> +			if (XFS_INOBT_MASK(i) & ~irec->ir_free)
> +				irec->ir_freecount++;
> +		}
> +
> +		irec->ir_free |= xfs_inobt_maskn(0, idx);
> +		*stat = 1;
> +	}


At this point the function is so bulkstate specific that it should stay
in xfs_itable.c and have a name more like xfs_bulkstate_grab_ichunk.

I still like factoring it out though, thanks for the work!

_______________________________________________
xfs mailing list
xfs@xxxxxxxxxxx
http://oss.sgi.com/mailman/listinfo/xfs




[Index of Archives]     [Linux XFS Devel]     [Linux Filesystem Development]     [Filesystem Testing]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux