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

Christoph Hellwig hch at infradead.org
Mon Mar 16 04:12:35 CDT 2009


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..





More information about the xfs mailing list