Re: [PATCH 13/25] xfs: factor dir2 block read operations

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

 



On Thu, Oct 25, 2012 at 05:34:02PM +1100, Dave Chinner wrote:
> +static void
> +xfs_dir2_block_need_space(
> ...
> +	/*
> +	 * If there are stale entries we'll use one for the leaf.
> +	 */
> +	if (btp->stale) {
> +		if (be16_to_cpu(bf[0].length) >= len) {
> +			/*
> +			 * The biggest entry enough to avoid compaction.
> +			 */
> +			dup = (xfs_dir2_data_unused_t *)
> +			      ((char *)hdr + be16_to_cpu(bf[0].offset));
> +			goto out;
> +		}
> +
> +		/*
> +		 * Will need to compact to make this work.
> +		 * Tag just before the first leaf entry.
> +		 */
> +		*compact = 1;
> +		tagp = (__be16 *)blp - 1;
> +
> +		/* Data object just before the first leaf entry.  */
> +		dup = (xfs_dir2_data_unused_t *)((char *)hdr + be16_to_cpu(*tagp));
> +
> +		/*
> +		 * If it's not free then the data will go where the
> +		 * leaf data starts now, if it works at all.
> +		 */
> +		if (be16_to_cpu(dup->freetag) == XFS_DIR2_DATA_FREE_TAG) {
> +			if (be16_to_cpu(dup->length) + (be32_to_cpu(btp->stale) - 1) *
> +			    (uint)sizeof(*blp) < len)
> +				dup = NULL;
> +		} else if ((be32_to_cpu(btp->stale) - 1) * (uint)sizeof(*blp) < len)
> +			dup = NULL;
> +		else
> +			dup = (xfs_dir2_data_unused_t *)blp;
> +		goto out;
> +	}
> +
> +	/*
> +	 * no stale entries, so just use free space.
> +	 * Tag just before the first leaf entry.
> +	 */
> +	tagp = (__be16 *)blp - 1;

Shouldn't tagp just be set before this if statement rather than inside of it
and outside of it?  In both cases it's equated to blp-1 and the value of blp
doesn't change to the best of my knowledge, so it's confusing to have two
assignments.

-Phil

_______________________________________________
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