xfs: support discontiguous buffers in the xfs_buf_log_item
authorDave Chinner <dchinner@redhat.com>
Fri, 22 Jun 2012 08:50:12 +0000 (18:50 +1000)
committerBen Myers <bpm@sgi.com>
Sun, 1 Jul 2012 19:50:06 +0000 (14:50 -0500)
commit372cc85ec6820c91b4eeff303880f25cb5a00ab5
treef35125a854ebc54c64d46c37fde9e91cc68ed991
parentde2a4f59190303ff5b82ead2969968a325e61230
xfs: support discontiguous buffers in the xfs_buf_log_item

discontigous buffer in separate buffer format structures. This means log
recovery will recover all the changes on a per segment basis without
requiring any knowledge of the fact that it was logged from a
compound buffer.

To do this, we need to be able to determine what buffer segment any
given offset into the compound buffer sits over. This enables us to
translate the dirty bitmap in the number of separate buffer format
structures required.

We also need to be able to determine the number of bitmap elements
that a given buffer segment has, as this determines the size of the
buffer format structure. Hence we need to be able to determine the
both the start offset into the buffer and the length of a given
segment to be able to calculate this.

With this information, we can preallocate, build and format the
correct log vector array for each segment in a compound buffer to
appear exactly the same as individually logged buffers in the log.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Ben Myers <bpm@sgi.com>
fs/xfs/xfs_buf_item.c
fs/xfs/xfs_buf_item.h