linux/fs/xfs/xfs_buf.c
<<
>>
Prefs
   1/*
   2 * Copyright (c) 2000-2006 Silicon Graphics, Inc.
   3 * All Rights Reserved.
   4 *
   5 * This program is free software; you can redistribute it and/or
   6 * modify it under the terms of the GNU General Public License as
   7 * published by the Free Software Foundation.
   8 *
   9 * This program is distributed in the hope that it would be useful,
  10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12 * GNU General Public License for more details.
  13 *
  14 * You should have received a copy of the GNU General Public License
  15 * along with this program; if not, write the Free Software Foundation,
  16 * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  17 */
  18#include "xfs.h"
  19#include <linux/stddef.h>
  20#include <linux/errno.h>
  21#include <linux/gfp.h>
  22#include <linux/pagemap.h>
  23#include <linux/init.h>
  24#include <linux/vmalloc.h>
  25#include <linux/bio.h>
  26#include <linux/sysctl.h>
  27#include <linux/proc_fs.h>
  28#include <linux/workqueue.h>
  29#include <linux/percpu.h>
  30#include <linux/blkdev.h>
  31#include <linux/hash.h>
  32#include <linux/kthread.h>
  33#include <linux/migrate.h>
  34#include <linux/backing-dev.h>
  35#include <linux/freezer.h>
  36
  37#include "xfs_sb.h"
  38#include "xfs_trans_resv.h"
  39#include "xfs_log.h"
  40#include "xfs_ag.h"
  41#include "xfs_mount.h"
  42#include "xfs_trace.h"
  43
  44static kmem_zone_t *xfs_buf_zone;
  45
  46static struct workqueue_struct *xfslogd_workqueue;
  47
  48#ifdef XFS_BUF_LOCK_TRACKING
  49# define XB_SET_OWNER(bp)       ((bp)->b_last_holder = current->pid)
  50# define XB_CLEAR_OWNER(bp)     ((bp)->b_last_holder = -1)
  51# define XB_GET_OWNER(bp)       ((bp)->b_last_holder)
  52#else
  53# define XB_SET_OWNER(bp)       do { } while (0)
  54# define XB_CLEAR_OWNER(bp)     do { } while (0)
  55# define XB_GET_OWNER(bp)       do { } while (0)
  56#endif
  57
  58#define xb_to_gfp(flags) \
  59        ((((flags) & XBF_READ_AHEAD) ? __GFP_NORETRY : GFP_NOFS) | __GFP_NOWARN)
  60
  61
  62static inline int
  63xfs_buf_is_vmapped(
  64        struct xfs_buf  *bp)
  65{
  66        /*
  67         * Return true if the buffer is vmapped.
  68         *
  69         * b_addr is null if the buffer is not mapped, but the code is clever
  70         * enough to know it doesn't have to map a single page, so the check has
  71         * to be both for b_addr and bp->b_page_count > 1.
  72         */
  73        return bp->b_addr && bp->b_page_count > 1;
  74}
  75
  76static inline int
  77xfs_buf_vmap_len(
  78        struct xfs_buf  *bp)
  79{
  80        return (bp->b_page_count * PAGE_SIZE) - bp->b_offset;
  81}
  82
  83/*
  84 * When we mark a buffer stale, we remove the buffer from the LRU and clear the
  85 * b_lru_ref count so that the buffer is freed immediately when the buffer
  86 * reference count falls to zero. If the buffer is already on the LRU, we need
  87 * to remove the reference that LRU holds on the buffer.
  88 *
  89 * This prevents build-up of stale buffers on the LRU.
  90 */
  91void
  92xfs_buf_stale(
  93        struct xfs_buf  *bp)
  94{
  95        ASSERT(xfs_buf_islocked(bp));
  96
  97        bp->b_flags |= XBF_STALE;
  98
  99        /*
 100         * Clear the delwri status so that a delwri queue walker will not
 101         * flush this buffer to disk now that it is stale. The delwri queue has
 102         * a reference to the buffer, so this is safe to do.
 103         */
 104        bp->b_flags &= ~_XBF_DELWRI_Q;
 105
 106        spin_lock(&bp->b_lock);
 107        atomic_set(&bp->b_lru_ref, 0);
 108        if (!(bp->b_state & XFS_BSTATE_DISPOSE) &&
 109            (list_lru_del(&bp->b_target->bt_lru, &bp->b_lru)))
 110                atomic_dec(&bp->b_hold);
 111
 112        ASSERT(atomic_read(&bp->b_hold) >= 1);
 113        spin_unlock(&bp->b_lock);
 114}
 115
 116static int
 117xfs_buf_get_maps(
 118        struct xfs_buf          *bp,
 119        int                     map_count)
 120{
 121        ASSERT(bp->b_maps == NULL);
 122        bp->b_map_count = map_count;
 123
 124        if (map_count == 1) {
 125                bp->b_maps = &bp->__b_map;
 126                return 0;
 127        }
 128
 129        bp->b_maps = kmem_zalloc(map_count * sizeof(struct xfs_buf_map),
 130                                KM_NOFS);
 131        if (!bp->b_maps)
 132                return ENOMEM;
 133        return 0;
 134}
 135
 136/*
 137 *      Frees b_pages if it was allocated.
 138 */
 139static void
 140xfs_buf_free_maps(
 141        struct xfs_buf  *bp)
 142{
 143        if (bp->b_maps != &bp->__b_map) {
 144                kmem_free(bp->b_maps);
 145                bp->b_maps = NULL;
 146        }
 147}
 148
 149struct xfs_buf *
 150_xfs_buf_alloc(
 151        struct xfs_buftarg      *target,
 152        struct xfs_buf_map      *map,
 153        int                     nmaps,
 154        xfs_buf_flags_t         flags)
 155{
 156        struct xfs_buf          *bp;
 157        int                     error;
 158        int                     i;
 159
 160        bp = kmem_zone_zalloc(xfs_buf_zone, KM_NOFS);
 161        if (unlikely(!bp))
 162                return NULL;
 163
 164        /*
 165         * We don't want certain flags to appear in b_flags unless they are
 166         * specifically set by later operations on the buffer.
 167         */
 168        flags &= ~(XBF_UNMAPPED | XBF_TRYLOCK | XBF_ASYNC | XBF_READ_AHEAD);
 169
 170        atomic_set(&bp->b_hold, 1);
 171        atomic_set(&bp->b_lru_ref, 1);
 172        init_completion(&bp->b_iowait);
 173        INIT_LIST_HEAD(&bp->b_lru);
 174        INIT_LIST_HEAD(&bp->b_list);
 175        RB_CLEAR_NODE(&bp->b_rbnode);
 176        sema_init(&bp->b_sema, 0); /* held, no waiters */
 177        spin_lock_init(&bp->b_lock);
 178        XB_SET_OWNER(bp);
 179        bp->b_target = target;
 180        bp->b_flags = flags;
 181
 182        /*
 183         * Set length and io_length to the same value initially.
 184         * I/O routines should use io_length, which will be the same in
 185         * most cases but may be reset (e.g. XFS recovery).
 186         */
 187        error = xfs_buf_get_maps(bp, nmaps);
 188        if (error)  {
 189                kmem_zone_free(xfs_buf_zone, bp);
 190                return NULL;
 191        }
 192
 193        bp->b_bn = map[0].bm_bn;
 194        bp->b_length = 0;
 195        for (i = 0; i < nmaps; i++) {
 196                bp->b_maps[i].bm_bn = map[i].bm_bn;
 197                bp->b_maps[i].bm_len = map[i].bm_len;
 198                bp->b_length += map[i].bm_len;
 199        }
 200        bp->b_io_length = bp->b_length;
 201
 202        atomic_set(&bp->b_pin_count, 0);
 203        init_waitqueue_head(&bp->b_waiters);
 204
 205        XFS_STATS_INC(xb_create);
 206        trace_xfs_buf_init(bp, _RET_IP_);
 207
 208        return bp;
 209}
 210
 211/*
 212 *      Allocate a page array capable of holding a specified number
 213 *      of pages, and point the page buf at it.
 214 */
 215STATIC int
 216_xfs_buf_get_pages(
 217        xfs_buf_t               *bp,
 218        int                     page_count,
 219        xfs_buf_flags_t         flags)
 220{
 221        /* Make sure that we have a page list */
 222        if (bp->b_pages == NULL) {
 223                bp->b_page_count = page_count;
 224                if (page_count <= XB_PAGES) {
 225                        bp->b_pages = bp->b_page_array;
 226                } else {
 227                        bp->b_pages = kmem_alloc(sizeof(struct page *) *
 228                                                 page_count, KM_NOFS);
 229                        if (bp->b_pages == NULL)
 230                                return -ENOMEM;
 231                }
 232                memset(bp->b_pages, 0, sizeof(struct page *) * page_count);
 233        }
 234        return 0;
 235}
 236
 237/*
 238 *      Frees b_pages if it was allocated.
 239 */
 240STATIC void
 241_xfs_buf_free_pages(
 242        xfs_buf_t       *bp)
 243{
 244        if (bp->b_pages != bp->b_page_array) {
 245                kmem_free(bp->b_pages);
 246                bp->b_pages = NULL;
 247        }
 248}
 249
 250/*
 251 *      Releases the specified buffer.
 252 *
 253 *      The modification state of any associated pages is left unchanged.
 254 *      The buffer must not be on any hash - use xfs_buf_rele instead for
 255 *      hashed and refcounted buffers
 256 */
 257void
 258xfs_buf_free(
 259        xfs_buf_t               *bp)
 260{
 261        trace_xfs_buf_free(bp, _RET_IP_);
 262
 263        ASSERT(list_empty(&bp->b_lru));
 264
 265        if (bp->b_flags & _XBF_PAGES) {
 266                uint            i;
 267
 268                if (xfs_buf_is_vmapped(bp))
 269                        vm_unmap_ram(bp->b_addr - bp->b_offset,
 270                                        bp->b_page_count);
 271
 272                for (i = 0; i < bp->b_page_count; i++) {
 273                        struct page     *page = bp->b_pages[i];
 274
 275                        __free_page(page);
 276                }
 277        } else if (bp->b_flags & _XBF_KMEM)
 278                kmem_free(bp->b_addr);
 279        _xfs_buf_free_pages(bp);
 280        xfs_buf_free_maps(bp);
 281        kmem_zone_free(xfs_buf_zone, bp);
 282}
 283
 284/*
 285 * Allocates all the pages for buffer in question and builds it's page list.
 286 */
 287STATIC int
 288xfs_buf_allocate_memory(
 289        xfs_buf_t               *bp,
 290        uint                    flags)
 291{
 292        size_t                  size;
 293        size_t                  nbytes, offset;
 294        gfp_t                   gfp_mask = xb_to_gfp(flags);
 295        unsigned short          page_count, i;
 296        xfs_off_t               start, end;
 297        int                     error;
 298
 299        /*
 300         * for buffers that are contained within a single page, just allocate
 301         * the memory from the heap - there's no need for the complexity of
 302         * page arrays to keep allocation down to order 0.
 303         */
 304        size = BBTOB(bp->b_length);
 305        if (size < PAGE_SIZE) {
 306                bp->b_addr = kmem_alloc(size, KM_NOFS);
 307                if (!bp->b_addr) {
 308                        /* low memory - use alloc_page loop instead */
 309                        goto use_alloc_page;
 310                }
 311
 312                if (((unsigned long)(bp->b_addr + size - 1) & PAGE_MASK) !=
 313                    ((unsigned long)bp->b_addr & PAGE_MASK)) {
 314                        /* b_addr spans two pages - use alloc_page instead */
 315                        kmem_free(bp->b_addr);
 316                        bp->b_addr = NULL;
 317                        goto use_alloc_page;
 318                }
 319                bp->b_offset = offset_in_page(bp->b_addr);
 320                bp->b_pages = bp->b_page_array;
 321                bp->b_pages[0] = virt_to_page(bp->b_addr);
 322                bp->b_page_count = 1;
 323                bp->b_flags |= _XBF_KMEM;
 324                return 0;
 325        }
 326
 327use_alloc_page:
 328        start = BBTOB(bp->b_maps[0].bm_bn) >> PAGE_SHIFT;
 329        end = (BBTOB(bp->b_maps[0].bm_bn + bp->b_length) + PAGE_SIZE - 1)
 330                                                                >> PAGE_SHIFT;
 331        page_count = end - start;
 332        error = _xfs_buf_get_pages(bp, page_count, flags);
 333        if (unlikely(error))
 334                return error;
 335
 336        offset = bp->b_offset;
 337        bp->b_flags |= _XBF_PAGES;
 338
 339        for (i = 0; i < bp->b_page_count; i++) {
 340                struct page     *page;
 341                uint            retries = 0;
 342retry:
 343                page = alloc_page(gfp_mask);
 344                if (unlikely(page == NULL)) {
 345                        if (flags & XBF_READ_AHEAD) {
 346                                bp->b_page_count = i;
 347                                error = ENOMEM;
 348                                goto out_free_pages;
 349                        }
 350
 351                        /*
 352                         * This could deadlock.
 353                         *
 354                         * But until all the XFS lowlevel code is revamped to
 355                         * handle buffer allocation failures we can't do much.
 356                         */
 357                        if (!(++retries % 100))
 358                                xfs_err(NULL,
 359                "possible memory allocation deadlock in %s (mode:0x%x)",
 360                                        __func__, gfp_mask);
 361
 362                        XFS_STATS_INC(xb_page_retries);
 363                        congestion_wait(BLK_RW_ASYNC, HZ/50);
 364                        goto retry;
 365                }
 366
 367                XFS_STATS_INC(xb_page_found);
 368
 369                nbytes = min_t(size_t, size, PAGE_SIZE - offset);
 370                size -= nbytes;
 371                bp->b_pages[i] = page;
 372                offset = 0;
 373        }
 374        return 0;
 375
 376out_free_pages:
 377        for (i = 0; i < bp->b_page_count; i++)
 378                __free_page(bp->b_pages[i]);
 379        return error;
 380}
 381
 382/*
 383 *      Map buffer into kernel address-space if necessary.
 384 */
 385STATIC int
 386_xfs_buf_map_pages(
 387        xfs_buf_t               *bp,
 388        uint                    flags)
 389{
 390        ASSERT(bp->b_flags & _XBF_PAGES);
 391        if (bp->b_page_count == 1) {
 392                /* A single page buffer is always mappable */
 393                bp->b_addr = page_address(bp->b_pages[0]) + bp->b_offset;
 394        } else if (flags & XBF_UNMAPPED) {
 395                bp->b_addr = NULL;
 396        } else {
 397                int retried = 0;
 398
 399                do {
 400                        bp->b_addr = vm_map_ram(bp->b_pages, bp->b_page_count,
 401                                                -1, PAGE_KERNEL);
 402                        if (bp->b_addr)
 403                                break;
 404                        vm_unmap_aliases();
 405                } while (retried++ <= 1);
 406
 407                if (!bp->b_addr)
 408                        return -ENOMEM;
 409                bp->b_addr += bp->b_offset;
 410        }
 411
 412        return 0;
 413}
 414
 415/*
 416 *      Finding and Reading Buffers
 417 */
 418
 419/*
 420 *      Look up, and creates if absent, a lockable buffer for
 421 *      a given range of an inode.  The buffer is returned
 422 *      locked. No I/O is implied by this call.
 423 */
 424xfs_buf_t *
 425_xfs_buf_find(
 426        struct xfs_buftarg      *btp,
 427        struct xfs_buf_map      *map,
 428        int                     nmaps,
 429        xfs_buf_flags_t         flags,
 430        xfs_buf_t               *new_bp)
 431{
 432        size_t                  numbytes;
 433        struct xfs_perag        *pag;
 434        struct rb_node          **rbp;
 435        struct rb_node          *parent;
 436        xfs_buf_t               *bp;
 437        xfs_daddr_t             blkno = map[0].bm_bn;
 438        xfs_daddr_t             eofs;
 439        int                     numblks = 0;
 440        int                     i;
 441
 442        for (i = 0; i < nmaps; i++)
 443                numblks += map[i].bm_len;
 444        numbytes = BBTOB(numblks);
 445
 446        /* Check for IOs smaller than the sector size / not sector aligned */
 447        ASSERT(!(numbytes < (1 << btp->bt_sshift)));
 448        ASSERT(!(BBTOB(blkno) & (xfs_off_t)btp->bt_smask));
 449
 450        /*
 451         * Corrupted block numbers can get through to here, unfortunately, so we
 452         * have to check that the buffer falls within the filesystem bounds.
 453         */
 454        eofs = XFS_FSB_TO_BB(btp->bt_mount, btp->bt_mount->m_sb.sb_dblocks);
 455        if (blkno >= eofs) {
 456                /*
 457                 * XXX (dgc): we should really be returning EFSCORRUPTED here,
 458                 * but none of the higher level infrastructure supports
 459                 * returning a specific error on buffer lookup failures.
 460                 */
 461                xfs_alert(btp->bt_mount,
 462                          "%s: Block out of range: block 0x%llx, EOFS 0x%llx ",
 463                          __func__, blkno, eofs);
 464                WARN_ON(1);
 465                return NULL;
 466        }
 467
 468        /* get tree root */
 469        pag = xfs_perag_get(btp->bt_mount,
 470                                xfs_daddr_to_agno(btp->bt_mount, blkno));
 471
 472        /* walk tree */
 473        spin_lock(&pag->pag_buf_lock);
 474        rbp = &pag->pag_buf_tree.rb_node;
 475        parent = NULL;
 476        bp = NULL;
 477        while (*rbp) {
 478                parent = *rbp;
 479                bp = rb_entry(parent, struct xfs_buf, b_rbnode);
 480
 481                if (blkno < bp->b_bn)
 482                        rbp = &(*rbp)->rb_left;
 483                else if (blkno > bp->b_bn)
 484                        rbp = &(*rbp)->rb_right;
 485                else {
 486                        /*
 487                         * found a block number match. If the range doesn't
 488                         * match, the only way this is allowed is if the buffer
 489                         * in the cache is stale and the transaction that made
 490                         * it stale has not yet committed. i.e. we are
 491                         * reallocating a busy extent. Skip this buffer and
 492                         * continue searching to the right for an exact match.
 493                         */
 494                        if (bp->b_length != numblks) {
 495                                ASSERT(bp->b_flags & XBF_STALE);
 496                                rbp = &(*rbp)->rb_right;
 497                                continue;
 498                        }
 499                        atomic_inc(&bp->b_hold);
 500                        goto found;
 501                }
 502        }
 503
 504        /* No match found */
 505        if (new_bp) {
 506                rb_link_node(&new_bp->b_rbnode, parent, rbp);
 507                rb_insert_color(&new_bp->b_rbnode, &pag->pag_buf_tree);
 508                /* the buffer keeps the perag reference until it is freed */
 509                new_bp->b_pag = pag;
 510                spin_unlock(&pag->pag_buf_lock);
 511        } else {
 512                XFS_STATS_INC(xb_miss_locked);
 513                spin_unlock(&pag->pag_buf_lock);
 514                xfs_perag_put(pag);
 515        }
 516        return new_bp;
 517
 518found:
 519        spin_unlock(&pag->pag_buf_lock);
 520        xfs_perag_put(pag);
 521
 522        if (!xfs_buf_trylock(bp)) {
 523                if (flags & XBF_TRYLOCK) {
 524                        xfs_buf_rele(bp);
 525                        XFS_STATS_INC(xb_busy_locked);
 526                        return NULL;
 527                }
 528                xfs_buf_lock(bp);
 529                XFS_STATS_INC(xb_get_locked_waited);
 530        }
 531
 532        /*
 533         * if the buffer is stale, clear all the external state associated with
 534         * it. We need to keep flags such as how we allocated the buffer memory
 535         * intact here.
 536         */
 537        if (bp->b_flags & XBF_STALE) {
 538                ASSERT((bp->b_flags & _XBF_DELWRI_Q) == 0);
 539                ASSERT(bp->b_iodone == NULL);
 540                bp->b_flags &= _XBF_KMEM | _XBF_PAGES;
 541                bp->b_ops = NULL;
 542        }
 543
 544        trace_xfs_buf_find(bp, flags, _RET_IP_);
 545        XFS_STATS_INC(xb_get_locked);
 546        return bp;
 547}
 548
 549/*
 550 * Assembles a buffer covering the specified range. The code is optimised for
 551 * cache hits, as metadata intensive workloads will see 3 orders of magnitude
 552 * more hits than misses.
 553 */
 554struct xfs_buf *
 555xfs_buf_get_map(
 556        struct xfs_buftarg      *target,
 557        struct xfs_buf_map      *map,
 558        int                     nmaps,
 559        xfs_buf_flags_t         flags)
 560{
 561        struct xfs_buf          *bp;
 562        struct xfs_buf          *new_bp;
 563        int                     error = 0;
 564
 565        bp = _xfs_buf_find(target, map, nmaps, flags, NULL);
 566        if (likely(bp))
 567                goto found;
 568
 569        new_bp = _xfs_buf_alloc(target, map, nmaps, flags);
 570        if (unlikely(!new_bp))
 571                return NULL;
 572
 573        error = xfs_buf_allocate_memory(new_bp, flags);
 574        if (error) {
 575                xfs_buf_free(new_bp);
 576                return NULL;
 577        }
 578
 579        bp = _xfs_buf_find(target, map, nmaps, flags, new_bp);
 580        if (!bp) {
 581                xfs_buf_free(new_bp);
 582                return NULL;
 583        }
 584
 585        if (bp != new_bp)
 586                xfs_buf_free(new_bp);
 587
 588found:
 589        if (!bp->b_addr) {
 590                error = _xfs_buf_map_pages(bp, flags);
 591                if (unlikely(error)) {
 592                        xfs_warn(target->bt_mount,
 593                                "%s: failed to map pages\n", __func__);
 594                        xfs_buf_relse(bp);
 595                        return NULL;
 596                }
 597        }
 598
 599        XFS_STATS_INC(xb_get);
 600        trace_xfs_buf_get(bp, flags, _RET_IP_);
 601        return bp;
 602}
 603
 604STATIC int
 605_xfs_buf_read(
 606        xfs_buf_t               *bp,
 607        xfs_buf_flags_t         flags)
 608{
 609        ASSERT(!(flags & XBF_WRITE));
 610        ASSERT(bp->b_maps[0].bm_bn != XFS_BUF_DADDR_NULL);
 611
 612        bp->b_flags &= ~(XBF_WRITE | XBF_ASYNC | XBF_READ_AHEAD);
 613        bp->b_flags |= flags & (XBF_READ | XBF_ASYNC | XBF_READ_AHEAD);
 614
 615        xfs_buf_iorequest(bp);
 616        if (flags & XBF_ASYNC)
 617                return 0;
 618        return xfs_buf_iowait(bp);
 619}
 620
 621xfs_buf_t *
 622xfs_buf_read_map(
 623        struct xfs_buftarg      *target,
 624        struct xfs_buf_map      *map,
 625        int                     nmaps,
 626        xfs_buf_flags_t         flags,
 627        const struct xfs_buf_ops *ops)
 628{
 629        struct xfs_buf          *bp;
 630
 631        flags |= XBF_READ;
 632
 633        bp = xfs_buf_get_map(target, map, nmaps, flags);
 634        if (bp) {
 635                trace_xfs_buf_read(bp, flags, _RET_IP_);
 636
 637                if (!XFS_BUF_ISDONE(bp)) {
 638                        XFS_STATS_INC(xb_get_read);
 639                        bp->b_ops = ops;
 640                        _xfs_buf_read(bp, flags);
 641                } else if (flags & XBF_ASYNC) {
 642                        /*
 643                         * Read ahead call which is already satisfied,
 644                         * drop the buffer
 645                         */
 646                        xfs_buf_relse(bp);
 647                        return NULL;
 648                } else {
 649                        /* We do not want read in the flags */
 650                        bp->b_flags &= ~XBF_READ;
 651                }
 652        }
 653
 654        return bp;
 655}
 656
 657/*
 658 *      If we are not low on memory then do the readahead in a deadlock
 659 *      safe manner.
 660 */
 661void
 662xfs_buf_readahead_map(
 663        struct xfs_buftarg      *target,
 664        struct xfs_buf_map      *map,
 665        int                     nmaps,
 666        const struct xfs_buf_ops *ops)
 667{
 668        if (bdi_read_congested(target->bt_bdi))
 669                return;
 670
 671        xfs_buf_read_map(target, map, nmaps,
 672                     XBF_TRYLOCK|XBF_ASYNC|XBF_READ_AHEAD, ops);
 673}
 674
 675/*
 676 * Read an uncached buffer from disk. Allocates and returns a locked
 677 * buffer containing the disk contents or nothing.
 678 */
 679struct xfs_buf *
 680xfs_buf_read_uncached(
 681        struct xfs_buftarg      *target,
 682        xfs_daddr_t             daddr,
 683        size_t                  numblks,
 684        int                     flags,
 685        const struct xfs_buf_ops *ops)
 686{
 687        struct xfs_buf          *bp;
 688
 689        bp = xfs_buf_get_uncached(target, numblks, flags);
 690        if (!bp)
 691                return NULL;
 692
 693        /* set up the buffer for a read IO */
 694        ASSERT(bp->b_map_count == 1);
 695        bp->b_bn = daddr;
 696        bp->b_maps[0].bm_bn = daddr;
 697        bp->b_flags |= XBF_READ;
 698        bp->b_ops = ops;
 699
 700        xfsbdstrat(target->bt_mount, bp);
 701        xfs_buf_iowait(bp);
 702        return bp;
 703}
 704
 705/*
 706 * Return a buffer allocated as an empty buffer and associated to external
 707 * memory via xfs_buf_associate_memory() back to it's empty state.
 708 */
 709void
 710xfs_buf_set_empty(
 711        struct xfs_buf          *bp,
 712        size_t                  numblks)
 713{
 714        if (bp->b_pages)
 715                _xfs_buf_free_pages(bp);
 716
 717        bp->b_pages = NULL;
 718        bp->b_page_count = 0;
 719        bp->b_addr = NULL;
 720        bp->b_length = numblks;
 721        bp->b_io_length = numblks;
 722
 723        ASSERT(bp->b_map_count == 1);
 724        bp->b_bn = XFS_BUF_DADDR_NULL;
 725        bp->b_maps[0].bm_bn = XFS_BUF_DADDR_NULL;
 726        bp->b_maps[0].bm_len = bp->b_length;
 727}
 728
 729static inline struct page *
 730mem_to_page(
 731        void                    *addr)
 732{
 733        if ((!is_vmalloc_addr(addr))) {
 734                return virt_to_page(addr);
 735        } else {
 736                return vmalloc_to_page(addr);
 737        }
 738}
 739
 740int
 741xfs_buf_associate_memory(
 742        xfs_buf_t               *bp,
 743        void                    *mem,
 744        size_t                  len)
 745{
 746        int                     rval;
 747        int                     i = 0;
 748        unsigned long           pageaddr;
 749        unsigned long           offset;
 750        size_t                  buflen;
 751        int                     page_count;
 752
 753        pageaddr = (unsigned long)mem & PAGE_MASK;
 754        offset = (unsigned long)mem - pageaddr;
 755        buflen = PAGE_ALIGN(len + offset);
 756        page_count = buflen >> PAGE_SHIFT;
 757
 758        /* Free any previous set of page pointers */
 759        if (bp->b_pages)
 760                _xfs_buf_free_pages(bp);
 761
 762        bp->b_pages = NULL;
 763        bp->b_addr = mem;
 764
 765        rval = _xfs_buf_get_pages(bp, page_count, 0);
 766        if (rval)
 767                return rval;
 768
 769        bp->b_offset = offset;
 770
 771        for (i = 0; i < bp->b_page_count; i++) {
 772                bp->b_pages[i] = mem_to_page((void *)pageaddr);
 773                pageaddr += PAGE_SIZE;
 774        }
 775
 776        bp->b_io_length = BTOBB(len);
 777        bp->b_length = BTOBB(buflen);
 778
 779        return 0;
 780}
 781
 782xfs_buf_t *
 783xfs_buf_get_uncached(
 784        struct xfs_buftarg      *target,
 785        size_t                  numblks,
 786        int                     flags)
 787{
 788        unsigned long           page_count;
 789        int                     error, i;
 790        struct xfs_buf          *bp;
 791        DEFINE_SINGLE_BUF_MAP(map, XFS_BUF_DADDR_NULL, numblks);
 792
 793        bp = _xfs_buf_alloc(target, &map, 1, 0);
 794        if (unlikely(bp == NULL))
 795                goto fail;
 796
 797        page_count = PAGE_ALIGN(numblks << BBSHIFT) >> PAGE_SHIFT;
 798        error = _xfs_buf_get_pages(bp, page_count, 0);
 799        if (error)
 800                goto fail_free_buf;
 801
 802        for (i = 0; i < page_count; i++) {
 803                bp->b_pages[i] = alloc_page(xb_to_gfp(flags));
 804                if (!bp->b_pages[i])
 805                        goto fail_free_mem;
 806        }
 807        bp->b_flags |= _XBF_PAGES;
 808
 809        error = _xfs_buf_map_pages(bp, 0);
 810        if (unlikely(error)) {
 811                xfs_warn(target->bt_mount,
 812                        "%s: failed to map pages\n", __func__);
 813                goto fail_free_mem;
 814        }
 815
 816        trace_xfs_buf_get_uncached(bp, _RET_IP_);
 817        return bp;
 818
 819 fail_free_mem:
 820        while (--i >= 0)
 821                __free_page(bp->b_pages[i]);
 822        _xfs_buf_free_pages(bp);
 823 fail_free_buf:
 824        xfs_buf_free_maps(bp);
 825        kmem_zone_free(xfs_buf_zone, bp);
 826 fail:
 827        return NULL;
 828}
 829
 830/*
 831 *      Increment reference count on buffer, to hold the buffer concurrently
 832 *      with another thread which may release (free) the buffer asynchronously.
 833 *      Must hold the buffer already to call this function.
 834 */
 835void
 836xfs_buf_hold(
 837        xfs_buf_t               *bp)
 838{
 839        trace_xfs_buf_hold(bp, _RET_IP_);
 840        atomic_inc(&bp->b_hold);
 841}
 842
 843/*
 844 *      Releases a hold on the specified buffer.  If the
 845 *      the hold count is 1, calls xfs_buf_free.
 846 */
 847void
 848xfs_buf_rele(
 849        xfs_buf_t               *bp)
 850{
 851        struct xfs_perag        *pag = bp->b_pag;
 852
 853        trace_xfs_buf_rele(bp, _RET_IP_);
 854
 855        if (!pag) {
 856                ASSERT(list_empty(&bp->b_lru));
 857                ASSERT(RB_EMPTY_NODE(&bp->b_rbnode));
 858                if (atomic_dec_and_test(&bp->b_hold))
 859                        xfs_buf_free(bp);
 860                return;
 861        }
 862
 863        ASSERT(!RB_EMPTY_NODE(&bp->b_rbnode));
 864
 865        ASSERT(atomic_read(&bp->b_hold) > 0);
 866        if (atomic_dec_and_lock(&bp->b_hold, &pag->pag_buf_lock)) {
 867                spin_lock(&bp->b_lock);
 868                if (!(bp->b_flags & XBF_STALE) && atomic_read(&bp->b_lru_ref)) {
 869                        /*
 870                         * If the buffer is added to the LRU take a new
 871                         * reference to the buffer for the LRU and clear the
 872                         * (now stale) dispose list state flag
 873                         */
 874                        if (list_lru_add(&bp->b_target->bt_lru, &bp->b_lru)) {
 875                                bp->b_state &= ~XFS_BSTATE_DISPOSE;
 876                                atomic_inc(&bp->b_hold);
 877                        }
 878                        spin_unlock(&bp->b_lock);
 879                        spin_unlock(&pag->pag_buf_lock);
 880                } else {
 881                        /*
 882                         * most of the time buffers will already be removed from
 883                         * the LRU, so optimise that case by checking for the
 884                         * XFS_BSTATE_DISPOSE flag indicating the last list the
 885                         * buffer was on was the disposal list
 886                         */
 887                        if (!(bp->b_state & XFS_BSTATE_DISPOSE)) {
 888                                list_lru_del(&bp->b_target->bt_lru, &bp->b_lru);
 889                        } else {
 890                                ASSERT(list_empty(&bp->b_lru));
 891                        }
 892                        spin_unlock(&bp->b_lock);
 893
 894                        ASSERT(!(bp->b_flags & _XBF_DELWRI_Q));
 895                        rb_erase(&bp->b_rbnode, &pag->pag_buf_tree);
 896                        spin_unlock(&pag->pag_buf_lock);
 897                        xfs_perag_put(pag);
 898                        xfs_buf_free(bp);
 899                }
 900        }
 901}
 902
 903
 904/*
 905 *      Lock a buffer object, if it is not already locked.
 906 *
 907 *      If we come across a stale, pinned, locked buffer, we know that we are
 908 *      being asked to lock a buffer that has been reallocated. Because it is
 909 *      pinned, we know that the log has not been pushed to disk and hence it
 910 *      will still be locked.  Rather than continuing to have trylock attempts
 911 *      fail until someone else pushes the log, push it ourselves before
 912 *      returning.  This means that the xfsaild will not get stuck trying
 913 *      to push on stale inode buffers.
 914 */
 915int
 916xfs_buf_trylock(
 917        struct xfs_buf          *bp)
 918{
 919        int                     locked;
 920
 921        locked = down_trylock(&bp->b_sema) == 0;
 922        if (locked)
 923                XB_SET_OWNER(bp);
 924
 925        trace_xfs_buf_trylock(bp, _RET_IP_);
 926        return locked;
 927}
 928
 929/*
 930 *      Lock a buffer object.
 931 *
 932 *      If we come across a stale, pinned, locked buffer, we know that we
 933 *      are being asked to lock a buffer that has been reallocated. Because
 934 *      it is pinned, we know that the log has not been pushed to disk and
 935 *      hence it will still be locked. Rather than sleeping until someone
 936 *      else pushes the log, push it ourselves before trying to get the lock.
 937 */
 938void
 939xfs_buf_lock(
 940        struct xfs_buf          *bp)
 941{
 942        trace_xfs_buf_lock(bp, _RET_IP_);
 943
 944        if (atomic_read(&bp->b_pin_count) && (bp->b_flags & XBF_STALE))
 945                xfs_log_force(bp->b_target->bt_mount, 0);
 946        down(&bp->b_sema);
 947        XB_SET_OWNER(bp);
 948
 949        trace_xfs_buf_lock_done(bp, _RET_IP_);
 950}
 951
 952void
 953xfs_buf_unlock(
 954        struct xfs_buf          *bp)
 955{
 956        XB_CLEAR_OWNER(bp);
 957        up(&bp->b_sema);
 958
 959        trace_xfs_buf_unlock(bp, _RET_IP_);
 960}
 961
 962STATIC void
 963xfs_buf_wait_unpin(
 964        xfs_buf_t               *bp)
 965{
 966        DECLARE_WAITQUEUE       (wait, current);
 967
 968        if (atomic_read(&bp->b_pin_count) == 0)
 969                return;
 970
 971        add_wait_queue(&bp->b_waiters, &wait);
 972        for (;;) {
 973                set_current_state(TASK_UNINTERRUPTIBLE);
 974                if (atomic_read(&bp->b_pin_count) == 0)
 975                        break;
 976                io_schedule();
 977        }
 978        remove_wait_queue(&bp->b_waiters, &wait);
 979        set_current_state(TASK_RUNNING);
 980}
 981
 982/*
 983 *      Buffer Utility Routines
 984 */
 985
 986STATIC void
 987xfs_buf_iodone_work(
 988        struct work_struct      *work)
 989{
 990        struct xfs_buf          *bp =
 991                container_of(work, xfs_buf_t, b_iodone_work);
 992        bool                    read = !!(bp->b_flags & XBF_READ);
 993
 994        bp->b_flags &= ~(XBF_READ | XBF_WRITE | XBF_READ_AHEAD);
 995
 996        /* only validate buffers that were read without errors */
 997        if (read && bp->b_ops && !bp->b_error && (bp->b_flags & XBF_DONE))
 998                bp->b_ops->verify_read(bp);
 999
1000        if (bp->b_iodone)
1001                (*(bp->b_iodone))(bp);
1002        else if (bp->b_flags & XBF_ASYNC)
1003                xfs_buf_relse(bp);
1004        else {
1005                ASSERT(read && bp->b_ops);
1006                complete(&bp->b_iowait);
1007        }
1008}
1009
1010void
1011xfs_buf_ioend(
1012        struct xfs_buf  *bp,
1013        int             schedule)
1014{
1015        bool            read = !!(bp->b_flags & XBF_READ);
1016
1017        trace_xfs_buf_iodone(bp, _RET_IP_);
1018
1019        if (bp->b_error == 0)
1020                bp->b_flags |= XBF_DONE;
1021
1022        if (bp->b_iodone || (read && bp->b_ops) || (bp->b_flags & XBF_ASYNC)) {
1023                if (schedule) {
1024                        INIT_WORK(&bp->b_iodone_work, xfs_buf_iodone_work);
1025                        queue_work(xfslogd_workqueue, &bp->b_iodone_work);
1026                } else {
1027                        xfs_buf_iodone_work(&bp->b_iodone_work);
1028                }
1029        } else {
1030                bp->b_flags &= ~(XBF_READ | XBF_WRITE | XBF_READ_AHEAD);
1031                complete(&bp->b_iowait);
1032        }
1033}
1034
1035void
1036xfs_buf_ioerror(
1037        xfs_buf_t               *bp,
1038        int                     error)
1039{
1040        ASSERT(error >= 0 && error <= 0xffff);
1041        bp->b_error = (unsigned short)error;
1042        trace_xfs_buf_ioerror(bp, error, _RET_IP_);
1043}
1044
1045void
1046xfs_buf_ioerror_alert(
1047        struct xfs_buf          *bp,
1048        const char              *func)
1049{
1050        xfs_alert(bp->b_target->bt_mount,
1051"metadata I/O error: block 0x%llx (\"%s\") error %d numblks %d",
1052                (__uint64_t)XFS_BUF_ADDR(bp), func, bp->b_error, bp->b_length);
1053}
1054
1055/*
1056 * Called when we want to stop a buffer from getting written or read.
1057 * We attach the EIO error, muck with its flags, and call xfs_buf_ioend
1058 * so that the proper iodone callbacks get called.
1059 */
1060STATIC int
1061xfs_bioerror(
1062        xfs_buf_t *bp)
1063{
1064#ifdef XFSERRORDEBUG
1065        ASSERT(XFS_BUF_ISREAD(bp) || bp->b_iodone);
1066#endif
1067
1068        /*
1069         * No need to wait until the buffer is unpinned, we aren't flushing it.
1070         */
1071        xfs_buf_ioerror(bp, EIO);
1072
1073        /*
1074         * We're calling xfs_buf_ioend, so delete XBF_DONE flag.
1075         */
1076        XFS_BUF_UNREAD(bp);
1077        XFS_BUF_UNDONE(bp);
1078        xfs_buf_stale(bp);
1079
1080        xfs_buf_ioend(bp, 0);
1081
1082        return EIO;
1083}
1084
1085/*
1086 * Same as xfs_bioerror, except that we are releasing the buffer
1087 * here ourselves, and avoiding the xfs_buf_ioend call.
1088 * This is meant for userdata errors; metadata bufs come with
1089 * iodone functions attached, so that we can track down errors.
1090 */
1091STATIC int
1092xfs_bioerror_relse(
1093        struct xfs_buf  *bp)
1094{
1095        int64_t         fl = bp->b_flags;
1096        /*
1097         * No need to wait until the buffer is unpinned.
1098         * We aren't flushing it.
1099         *
1100         * chunkhold expects B_DONE to be set, whether
1101         * we actually finish the I/O or not. We don't want to
1102         * change that interface.
1103         */
1104        XFS_BUF_UNREAD(bp);
1105        XFS_BUF_DONE(bp);
1106        xfs_buf_stale(bp);
1107        bp->b_iodone = NULL;
1108        if (!(fl & XBF_ASYNC)) {
1109                /*
1110                 * Mark b_error and B_ERROR _both_.
1111                 * Lot's of chunkcache code assumes that.
1112                 * There's no reason to mark error for
1113                 * ASYNC buffers.
1114                 */
1115                xfs_buf_ioerror(bp, EIO);
1116                complete(&bp->b_iowait);
1117        } else {
1118                xfs_buf_relse(bp);
1119        }
1120
1121        return EIO;
1122}
1123
1124STATIC int
1125xfs_bdstrat_cb(
1126        struct xfs_buf  *bp)
1127{
1128        if (XFS_FORCED_SHUTDOWN(bp->b_target->bt_mount)) {
1129                trace_xfs_bdstrat_shut(bp, _RET_IP_);
1130                /*
1131                 * Metadata write that didn't get logged but
1132                 * written delayed anyway. These aren't associated
1133                 * with a transaction, and can be ignored.
1134                 */
1135                if (!bp->b_iodone && !XFS_BUF_ISREAD(bp))
1136                        return xfs_bioerror_relse(bp);
1137                else
1138                        return xfs_bioerror(bp);
1139        }
1140
1141        xfs_buf_iorequest(bp);
1142        return 0;
1143}
1144
1145int
1146xfs_bwrite(
1147        struct xfs_buf          *bp)
1148{
1149        int                     error;
1150
1151        ASSERT(xfs_buf_islocked(bp));
1152
1153        bp->b_flags |= XBF_WRITE;
1154        bp->b_flags &= ~(XBF_ASYNC | XBF_READ | _XBF_DELWRI_Q);
1155
1156        xfs_bdstrat_cb(bp);
1157
1158        error = xfs_buf_iowait(bp);
1159        if (error) {
1160                xfs_force_shutdown(bp->b_target->bt_mount,
1161                                   SHUTDOWN_META_IO_ERROR);
1162        }
1163        return error;
1164}
1165
1166/*
1167 * Wrapper around bdstrat so that we can stop data from going to disk in case
1168 * we are shutting down the filesystem.  Typically user data goes thru this
1169 * path; one of the exceptions is the superblock.
1170 */
1171void
1172xfsbdstrat(
1173        struct xfs_mount        *mp,
1174        struct xfs_buf          *bp)
1175{
1176        if (XFS_FORCED_SHUTDOWN(mp)) {
1177                trace_xfs_bdstrat_shut(bp, _RET_IP_);
1178                xfs_bioerror_relse(bp);
1179                return;
1180        }
1181
1182        xfs_buf_iorequest(bp);
1183}
1184
1185STATIC void
1186_xfs_buf_ioend(
1187        xfs_buf_t               *bp,
1188        int                     schedule)
1189{
1190        if (atomic_dec_and_test(&bp->b_io_remaining) == 1)
1191                xfs_buf_ioend(bp, schedule);
1192}
1193
1194STATIC void
1195xfs_buf_bio_end_io(
1196        struct bio              *bio,
1197        int                     error)
1198{
1199        xfs_buf_t               *bp = (xfs_buf_t *)bio->bi_private;
1200
1201        /*
1202         * don't overwrite existing errors - otherwise we can lose errors on
1203         * buffers that require multiple bios to complete.
1204         */
1205        if (!bp->b_error)
1206                xfs_buf_ioerror(bp, -error);
1207
1208        if (!bp->b_error && xfs_buf_is_vmapped(bp) && (bp->b_flags & XBF_READ))
1209                invalidate_kernel_vmap_range(bp->b_addr, xfs_buf_vmap_len(bp));
1210
1211        _xfs_buf_ioend(bp, 1);
1212        bio_put(bio);
1213}
1214
1215static void
1216xfs_buf_ioapply_map(
1217        struct xfs_buf  *bp,
1218        int             map,
1219        int             *buf_offset,
1220        int             *count,
1221        int             rw)
1222{
1223        int             page_index;
1224        int             total_nr_pages = bp->b_page_count;
1225        int             nr_pages;
1226        struct bio      *bio;
1227        sector_t        sector =  bp->b_maps[map].bm_bn;
1228        int             size;
1229        int             offset;
1230
1231        total_nr_pages = bp->b_page_count;
1232
1233        /* skip the pages in the buffer before the start offset */
1234        page_index = 0;
1235        offset = *buf_offset;
1236        while (offset >= PAGE_SIZE) {
1237                page_index++;
1238                offset -= PAGE_SIZE;
1239        }
1240
1241        /*
1242         * Limit the IO size to the length of the current vector, and update the
1243         * remaining IO count for the next time around.
1244         */
1245        size = min_t(int, BBTOB(bp->b_maps[map].bm_len), *count);
1246        *count -= size;
1247        *buf_offset += size;
1248
1249next_chunk:
1250        atomic_inc(&bp->b_io_remaining);
1251        nr_pages = BIO_MAX_SECTORS >> (PAGE_SHIFT - BBSHIFT);
1252        if (nr_pages > total_nr_pages)
1253                nr_pages = total_nr_pages;
1254
1255        bio = bio_alloc(GFP_NOIO, nr_pages);
1256        bio->bi_bdev = bp->b_target->bt_bdev;
1257        bio->bi_sector = sector;
1258        bio->bi_end_io = xfs_buf_bio_end_io;
1259        bio->bi_private = bp;
1260
1261
1262        for (; size && nr_pages; nr_pages--, page_index++) {
1263                int     rbytes, nbytes = PAGE_SIZE - offset;
1264
1265                if (nbytes > size)
1266                        nbytes = size;
1267
1268                rbytes = bio_add_page(bio, bp->b_pages[page_index], nbytes,
1269                                      offset);
1270                if (rbytes < nbytes)
1271                        break;
1272
1273                offset = 0;
1274                sector += BTOBB(nbytes);
1275                size -= nbytes;
1276                total_nr_pages--;
1277        }
1278
1279        if (likely(bio->bi_size)) {
1280                if (xfs_buf_is_vmapped(bp)) {
1281                        flush_kernel_vmap_range(bp->b_addr,
1282                                                xfs_buf_vmap_len(bp));
1283                }
1284                submit_bio(rw, bio);
1285                if (size)
1286                        goto next_chunk;
1287        } else {
1288                /*
1289                 * This is guaranteed not to be the last io reference count
1290                 * because the caller (xfs_buf_iorequest) holds a count itself.
1291                 */
1292                atomic_dec(&bp->b_io_remaining);
1293                xfs_buf_ioerror(bp, EIO);
1294                bio_put(bio);
1295        }
1296
1297}
1298
1299STATIC void
1300_xfs_buf_ioapply(
1301        struct xfs_buf  *bp)
1302{
1303        struct blk_plug plug;
1304        int             rw;
1305        int             offset;
1306        int             size;
1307        int             i;
1308
1309        /*
1310         * Make sure we capture only current IO errors rather than stale errors
1311         * left over from previous use of the buffer (e.g. failed readahead).
1312         */
1313        bp->b_error = 0;
1314
1315        if (bp->b_flags & XBF_WRITE) {
1316                if (bp->b_flags & XBF_SYNCIO)
1317                        rw = WRITE_SYNC;
1318                else
1319                        rw = WRITE;
1320                if (bp->b_flags & XBF_FUA)
1321                        rw |= REQ_FUA;
1322                if (bp->b_flags & XBF_FLUSH)
1323                        rw |= REQ_FLUSH;
1324
1325                /*
1326                 * Run the write verifier callback function if it exists. If
1327                 * this function fails it will mark the buffer with an error and
1328                 * the IO should not be dispatched.
1329                 */
1330                if (bp->b_ops) {
1331                        bp->b_ops->verify_write(bp);
1332                        if (bp->b_error) {
1333                                xfs_force_shutdown(bp->b_target->bt_mount,
1334                                                   SHUTDOWN_CORRUPT_INCORE);
1335                                return;
1336                        }
1337                }
1338        } else if (bp->b_flags & XBF_READ_AHEAD) {
1339                rw = READA;
1340        } else {
1341                rw = READ;
1342        }
1343
1344        /* we only use the buffer cache for meta-data */
1345        rw |= REQ_META;
1346
1347        /*
1348         * Walk all the vectors issuing IO on them. Set up the initial offset
1349         * into the buffer and the desired IO size before we start -
1350         * _xfs_buf_ioapply_vec() will modify them appropriately for each
1351         * subsequent call.
1352         */
1353        offset = bp->b_offset;
1354        size = BBTOB(bp->b_io_length);
1355        blk_start_plug(&plug);
1356        for (i = 0; i < bp->b_map_count; i++) {
1357                xfs_buf_ioapply_map(bp, i, &offset, &size, rw);
1358                if (bp->b_error)
1359                        break;
1360                if (size <= 0)
1361                        break;  /* all done */
1362        }
1363        blk_finish_plug(&plug);
1364}
1365
1366void
1367xfs_buf_iorequest(
1368        xfs_buf_t               *bp)
1369{
1370        trace_xfs_buf_iorequest(bp, _RET_IP_);
1371
1372        ASSERT(!(bp->b_flags & _XBF_DELWRI_Q));
1373
1374        if (bp->b_flags & XBF_WRITE)
1375                xfs_buf_wait_unpin(bp);
1376        xfs_buf_hold(bp);
1377
1378        /* Set the count to 1 initially, this will stop an I/O
1379         * completion callout which happens before we have started
1380         * all the I/O from calling xfs_buf_ioend too early.
1381         */
1382        atomic_set(&bp->b_io_remaining, 1);
1383        _xfs_buf_ioapply(bp);
1384        _xfs_buf_ioend(bp, 1);
1385
1386        xfs_buf_rele(bp);
1387}
1388
1389/*
1390 * Waits for I/O to complete on the buffer supplied.  It returns immediately if
1391 * no I/O is pending or there is already a pending error on the buffer.  It
1392 * returns the I/O error code, if any, or 0 if there was no error.
1393 */
1394int
1395xfs_buf_iowait(
1396        xfs_buf_t               *bp)
1397{
1398        trace_xfs_buf_iowait(bp, _RET_IP_);
1399
1400        if (!bp->b_error)
1401                wait_for_completion(&bp->b_iowait);
1402
1403        trace_xfs_buf_iowait_done(bp, _RET_IP_);
1404        return bp->b_error;
1405}
1406
1407xfs_caddr_t
1408xfs_buf_offset(
1409        xfs_buf_t               *bp,
1410        size_t                  offset)
1411{
1412        struct page             *page;
1413
1414        if (bp->b_addr)
1415                return bp->b_addr + offset;
1416
1417        offset += bp->b_offset;
1418        page = bp->b_pages[offset >> PAGE_SHIFT];
1419        return (xfs_caddr_t)page_address(page) + (offset & (PAGE_SIZE-1));
1420}
1421
1422/*
1423 *      Move data into or out of a buffer.
1424 */
1425void
1426xfs_buf_iomove(
1427        xfs_buf_t               *bp,    /* buffer to process            */
1428        size_t                  boff,   /* starting buffer offset       */
1429        size_t                  bsize,  /* length to copy               */
1430        void                    *data,  /* data address                 */
1431        xfs_buf_rw_t            mode)   /* read/write/zero flag         */
1432{
1433        size_t                  bend;
1434
1435        bend = boff + bsize;
1436        while (boff < bend) {
1437                struct page     *page;
1438                int             page_index, page_offset, csize;
1439
1440                page_index = (boff + bp->b_offset) >> PAGE_SHIFT;
1441                page_offset = (boff + bp->b_offset) & ~PAGE_MASK;
1442                page = bp->b_pages[page_index];
1443                csize = min_t(size_t, PAGE_SIZE - page_offset,
1444                                      BBTOB(bp->b_io_length) - boff);
1445
1446                ASSERT((csize + page_offset) <= PAGE_SIZE);
1447
1448                switch (mode) {
1449                case XBRW_ZERO:
1450                        memset(page_address(page) + page_offset, 0, csize);
1451                        break;
1452                case XBRW_READ:
1453                        memcpy(data, page_address(page) + page_offset, csize);
1454                        break;
1455                case XBRW_WRITE:
1456                        memcpy(page_address(page) + page_offset, data, csize);
1457                }
1458
1459                boff += csize;
1460                data += csize;
1461        }
1462}
1463
1464/*
1465 *      Handling of buffer targets (buftargs).
1466 */
1467
1468/*
1469 * Wait for any bufs with callbacks that have been submitted but have not yet
1470 * returned. These buffers will have an elevated hold count, so wait on those
1471 * while freeing all the buffers only held by the LRU.
1472 */
1473static enum lru_status
1474xfs_buftarg_wait_rele(
1475        struct list_head        *item,
1476        spinlock_t              *lru_lock,
1477        void                    *arg)
1478
1479{
1480        struct xfs_buf          *bp = container_of(item, struct xfs_buf, b_lru);
1481        struct list_head        *dispose = arg;
1482
1483        if (atomic_read(&bp->b_hold) > 1) {
1484                /* need to wait, so skip it this pass */
1485                trace_xfs_buf_wait_buftarg(bp, _RET_IP_);
1486                return LRU_SKIP;
1487        }
1488        if (!spin_trylock(&bp->b_lock))
1489                return LRU_SKIP;
1490
1491        /*
1492         * clear the LRU reference count so the buffer doesn't get
1493         * ignored in xfs_buf_rele().
1494         */
1495        atomic_set(&bp->b_lru_ref, 0);
1496        bp->b_state |= XFS_BSTATE_DISPOSE;
1497        list_move(item, dispose);
1498        spin_unlock(&bp->b_lock);
1499        return LRU_REMOVED;
1500}
1501
1502void
1503xfs_wait_buftarg(
1504        struct xfs_buftarg      *btp)
1505{
1506        LIST_HEAD(dispose);
1507        int loop = 0;
1508
1509        /* loop until there is nothing left on the lru list. */
1510        while (list_lru_count(&btp->bt_lru)) {
1511                list_lru_walk(&btp->bt_lru, xfs_buftarg_wait_rele,
1512                              &dispose, LONG_MAX);
1513
1514                while (!list_empty(&dispose)) {
1515                        struct xfs_buf *bp;
1516                        bp = list_first_entry(&dispose, struct xfs_buf, b_lru);
1517                        list_del_init(&bp->b_lru);
1518                        xfs_buf_rele(bp);
1519                }
1520                if (loop++ != 0)
1521                        delay(100);
1522        }
1523}
1524
1525static enum lru_status
1526xfs_buftarg_isolate(
1527        struct list_head        *item,
1528        spinlock_t              *lru_lock,
1529        void                    *arg)
1530{
1531        struct xfs_buf          *bp = container_of(item, struct xfs_buf, b_lru);
1532        struct list_head        *dispose = arg;
1533
1534        /*
1535         * we are inverting the lru lock/bp->b_lock here, so use a trylock.
1536         * If we fail to get the lock, just skip it.
1537         */
1538        if (!spin_trylock(&bp->b_lock))
1539                return LRU_SKIP;
1540        /*
1541         * Decrement the b_lru_ref count unless the value is already
1542         * zero. If the value is already zero, we need to reclaim the
1543         * buffer, otherwise it gets another trip through the LRU.
1544         */
1545        if (!atomic_add_unless(&bp->b_lru_ref, -1, 0)) {
1546                spin_unlock(&bp->b_lock);
1547                return LRU_ROTATE;
1548        }
1549
1550        bp->b_state |= XFS_BSTATE_DISPOSE;
1551        list_move(item, dispose);
1552        spin_unlock(&bp->b_lock);
1553        return LRU_REMOVED;
1554}
1555
1556static unsigned long
1557xfs_buftarg_shrink_scan(
1558        struct shrinker         *shrink,
1559        struct shrink_control   *sc)
1560{
1561        struct xfs_buftarg      *btp = container_of(shrink,
1562                                        struct xfs_buftarg, bt_shrinker);
1563        LIST_HEAD(dispose);
1564        unsigned long           freed;
1565        unsigned long           nr_to_scan = sc->nr_to_scan;
1566
1567        freed = list_lru_walk_node(&btp->bt_lru, sc->nid, xfs_buftarg_isolate,
1568                                       &dispose, &nr_to_scan);
1569
1570        while (!list_empty(&dispose)) {
1571                struct xfs_buf *bp;
1572                bp = list_first_entry(&dispose, struct xfs_buf, b_lru);
1573                list_del_init(&bp->b_lru);
1574                xfs_buf_rele(bp);
1575        }
1576
1577        return freed;
1578}
1579
1580static unsigned long
1581xfs_buftarg_shrink_count(
1582        struct shrinker         *shrink,
1583        struct shrink_control   *sc)
1584{
1585        struct xfs_buftarg      *btp = container_of(shrink,
1586                                        struct xfs_buftarg, bt_shrinker);
1587        return list_lru_count_node(&btp->bt_lru, sc->nid);
1588}
1589
1590void
1591xfs_free_buftarg(
1592        struct xfs_mount        *mp,
1593        struct xfs_buftarg      *btp)
1594{
1595        unregister_shrinker(&btp->bt_shrinker);
1596        list_lru_destroy(&btp->bt_lru);
1597
1598        if (mp->m_flags & XFS_MOUNT_BARRIER)
1599                xfs_blkdev_issue_flush(btp);
1600
1601        kmem_free(btp);
1602}
1603
1604STATIC int
1605xfs_setsize_buftarg_flags(
1606        xfs_buftarg_t           *btp,
1607        unsigned int            blocksize,
1608        unsigned int            sectorsize,
1609        int                     verbose)
1610{
1611        btp->bt_bsize = blocksize;
1612        btp->bt_sshift = ffs(sectorsize) - 1;
1613        btp->bt_smask = sectorsize - 1;
1614
1615        if (set_blocksize(btp->bt_bdev, sectorsize)) {
1616                char name[BDEVNAME_SIZE];
1617
1618                bdevname(btp->bt_bdev, name);
1619
1620                xfs_warn(btp->bt_mount,
1621                        "Cannot set_blocksize to %u on device %s\n",
1622                        sectorsize, name);
1623                return EINVAL;
1624        }
1625
1626        return 0;
1627}
1628
1629/*
1630 *      When allocating the initial buffer target we have not yet
1631 *      read in the superblock, so don't know what sized sectors
1632 *      are being used at this early stage.  Play safe.
1633 */
1634STATIC int
1635xfs_setsize_buftarg_early(
1636        xfs_buftarg_t           *btp,
1637        struct block_device     *bdev)
1638{
1639        return xfs_setsize_buftarg_flags(btp,
1640                        PAGE_SIZE, bdev_logical_block_size(bdev), 0);
1641}
1642
1643int
1644xfs_setsize_buftarg(
1645        xfs_buftarg_t           *btp,
1646        unsigned int            blocksize,
1647        unsigned int            sectorsize)
1648{
1649        return xfs_setsize_buftarg_flags(btp, blocksize, sectorsize, 1);
1650}
1651
1652xfs_buftarg_t *
1653xfs_alloc_buftarg(
1654        struct xfs_mount        *mp,
1655        struct block_device     *bdev,
1656        int                     external,
1657        const char              *fsname)
1658{
1659        xfs_buftarg_t           *btp;
1660
1661        btp = kmem_zalloc(sizeof(*btp), KM_SLEEP | KM_NOFS);
1662
1663        btp->bt_mount = mp;
1664        btp->bt_dev =  bdev->bd_dev;
1665        btp->bt_bdev = bdev;
1666        btp->bt_bdi = blk_get_backing_dev_info(bdev);
1667        if (!btp->bt_bdi)
1668                goto error;
1669
1670        if (xfs_setsize_buftarg_early(btp, bdev))
1671                goto error;
1672
1673        if (list_lru_init(&btp->bt_lru))
1674                goto error;
1675
1676        btp->bt_shrinker.count_objects = xfs_buftarg_shrink_count;
1677        btp->bt_shrinker.scan_objects = xfs_buftarg_shrink_scan;
1678        btp->bt_shrinker.seeks = DEFAULT_SEEKS;
1679        btp->bt_shrinker.flags = SHRINKER_NUMA_AWARE;
1680        register_shrinker(&btp->bt_shrinker);
1681        return btp;
1682
1683error:
1684        kmem_free(btp);
1685        return NULL;
1686}
1687
1688/*
1689 * Add a buffer to the delayed write list.
1690 *
1691 * This queues a buffer for writeout if it hasn't already been.  Note that
1692 * neither this routine nor the buffer list submission functions perform
1693 * any internal synchronization.  It is expected that the lists are thread-local
1694 * to the callers.
1695 *
1696 * Returns true if we queued up the buffer, or false if it already had
1697 * been on the buffer list.
1698 */
1699bool
1700xfs_buf_delwri_queue(
1701        struct xfs_buf          *bp,
1702        struct list_head        *list)
1703{
1704        ASSERT(xfs_buf_islocked(bp));
1705        ASSERT(!(bp->b_flags & XBF_READ));
1706
1707        /*
1708         * If the buffer is already marked delwri it already is queued up
1709         * by someone else for imediate writeout.  Just ignore it in that
1710         * case.
1711         */
1712        if (bp->b_flags & _XBF_DELWRI_Q) {
1713                trace_xfs_buf_delwri_queued(bp, _RET_IP_);
1714                return false;
1715        }
1716
1717        trace_xfs_buf_delwri_queue(bp, _RET_IP_);
1718
1719        /*
1720         * If a buffer gets written out synchronously or marked stale while it
1721         * is on a delwri list we lazily remove it. To do this, the other party
1722         * clears the  _XBF_DELWRI_Q flag but otherwise leaves the buffer alone.
1723         * It remains referenced and on the list.  In a rare corner case it
1724         * might get readded to a delwri list after the synchronous writeout, in
1725         * which case we need just need to re-add the flag here.
1726         */
1727        bp->b_flags |= _XBF_DELWRI_Q;
1728        if (list_empty(&bp->b_list)) {
1729                atomic_inc(&bp->b_hold);
1730                list_add_tail(&bp->b_list, list);
1731        }
1732
1733        return true;
1734}
1735
1736/*
1737 * Compare function is more complex than it needs to be because
1738 * the return value is only 32 bits and we are doing comparisons
1739 * on 64 bit values
1740 */
1741static int
1742xfs_buf_cmp(
1743        void            *priv,
1744        struct list_head *a,
1745        struct list_head *b)
1746{
1747        struct xfs_buf  *ap = container_of(a, struct xfs_buf, b_list);
1748        struct xfs_buf  *bp = container_of(b, struct xfs_buf, b_list);
1749        xfs_daddr_t             diff;
1750
1751        diff = ap->b_maps[0].bm_bn - bp->b_maps[0].bm_bn;
1752        if (diff < 0)
1753                return -1;
1754        if (diff > 0)
1755                return 1;
1756        return 0;
1757}
1758
1759static int
1760__xfs_buf_delwri_submit(
1761        struct list_head        *buffer_list,
1762        struct list_head        *io_list,
1763        bool                    wait)
1764{
1765        struct blk_plug         plug;
1766        struct xfs_buf          *bp, *n;
1767        int                     pinned = 0;
1768
1769        list_for_each_entry_safe(bp, n, buffer_list, b_list) {
1770                if (!wait) {
1771                        if (xfs_buf_ispinned(bp)) {
1772                                pinned++;
1773                                continue;
1774                        }
1775                        if (!xfs_buf_trylock(bp))
1776                                continue;
1777                } else {
1778                        xfs_buf_lock(bp);
1779                }
1780
1781                /*
1782                 * Someone else might have written the buffer synchronously or
1783                 * marked it stale in the meantime.  In that case only the
1784                 * _XBF_DELWRI_Q flag got cleared, and we have to drop the
1785                 * reference and remove it from the list here.
1786                 */
1787                if (!(bp->b_flags & _XBF_DELWRI_Q)) {
1788                        list_del_init(&bp->b_list);
1789                        xfs_buf_relse(bp);
1790                        continue;
1791                }
1792
1793                list_move_tail(&bp->b_list, io_list);
1794                trace_xfs_buf_delwri_split(bp, _RET_IP_);
1795        }
1796
1797        list_sort(NULL, io_list, xfs_buf_cmp);
1798
1799        blk_start_plug(&plug);
1800        list_for_each_entry_safe(bp, n, io_list, b_list) {
1801                bp->b_flags &= ~(_XBF_DELWRI_Q | XBF_ASYNC);
1802                bp->b_flags |= XBF_WRITE;
1803
1804                if (!wait) {
1805                        bp->b_flags |= XBF_ASYNC;
1806                        list_del_init(&bp->b_list);
1807                }
1808                xfs_bdstrat_cb(bp);
1809        }
1810        blk_finish_plug(&plug);
1811
1812        return pinned;
1813}
1814
1815/*
1816 * Write out a buffer list asynchronously.
1817 *
1818 * This will take the @buffer_list, write all non-locked and non-pinned buffers
1819 * out and not wait for I/O completion on any of the buffers.  This interface
1820 * is only safely useable for callers that can track I/O completion by higher
1821 * level means, e.g. AIL pushing as the @buffer_list is consumed in this
1822 * function.
1823 */
1824int
1825xfs_buf_delwri_submit_nowait(
1826        struct list_head        *buffer_list)
1827{
1828        LIST_HEAD               (io_list);
1829        return __xfs_buf_delwri_submit(buffer_list, &io_list, false);
1830}
1831
1832/*
1833 * Write out a buffer list synchronously.
1834 *
1835 * This will take the @buffer_list, write all buffers out and wait for I/O
1836 * completion on all of the buffers. @buffer_list is consumed by the function,
1837 * so callers must have some other way of tracking buffers if they require such
1838 * functionality.
1839 */
1840int
1841xfs_buf_delwri_submit(
1842        struct list_head        *buffer_list)
1843{
1844        LIST_HEAD               (io_list);
1845        int                     error = 0, error2;
1846        struct xfs_buf          *bp;
1847
1848        __xfs_buf_delwri_submit(buffer_list, &io_list, true);
1849
1850        /* Wait for IO to complete. */
1851        while (!list_empty(&io_list)) {
1852                bp = list_first_entry(&io_list, struct xfs_buf, b_list);
1853
1854                list_del_init(&bp->b_list);
1855                error2 = xfs_buf_iowait(bp);
1856                xfs_buf_relse(bp);
1857                if (!error)
1858                        error = error2;
1859        }
1860
1861        return error;
1862}
1863
1864int __init
1865xfs_buf_init(void)
1866{
1867        xfs_buf_zone = kmem_zone_init_flags(sizeof(xfs_buf_t), "xfs_buf",
1868                                                KM_ZONE_HWALIGN, NULL);
1869        if (!xfs_buf_zone)
1870                goto out;
1871
1872        xfslogd_workqueue = alloc_workqueue("xfslogd",
1873                                        WQ_MEM_RECLAIM | WQ_HIGHPRI, 1);
1874        if (!xfslogd_workqueue)
1875                goto out_free_buf_zone;
1876
1877        return 0;
1878
1879 out_free_buf_zone:
1880        kmem_zone_destroy(xfs_buf_zone);
1881 out:
1882        return -ENOMEM;
1883}
1884
1885void
1886xfs_buf_terminate(void)
1887{
1888        destroy_workqueue(xfslogd_workqueue);
1889        kmem_zone_destroy(xfs_buf_zone);
1890}
1891