On 12/18/13 12:33 AM, Gaurav Mahajan wrote:
Hi George,

Thanks for the response..!!

On Tue, Dec 17, 2013 at 7:27 PM, George Wilson <[email protected] <mailto:[email protected]>> wrote:


    On 12/17/13 5:21 AM, Gaurav Mahajan wrote:
    Hi all,

    I am trying to understand relations of root ZIO and children ZIO.

    This is what I have understood.. Please correct me if I'm wrong.

    Usually whenever we want to do a series of IO operations like in
    sync thread.
    We create a root ZIO with zio_root(). Now this root ZIO becomes
    parent for every ZIO that we create while syncing the async data
    to disk (in dbuf_sync_leaf).

    All the child ZIO are issued using zio_nowait()
    After issuing all the children ZIO at the end we call zio_wait()
    on root ZIO.

    So the question that comes in my mind is that after zio_wait for
    root ZIO is over, are we guaranteed that all the children ZIO are
    complete.?

    Yes, the root zio cannot complete until all its children have
    completed.


Why do we need the convergence logic then (multiple pass while syncing) ?
Why dsl_pool_sync is called multiple times?

We have the multiple passes since every time you write a block you end up dirtying some other piece of metadata that must now be written. The multiple passes allow us to write any metadata that was dirtied by the previous pass, and so on. Eventually we stop COWing blocks to make sure that we don't end up in an infinite loop.

I'm asking this because dsl_pool_sync creates root ZIO, which intern calls the dnode_sync Now for indirect blocks the root ZIO becomes parent of indirect block's ZIO.
then indirect blocks ZIO becomes parent for data/leaf block ZIO.
So i guess in one pass only it will write all the dirty data for all the dirty dnode in an object set.

As you've found the majority of the bulk data is written in sync pass 1. Subsequent sync passes will deal with the metadata that was changed as a result of writing all the bulk data.

- George


Please correct me if i'm wrong.

Thanks !!
Gaurav.

    - George

    complete in sense like block allocation and data write are done
    and io_done callback are complete.

    I may be wrong with my understanding. Please correct me.

    Thanks !!!
    Gaurav.



    _______________________________________________
    developer mailing list
    [email protected]  <mailto:[email protected]>
    http://lists.open-zfs.org/mailman/listinfo/developer



_______________________________________________
developer mailing list
[email protected]
http://lists.open-zfs.org/mailman/listinfo/developer

Reply via email to