提交 6dde2707 编写于 作者: D Dave Chinner 提交者: Ben Myers

xfs: add discontiguous buffer map interface

With the internal interfaces supporting discontiguous buffer maps,
add external lookup, read and get interfaces so they can start to be
used.
Signed-off-by: NDave Chinner <dchinner@redhat.com>
Reviewed-by: NChristoph Hellwig <hch@lst.de>
Signed-off-by: NBen Myers <bpm@sgi.com>
上级 3e85c868
...@@ -581,22 +581,21 @@ _xfs_buf_find( ...@@ -581,22 +581,21 @@ _xfs_buf_find(
* more hits than misses. * more hits than misses.
*/ */
struct xfs_buf * struct xfs_buf *
xfs_buf_get( xfs_buf_get_map(
xfs_buftarg_t *target, struct xfs_buftarg *target,
xfs_daddr_t blkno, struct xfs_buf_map *map,
size_t numblks, int nmaps,
xfs_buf_flags_t flags) xfs_buf_flags_t flags)
{ {
struct xfs_buf *bp; struct xfs_buf *bp;
struct xfs_buf *new_bp; struct xfs_buf *new_bp;
int error = 0; int error = 0;
DEFINE_SINGLE_BUF_MAP(map, blkno, numblks);
bp = _xfs_buf_find(target, &map, 1, flags, NULL); bp = _xfs_buf_find(target, map, nmaps, flags, NULL);
if (likely(bp)) if (likely(bp))
goto found; goto found;
new_bp = _xfs_buf_alloc(target, &map, 1, flags); new_bp = _xfs_buf_alloc(target, map, nmaps, flags);
if (unlikely(!new_bp)) if (unlikely(!new_bp))
return NULL; return NULL;
...@@ -606,7 +605,7 @@ xfs_buf_get( ...@@ -606,7 +605,7 @@ xfs_buf_get(
return NULL; return NULL;
} }
bp = _xfs_buf_find(target, &map, 1, flags, new_bp); bp = _xfs_buf_find(target, map, nmaps, flags, new_bp);
if (!bp) { if (!bp) {
xfs_buf_free(new_bp); xfs_buf_free(new_bp);
return NULL; return NULL;
...@@ -649,17 +648,17 @@ _xfs_buf_read( ...@@ -649,17 +648,17 @@ _xfs_buf_read(
} }
xfs_buf_t * xfs_buf_t *
xfs_buf_read( xfs_buf_read_map(
xfs_buftarg_t *target, struct xfs_buftarg *target,
xfs_daddr_t blkno, struct xfs_buf_map *map,
size_t numblks, int nmaps,
xfs_buf_flags_t flags) xfs_buf_flags_t flags)
{ {
xfs_buf_t *bp; struct xfs_buf *bp;
flags |= XBF_READ; flags |= XBF_READ;
bp = xfs_buf_get(target, blkno, numblks, flags); bp = xfs_buf_get_map(target, map, nmaps, flags);
if (bp) { if (bp) {
trace_xfs_buf_read(bp, flags, _RET_IP_); trace_xfs_buf_read(bp, flags, _RET_IP_);
...@@ -687,15 +686,15 @@ xfs_buf_read( ...@@ -687,15 +686,15 @@ xfs_buf_read(
* safe manner. * safe manner.
*/ */
void void
xfs_buf_readahead( xfs_buf_readahead_map(
xfs_buftarg_t *target, struct xfs_buftarg *target,
xfs_daddr_t blkno, struct xfs_buf_map *map,
size_t numblks) int nmaps)
{ {
if (bdi_read_congested(target->bt_bdi)) if (bdi_read_congested(target->bt_bdi))
return; return;
xfs_buf_read(target, blkno, numblks, xfs_buf_read_map(target, map, nmaps,
XBF_TRYLOCK|XBF_ASYNC|XBF_READ_AHEAD); XBF_TRYLOCK|XBF_ASYNC|XBF_READ_AHEAD);
} }
......
...@@ -184,12 +184,46 @@ xfs_buf_alloc( ...@@ -184,12 +184,46 @@ xfs_buf_alloc(
return _xfs_buf_alloc(target, &map, 1, flags); return _xfs_buf_alloc(target, &map, 1, flags);
} }
struct xfs_buf *xfs_buf_get(struct xfs_buftarg *target, xfs_daddr_t blkno, struct xfs_buf *xfs_buf_get_map(struct xfs_buftarg *target,
size_t numblks, xfs_buf_flags_t flags); struct xfs_buf_map *map, int nmaps,
struct xfs_buf *xfs_buf_read(struct xfs_buftarg *target, xfs_daddr_t blkno, xfs_buf_flags_t flags);
size_t numblks, xfs_buf_flags_t flags); struct xfs_buf *xfs_buf_read_map(struct xfs_buftarg *target,
void xfs_buf_readahead(struct xfs_buftarg *target, xfs_daddr_t blkno, struct xfs_buf_map *map, int nmaps,
size_t numblks); xfs_buf_flags_t flags);
void xfs_buf_readahead_map(struct xfs_buftarg *target,
struct xfs_buf_map *map, int nmaps);
static inline struct xfs_buf *
xfs_buf_get(
struct xfs_buftarg *target,
xfs_daddr_t blkno,
size_t numblks,
xfs_buf_flags_t flags)
{
DEFINE_SINGLE_BUF_MAP(map, blkno, numblks);
return xfs_buf_get_map(target, &map, 1, flags);
}
static inline struct xfs_buf *
xfs_buf_read(
struct xfs_buftarg *target,
xfs_daddr_t blkno,
size_t numblks,
xfs_buf_flags_t flags)
{
DEFINE_SINGLE_BUF_MAP(map, blkno, numblks);
return xfs_buf_read_map(target, &map, 1, flags);
}
static inline void
xfs_buf_readahead(
struct xfs_buftarg *target,
xfs_daddr_t blkno,
size_t numblks)
{
DEFINE_SINGLE_BUF_MAP(map, blkno, numblks);
return xfs_buf_readahead_map(target, &map, 1);
}
struct xfs_buf *xfs_buf_get_empty(struct xfs_buftarg *target, size_t numblks); struct xfs_buf *xfs_buf_get_empty(struct xfs_buftarg *target, size_t numblks);
void xfs_buf_set_empty(struct xfs_buf *bp, size_t numblks); void xfs_buf_set_empty(struct xfs_buf *bp, size_t numblks);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册