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

Dave Chinner david at fromorbit.com
Mon Mar 16 05:46:06 CDT 2009


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 at fromorbit.com




More information about the xfs mailing list