lkml.org 
[lkml]   [1999]   [Mar]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: 2.2.2 two major problems
    On Thu, 4 Mar 1999, Alan Cox wrote:

    >> I think that replacing the if (toomany) wakeup_bdflush(0) with
    >> wakeup_bdflush(1) would have fixed it everywhere. But we instead added
    >
    >Well its simple to analyse. Why not post a patch to the list for folks to
    >beat on ?

    The instructions to patch by hand were just been present on the list (not
    really in form of a patch). They are been proposed by sct in first place
    if I remeber well.

    but OK here is a patch:

    Index: buffer.c
    ===================================================================
    RCS file: /var/cvs/linux/fs/buffer.c,v
    retrieving revision 1.1.2.22
    diff -u -r1.1.2.22 buffer.c
    --- buffer.c 1999/02/20 15:57:29 1.1.2.22
    +++ linux/fs/buffer.c 1999/03/04 00:24:33
    @@ -78,7 +78,6 @@

    static int nr_buffers = 0;
    static int nr_buffers_type[NR_LIST] = {0,};
    -static int size_buffers_type[NR_LIST] = {0,};
    static int nr_buffer_heads = 0;
    static int nr_unused_buffer_heads = 0;

    @@ -104,8 +103,7 @@
    each time we call refill */
    int nref_dirt; /* Dirty buffer threshold for activating bdflush
    when trying to refill buffers. */
    - int pct_dirt; /* Max %age of mem for dirty buffers before
    - activating bdflush */
    + int dummy1; /* unused */
    int age_buffer; /* Time for normal buffer to age before
    we flush it */
    int age_super; /* Time for superblock to age before we
    @@ -486,7 +484,6 @@
    return;
    }
    nr_buffers_type[bh->b_list]--;
    - size_buffers_type[bh->b_list] -= bh->b_size;
    remove_from_hash_queue(bh);
    remove_from_lru_list(bh);
    }
    @@ -560,7 +557,6 @@
    (*bhp)->b_prev_free = bh;

    nr_buffers_type[bh->b_list]++;
    - size_buffers_type[bh->b_list] += bh->b_size;

    /* Put the buffer in new hash-queue if it has a device. */
    bh->b_next = NULL;
    @@ -814,19 +810,13 @@
    file_buffer(buf, dispose);
    if(dispose == BUF_DIRTY) {
    int too_many = (nr_buffers * bdf_prm.b_un.nfract/100);
    - int too_large = (num_physpages * bdf_prm.b_un.pct_dirt/100);

    /* This buffer is dirty, maybe we need to start flushing.
    * If too high a percentage of the buffers are dirty...
    */
    - if (nr_buffers_type[BUF_DIRTY] > too_many ||
    - size_buffers_type[BUF_DIRTY]/PAGE_SIZE > too_large) {
    - if (nr_buffers_type[BUF_LOCKED] > 3 * bdf_prm.b_un.ndirty)
    - wakeup_bdflush(1);
    - else
    - wakeup_bdflush(0);
    - }
    -
    + if (nr_buffers_type[BUF_DIRTY] > too_many)
    + wakeup_bdflush(1);
    +
    /* If this is a loop device, and
    * more than half of the buffers are dirty...
    * (Prevents no-free-buffers deadlock with loop device.)
    Andrea Arcangeli



    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.rutgers.edu
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-03-22 13:50    [W:0.025 / U:59.812 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site