Re: 2.6.4-mm2

From: Andrew Morton (akpm_at_osdl.org)
Date: 03/18/04

  • Next message: Ross Dickson: "Re: idle Athlon with IOAPIC is 10C warmer since 2.6.3-bk1"
    Date:	Wed, 17 Mar 2004 16:13:38 -0800
    To: Chris Mason <mason@suse.com>
    
    

    Chris Mason <mason@suse.com> wrote:
    >
    > On Wed, 2004-03-17 at 18:51, Andrew Morton wrote:
    > > Chris Mason <mason@suse.com> wrote:
    > > >
    > > > Looks good, but I'm still having problems convincing pagevec_lookup_tag
    > > > to return anything other than 0 when called from
    > > > wait_on_page_writeback_range (ext2, ext3, reiserfs). Any ideas?
    > >
    > > This might help. I'm testing this path now, so there may be more changes..
    > >
    >
    > Well, that's certainly a lot slower ;-)

    For once, that's good.

    > I've got a direct_read_under
    > round going. While you're at it, there's one more bug.
    >
    > The wbc struct used by filemap_fdatawrite doesn't initialize
    > wbc.nonblocking to zero. stack magic might give us a 1 there, leading
    > to an early exit from mpage_writepages even when doing a WB_SYNC_ALL.

    I hope not.

    static int __filemap_fdatawrite(struct address_space *mapping, int sync_mode)
    {
            int ret;
            struct writeback_control wbc = {
                    .sync_mode = sync_mode,
                    .nr_to_write = mapping->nrpages * 2,
            };

    When you initialise some of the structure in this way the compiler will
    zero out all the other fields.

    (gets worried)

    yup.

    struct thing {
            int a;
            int b[1000];
    };

    foo()
    {
            int a[1000];

            memset(a, 1, sizeof(a));
    }

    bar()
    {
            struct thing t = {
                    .a = 1
            };
            int i;

            for (i = 0; i < 1000; i++) {
                    if (t.b[i]) {
                            printf("bad\n");
                            return;
                    }
            }
    }

    zot()
    {
            struct thing t;
            int i;

            for (i = 0; i < 1000; i++) {
                    if (t.b[i]) {
                            printf("good\n");
                            return;
                    }
            }
    }

    main()
    {
            foo();
            bar();
            foo();
            zot();
    }

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


  • Next message: Ross Dickson: "Re: idle Athlon with IOAPIC is 10C warmer since 2.6.3-bk1"