Re: [PATCH 0/4] map multiple blocks in get_block() and mpage_readpages()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 2006-03-03 at 12:32 -0800, Andrew Morton wrote:
> Badari Pulavarty <[email protected]> wrote:
> >
> > On Wed, 2006-03-01 at 17:52 -0800, Andrew Morton wrote:
> > > Badari Pulavarty <[email protected]> wrote:
> > > >
> > > > I noticed decent improvements (reduced sys time) on JFS, XFS and ext3.
> > > > (on simple "dd" read tests).
> > > > 
> > > >          (rc3.mm1)      (rc3.mm1 + patches)
> > > > real    0m18.814s       0m18.482s
> > > > user    0m0.000s        0m0.004s
> > > > sys     0m3.240s        0m2.912s
> > > 
> > > With which filesystem?  XFS and JFS implement a larger-than-b_size
> > > ->get_block, but ext3 doesn't.  I'd expect ext3 system time to increase a
> > > bit, if anything?
> > 
> > These numbers are on JFS. With the current ext3 (mainline) - I did
> > find not-really-noticible increase in sys time (due to code overhead).
> > 
> > I tested on ext3 with Mingming's ext3 getblocks() support in -mm also,
> > which showed reduction in sys time.
> > 
> 
> OK, no surprises there.  Things will improve when someone gets around to
> doing multi-block get_block for ext3.

Well, I already did this when I tested Mingming's multiblock work for
ext3. (-mm only patch)

Thanks,
Badari


Mingming Cao recently added multi-block allocation support
for ext3, currently used only by DIO. I added support to map 
multiple blocks for mpage_readpages(). This patch add support 
for ext3_get_block() to deal with multi-block mapping.
Basically it renames ext3_direct_io_get_blocks() as ext3_get_block().

Signed-off-by: Badari Pulavarty <[email protected]>

Index: linux-2.6.16-rc5-mm2/fs/ext3/inode.c
===================================================================
--- linux-2.6.16-rc5-mm2.orig/fs/ext3/inode.c	2006-03-03 13:46:22.000000000 -0800
+++ linux-2.6.16-rc5-mm2/fs/ext3/inode.c	2006-03-03 13:52:15.000000000 -0800
@@ -936,9 +936,8 @@ out:
 
 #define DIO_CREDITS (EXT3_RESERVE_TRANS_BLOCKS + 32)
 
-static int
-ext3_direct_io_get_blocks(struct inode *inode, sector_t iblock,
-		struct buffer_head *bh_result, int create)
+static int ext3_get_block(struct inode *inode, sector_t iblock,
+			struct buffer_head *bh_result, int create)
 {
 	handle_t *handle = journal_current_handle();
 	int ret = 0;
@@ -987,12 +986,6 @@ get_block:
 	return ret;
 }
 
-static int ext3_get_block(struct inode *inode, sector_t iblock,
-			struct buffer_head *bh_result, int create)
-{
-	return ext3_direct_io_get_blocks(inode, iblock, bh_result, create);
-}
-
 /*
  * `handle' can be NULL if create is zero
  */
@@ -1645,10 +1638,10 @@ static ssize_t ext3_direct_IO(int rw, st
 
 	ret = blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev, iov, 
 				 offset, nr_segs,
-				 ext3_direct_io_get_blocks, NULL);
+				 ext3_get_block, NULL);
 
 	/*
-	 * Reacquire the handle: ext3_direct_io_get_block() can restart the
+	 * Reacquire the handle: ext3_get_block() can restart the
 	 * transaction
 	 */
 	handle = journal_current_handle();

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux