Hi,

On Mon, 2005-01-24 at 17:47, Alex Tomas wrote:

>  SCT> I don't see how that "limit" is relevant here. ...

>               if (bufs == ARRAY_SIZE(wbuf) ||
>                   commit_transaction->t_buffers == NULL ||
>                   space_left < sizeof(journal_block_tag_t) + 16) {
                        /* Force a new descriptor to be generated next
>                            time round the loop. */

Sure.  So we know that for every 63 metadata blocks in the journal, we
can be writing one journal descriptor.  That grows the size of the
transaction slightly, by a factor of 1/63.

But __log_space_left() is supposed to account for that:

        /*
         * Be pessimistic here about the number of those free blocks which
         * might be required for log descriptor control blocks.
         */
        ...
        left -= (left >> 3);

which reduces the estimate of "usable" space left by a full 1/8th, which
is way more than the upper bounds of the effect that the limited wbuf
size ought to have.

journal_extend() uses __log_space_left() too, so ought to have the same
protection.

Actually, I think I'll withdraw the NAK on this patch, because the
change has other benefits ---- it's going to be both a stack-usage and a
performance improvement to use a generous kmalloc()ed wbuf[] here.  But
I still can't see why it would fix the problem you're claiming it
solves.

--Stephen

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

Reply via email to