Hi Al, [These became irrelevant when I reverted the xfs tree for a build error, but will be done when the xfs tree is fixed.] Today's linux-next merge of the vfs tree got a conflict in fs/xfs/linux-2.6/xfs_aops.c between commit 7346e1197eb76e22199b6b4625f129331e0fd7ac ("xfs simplify and speed up direct I/O completions") from the xfs tree and commit b682ce06449c35a85dc5e63fcaab7dba2ba6df9b ("sort out blockdev_direct_IO variants") from the vfs tree. Also between commit 6f6b39eb706f5617750cf02952e4e6d7470c40bf ("xfs: use GFP_NOFS for page cache allocation") from the xfs tree and commit 4478b21470275454f9eb6f590dfe7cc54d643978 ("get rid of block_write_begin_newtrunc") from the vfs tree. I fixed them up (I think - see below) and can carry the fix as necessary. -- Cheers, Stephen Rothwell sfr@xxxxxxxxxxxxxxxx diff --cc fs/xfs/linux-2.6/xfs_aops.c index d24e78f,77a9ecc..0000000 --- a/fs/xfs/linux-2.6/xfs_aops.c +++ b/fs/xfs/linux-2.6/xfs_aops.c @@@ -1471,26 -1655,22 +1471,26 @@@ xfs_vm_direct_IO loff_t offset, unsigned long nr_segs) { - struct file *file = iocb->ki_filp; - struct inode *inode = file->f_mapping->host; - struct block_device *bdev; - ssize_t ret; - - bdev = xfs_find_bdev_for_inode(inode); - - iocb->private = xfs_alloc_ioend(inode, rw == WRITE ? - IO_UNWRITTEN : IO_READ); - - ret = __blockdev_direct_IO(rw, iocb, inode, bdev, iov, offset, - nr_segs, xfs_get_blocks_direct, - xfs_end_io_direct, NULL, 0); + struct inode *inode = iocb->ki_filp->f_mapping->host; + struct block_device *bdev = xfs_find_bdev_for_inode(inode); + ssize_t ret; + + if (rw & WRITE) { + iocb->private = xfs_alloc_ioend(inode, IO_NEW); + - ret = blockdev_direct_IO_no_locking(rw, iocb, inode, bdev, iov, - offset, nr_segs, - xfs_get_blocks_direct, - xfs_end_io_direct_write); ++ ret = __blockdev_direct_IO(rw, iocb, inode, bdev, iov, ++ offset, nr_segs, ++ xfs_get_blocks_direct, ++ xfs_end_io_direct_write, NULL, 0); + if (ret != -EIOCBQUEUED && iocb->private) + xfs_destroy_ioend(iocb->private); + } else { - ret = blockdev_direct_IO_no_locking(rw, iocb, inode, bdev, iov, - offset, nr_segs, - xfs_get_blocks_direct, - NULL); ++ ret = __blockdev_direct_IO(rw, iocb, inode, bdev, iov, ++ offset, nr_segs, ++ xfs_get_blocks_direct, ++ NULL, NULL, 0); + } - if (unlikely(ret != -EIOCBQUEUED && iocb->private)) - xfs_destroy_ioend(iocb->private); return ret; } @@@ -1504,9 -1700,31 +1520,31 @@@ xfs_vm_write_begin struct page **pagep, void **fsdata) { - *pagep = NULL; - return block_write_begin(file, mapping, pos, len, flags | AOP_FLAG_NOFS, - pagep, fsdata, xfs_get_blocks); + int ret; + - ret = block_write_begin(mapping, pos, len, flags, pagep, ++ ret = block_write_begin(mapping, pos, len, flags | AOP_FLAG_NOFS, pagep, + xfs_get_blocks); + if (unlikely(ret)) + xfs_vm_write_failed(mapping, pos + len); + return ret; + } + + STATIC int + xfs_vm_write_end( + struct file *file, + struct address_space *mapping, + loff_t pos, + unsigned len, + unsigned copied, + struct page *page, + void *fsdata) + { + int ret; + + ret = generic_write_end(file, mapping, pos, len, copied, page, fsdata); + if (unlikely(ret < len)) + xfs_vm_write_failed(mapping, pos + len); + return ret; } STATIC sector_t -- To unsubscribe from this list: send the line "unsubscribe linux-next" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html