
===========================================================================
Index: linux/fs/pagebuf/page_buf_io.c
===========================================================================

--- /usr/tmp/TmpDir.30093-0/linux/fs/pagebuf/page_buf_io.c_1.79	Thu Jun  7 14:35:09 2001
+++ linux/fs/pagebuf/page_buf_io.c	Thu Jun  7 14:37:24 2001
@@ -349,6 +349,7 @@
 		return 0;
 	}
 
+	pb->pb_dev = mp->pbm_dev;
 	pb->pb_bn = mp->pbm_bn +
 			(mp->pbm_delta >> inode->i_sb->s_blocksize_bits);
 
@@ -767,7 +768,7 @@
 		BUG();
 	}
 	if (!page->buffers)
-		create_empty_buffers(page, inode->i_dev, PAGE_CACHE_SIZE);
+		create_empty_buffers(page, mp->pbm_dev, PAGE_CACHE_SIZE);
 	bh = page->buffers;
 	/*
 	 * pbm_offset:pbm_bn :: (page's offset):???

===========================================================================
Index: linux/fs/xfs/linux/xfs_lrw.c
===========================================================================

--- /usr/tmp/TmpDir.30093-0/linux/fs/xfs/linux/xfs_lrw.c_1.100	Thu Jun  7 14:35:09 2001
+++ linux/fs/xfs/linux/xfs_lrw.c	Thu May 31 14:50:43 2001
@@ -336,6 +336,10 @@
 		XFS_ILOCK(mp, io, XFS_ILOCK_EXCL|XFS_EXTSIZE_RD);
 		return error;
 	}
+	if (io->io_flags & XFS_IOCORE_RT) {
+		pb->pb_dev = mp->m_rtdev;
+	}
+
 	if ((imap.br_startblock > 0) &&
 	    (imap.br_startblock != DELAYSTARTBLOCK)) {
 		pb->pb_bn = XFS_FSB_TO_DB_IO(io, imap.br_startblock);
@@ -1212,7 +1216,11 @@
 		nisize = io->io_new_size;
 
 	for (im=0, pbm=0; im < imaps && pbm < pbmaps; im++,pbmapp++,imap++,pbm++) {
-
+		if (io->io_flags & XFS_IOCORE_RT) {
+			pbmapp->pbm_dev = mp->m_rtdev;
+		} else {
+			pbmapp->pbm_dev = mp->m_dev;
+		}
 		pbmapp->pbm_offset = XFS_FSB_TO_B(mp, imap->br_startoff);
 		pbmapp->pbm_delta = offset - pbmapp->pbm_offset;
 		pbmapp->pbm_bsize = XFS_FSB_TO_B(mp, imap->br_blockcount);

===========================================================================
Index: linux/include/linux/page_buf.h
===========================================================================

--- /usr/tmp/TmpDir.30093-0/linux/include/linux/page_buf.h_1.91	Thu Jun  7 14:35:10 2001
+++ linux/include/linux/page_buf.h	Wed Jun  6 12:56:59 2001
@@ -77,7 +77,6 @@
  *	Base types 
  */
 
-/* typedef unsigned long page_buf_daddr_t;*/		/* disk address in blocks */
 /* daddr must be signed since -1 is used for bmaps that are not yet allocated */
 typedef loff_t page_buf_daddr_t;
 
@@ -125,6 +124,7 @@
 
 typedef struct page_buf_bmap_s {
 	page_buf_daddr_t pbm_bn;	/* block number in file system 	    */
+	kdev_t		pbm_dev;	/* device for I/O		    */
 	loff_t 		pbm_offset;	/* byte offset of mapping in file   */
 	size_t		pbm_delta;	/* offset of request into bmap	    */
 	size_t		pbm_bsize;	/* size of this mapping in bytes    */
