[lkml]   [2010]   [Apr]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectDirect aio_write/truncate question
    My be my question appeared to obvious for someone, but still

    fd = open("a", O_DIRECT, )
    fd2 = open("b", O_DIRECT, )
    write(fd, buf ,size) /* allocate blocks for a file */
    fsync(fd) /* Now, it is guaranteed that blocks are allocated.*/
    /* Submit async rewrite request */
    io_prep_pwrite(io, fd, io->u.c.buf, size, 0);
    io_submit(myctx, 1, io); /* Io is in flight after this */
    /* Ok, truncate the file */
    ftruncate(fd, 0)
    /* Reuse truncated block blocks for a new file */
    write(fd2,buf ,size) /* old a's blocks belongs to b now. */

    What protect us from aio request to rewrite content of new file?
    Or even corrupt fs because old blocks may be used as metadata now.
    Seems unmap_underlying_metadata() can not help us here because async
    io context does not dirty or locked any bh because they was already
    allocated. Fairly to say. I can not reproduce rewrite effect.
    I use ext4 with external journal, so where a io_barriers in fs_dev's
    blktrace log.
    Seems what rewrite effect no happens only because blklayer does not
    reorganized issued requests. But nothing is preventing this right?

     \ /
      Last update: 2010-04-24 13:31    [W:0.034 / U:42.520 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site