On Mon, May 06, 2013 at 02:49:39PM +0200, Jan Kara wrote: ... > > > +/* > > > * start_this_handle: Given a handle, deal with any locking or stalling > > > * needed to make sure that there is enough journal space for the handle > > > * to begin. Attach the handle to a transaction and set up the > > > @@ -151,12 +237,14 @@ static int start_this_handle(journal_t *journal, handle_t *handle, > > > gfp_t gfp_mask) > > > { > > > transaction_t *transaction, *new_transaction = NULL; > > > - tid_t tid; > > > - int needed, need_to_start; > > > int nblocks = handle->h_buffer_credits; > > > unsigned long ts = jiffies; > > > > > > - if (nblocks > journal->j_max_transaction_buffers) { > > > + /* > > > + * 1/2 of transaction can be reserved so we can practically handle > > > + * only 1/2 of maximum transaction size per operation > > > + */ > > > > Sorry, but I don't understand here why we only reserve 1/2 of maximum > > transaction size. > Well, we allow 1/2 of maximum transaction size to be allocated in already > reserved handles. So if someone submitted a request for a handle with > more than 1/2 of maximum transaction size, then we might have to wait for > reserved handles to be freed. That would be a slight complication in the > code and it would also possibly introduce livelocking issues - after a > reserved transaction is freed, someone can reserve a new one before the > large handle creation request is satisfied. Again this can be solved but > the complications simply doesn't seem to be worth it. Fair enough. Thanks for your explanation. Regards, - Zheng -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html