Re: [PATCH 2/5] [XFS] Make inode flush at ENOSPC synchronous

Dave Chinner
2009-03-16T10:46:50Z

On Mon, Mar 16, 2009 at 05:12:35AM -0400, Christoph Hellwig wrote:
> On Sun, Mar 15, 2009 at 10:31:44PM +1100, Dave Chinner wrote:
> > } else {
> > + int enospc = 0;
> > + ssize_t ret2 = 0;
> > +
> > +write_retry:
> > xfs_rw_enter_trace(XFS_WRITE_ENTER, xip, (void *)iovp, segs,
> > *offset, ioflags);
> > - ret = generic_file_buffered_write(iocb, iovp, segs,
> > + ret2 = generic_file_buffered_write(iocb, iovp, segs,
> > pos, offset, count, ret);
> > + /*
> > + * if we just got an ENOSPC, flush the inode now we
> > + * aren't holding any page locks and retry *once*
> > + */
> > + if (ret2 == -ENOSPC && !enospc) {
> > + error = xfs_flush_pages(xip, 0, -1, 0, FI_NONE);
> > + if (error)
> > + goto out_unlock_internal;
> > + enospc = 1;
> > + goto write_retry;
> > + }
> > + ret = ret2;
>
> Just use filemap_fdatawrite here directly..

OK. will fix.

--
Dave Chinner
david@fromorbit.com