On Mon, Jan 24, 2011 at 04:12:49AM -0500, Christoph Hellwig wrote: > > diff --git a/fs/xfs/xfs_trans.c b/fs/xfs/xfs_trans.c > > index 50753d3..504a804 100644 > > --- a/fs/xfs/xfs_trans.c > > +++ b/fs/xfs/xfs_trans.c > > @@ -1754,15 +1754,26 @@ xfs_trans_commit_cil( > > */ > > log_vector = xfs_trans_alloc_log_vecs(tp); > > if (!log_vector) > > - return ENOMEM; > > + goto out_enomem; > > > > error = xfs_log_commit_cil(mp, tp, log_vector, commit_lsn, flags); > > - if (error) > > - return error; > > + if (error) { > > + /* > > + * We will only get an error if no modifications have been > > + * made to the items in the transaction. Hence treat it > > + the same as a memory allocation failure. > > + */ > > + goto out_enomem; > > + } > > > > current_restore_flags_nested(&tp->t_pflags, PF_FSTRANS); > > xfs_trans_free(tp); > > return 0; > > + > > +out_enomem: > > + /* caller cleans up transaction */ > > + current_restore_flags_nested(&tp->t_pflags, PF_FSTRANS); > > + return ENOMEM; > > _xfs_trans_commit already restores the process flags for an ENOMEM > return, so the failure from xfs_trans_alloc_log_vecs is already > handled correctly. If we want to handle the EIO return from > xfs_log_commit_cil the same way it just needs to be turned into an > ENOMEM. The big questions is if there's any point in having the > shutdown check in xfs_trans_commit_cil - we already do one just before > applying the trans deltas in _xfs_trans_commit, which is handled > correctly and should be sufficient. True. Removing the shutdown check makes xfs_log_commit_cil() a function that can have a void return. That's probably a better solution, so I'll modify it that way. Cheers, Dave. -- Dave Chinner david@xxxxxxxxxxxxx _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs