> 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. _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs