vfs_journal.c code questions

Rongsheng Fang rfang at coke.umuc.edu
Tue Mar 8 09:57:36 PST 2005


Please ignore the second question. I thought KKASSERT was doing things
the other way around :)

Thanks,

Rongsheng

On Tue, Mar 08, 2005 at 12:47:05PM -0500, Rongsheng Fang wrote:
> Date: Tue, 8 Mar 2005 12:47:05 -0500
> From: Rongsheng Fang <rfang at xxxxxxxxxxxxx>
> To: kernel at xxxxxxxxxxxxxxxxxxxxxxx
> Subject: vfs_journal.c code questions
> Mail-Followup-To: Rongsheng Fang <rfang at xxxxxxxxxxxxx>,
> 	kernel at xxxxxxxxxxxxxxxxxxxxxxx
> Message-Id: <20050308174705.GB29199 at xxxxxxxxxxxxx>
> 
> I was reading through the vfs_journal.c code and was confused by some
> of the code:
> 
> /usr/src/sys/kern/vfs_journal.c
> 
> In function journal_install_vfs_journal()
> 
> ...
> jrecord_init(jo, &jrec, JREC_STREAMID_DISCONT);
> jrecord_write(&jrec, JTYPE_ASSOCIATE, 0);
> ...
> 
> 
> 1) the `streamid' parameter for jrecord_init() is set to
>    JREC_STREAMID_DISCONT which is defined as 0x0002.
> 
>    While in function jrecord_init():
> 
>     ...
>     if (streamid < 0) {
>         streamid = sid++;       /* XXX need to track stream ids! */
>         if (sid == JREC_STREAMID_JMAX)
>             sid = JREC_STREAMID_JMIN;
>     }
>     jrec->streamid = streamid;
>     ...
> 
>     So now jrec->streamid is JREC_STREAMID_DISCONT (0x0002).
> 
>     Shouldn't streamid be some number between JREC_STREAMID_JMIN and
>     JREC_STREAMID_JMAX?
> 
> #define JREC_STREAMID_JMIN      0x0100  /* lowest allowed general id */
> #define JREC_STREAMID_JMAX      0x2000  /* (one past the highest allowed id) */
> 
> 2) then jrecord_write() comes right after jrecord_init() (also in
>    function journal_install_vfs_journal()): 
>    
>    jrecord_write(&jrec, JTYPE_ASSOCIATE, 0);
> 
>    In function jrecord_write():
>     
>     /*
>      * Try to catch some obvious errors.  Nesting records must specify a
>      * size of 0, and there should be no left-overs from previous operations
>      * (such as incomplete data writeouts).
>      */
>     KKASSERT(bytes == 0 || (rectype & JMASK_NESTED) == 0);
>     KKASSERT(jrec->residual == 0);
> 
>     Then the kernel is going to panic? Actually it's not in practice, so
>     I am a bit confused :(
> 
> Thanks,
> 
> Rongsheng
> 
> !DSPAM:422de5af1814491114!





More information about the Kernel mailing list