All of lore.kernel.org
 help / color / mirror / Atom feed
From: William Lee Irwin III <wli@holomorphy.com>
To: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: David Chinner <dgc@sgi.com>, Theodore Tso <tytso@mit.edu>,
	Andrew Morton <akpm@linux-foundation.org>,
	clameter@sgi.com, linux-kernel@vger.kernel.org,
	Mel Gorman <mel@skynet.ie>, Jens Axboe <jens.axboe@oracle.com>,
	Badari Pulavarty <pbadari@gmail.com>,
	Maxim Levitsky <maximlevitsky@gmail.com>
Subject: Re: [00/17] Large Blocksize Support V3
Date: Mon, 7 May 2007 00:06:38 -0700	[thread overview]
Message-ID: <20070507070638.GC19966@holomorphy.com> (raw)
In-Reply-To: <20070507064925.GB19966@holomorphy.com>

David Chinner <dgc@sgi.com> writes:
>>> Right - so how do we efficiently  manipulate data inside a large
>>> block that spans multiple discontigous pages if we don't vmap
>>> it?

On Mon, May 07, 2007 at 12:43:19AM -0600, Eric W. Biederman wrote:
>> You don't manipulate data except for copy_from_user, copy_to_user.
>> That is easy comparatively to deal with, and certainly doesn't
>> need vmap.
>> Meta-data may be trickier, but a lot of that depends on your
>> individual filesystem and how it organizes it's meta-data.

On Sun, May 06, 2007 at 11:49:25PM -0700, William Lee Irwin III wrote:
> I wonder what happened to my pagearray patches.

I never really got the thing working, but I had an idea for a sort of
library to do this. This is/was probably against something like 2.6.5
but I honestly have no idea. Maybe this makes it something of an API
proposal.


-- wli


Index: linux-2.6/include/linux/pagearray.h
===================================================================
--- linux-2.6.orig/include/linux/pagearray.h	2004-04-06 10:56:48.000000000 -0700
+++ linux-2.6/include/linux/pagearray.h	2005-04-22 06:06:02.677494584 -0700
@@ -0,0 +1,24 @@
+#ifndef _LINUX_PAGEARRAY_H
+#define _LINUX_PAGEARRAY_H
+
+struct scatterlist;
+struct vm_area_struct;
+struct page;
+
+struct pagearray {
+	struct page **pages;
+	int nr_pages;
+	size_t length;
+};
+
+int alloc_page_array(struct pagearray *, const int, const size_t);
+void free_page_array(struct pagearray *);
+void zero_page_array(struct pagearray *);
+struct page *nopage_page_array(const struct vm_area_struct *, unsigned long, unsigned long, int *, struct pagearray *);
+int mmap_page_array(const struct vm_area_struct *, struct pagearray *, const size_t, const size_t);
+int copy_page_array_to_user(struct pagearray *, void __user *, const size_t, const size_t);
+int copy_page_array_from_user(struct pagearray *, void __user *, const size_t, const size_t);
+struct scatterlist *pagearray_to_scatterlist(struct pagearray *, size_t, size_t, int *);
+void *vmap_pagearray(struct pagearray *);
+
+#endif /* _LINUX_PAGEARRAY_H */
Index: linux-2.6/mm/Makefile
===================================================================
--- linux-2.6.orig/mm/Makefile	2005-04-22 06:01:29.786980248 -0700
+++ linux-2.6/mm/Makefile	2005-04-22 06:06:02.677494584 -0700
@@ -10,7 +10,7 @@
 obj-y			:= bootmem.o filemap.o mempool.o oom_kill.o fadvise.o \
 			   page_alloc.o page-writeback.o pdflush.o \
 			   readahead.o slab.o swap.o truncate.o vmscan.o \
-			   prio_tree.o $(mmu-y)
+			   prio_tree.o pagearray.o $(mmu-y)
 
 obj-$(CONFIG_SWAP)	+= page_io.o swap_state.o swapfile.o thrash.o
 obj-$(CONFIG_HUGETLBFS)	+= hugetlb.o
Index: linux-2.6/mm/pagearray.c
===================================================================
--- linux-2.6.orig/mm/pagearray.c	2004-04-06 10:56:48.000000000 -0700
+++ linux-2.6/mm/pagearray.c	2005-04-22 06:20:26.154226168 -0700
@@ -0,0 +1,293 @@
+#include <linux/mm.h>
+#include <linux/vmalloc.h>
+#include <linux/module.h>
+#include <linux/highmem.h>
+#include <linux/pagearray.h>
+#include <asm/uaccess.h>
+#include <asm/scatterlist.h>
+
+/**
+ * alloc_page_array - allocate an array of pages
+ * @pages: the array of pages to be allocated
+ * @gfp_mask: the GFP flags to be passed to the allocator
+ * @length: the amount of data the array needs to hold
+ *
+ * Allocate an array of page pointers long enough so that when full of
+ * pages, the amount of data in length may be stored, then allocate the
+ * pages for each position in the array.
+ */
+int alloc_page_array(struct pagearray *pages, const int gfp_mask, const size_t length)
+{
+	int k;
+	pages->length = PAGE_ALIGN(length);
+	pages->nr_pages = PAGE_ALIGN(length) >> PAGE_SHIFT;
+	pages->pages = kmalloc(pages->nr_pages*sizeof(struct page *), gfp_mask);
+	if (!pages->pages)
+		return -ENOMEM;
+	memset(pages->pages, 0, pages->nr_pages*sizeof(struct page *));
+	for (k = 0; k < pages->nr_pages; ++k) {
+		pages->pages[k] = alloc_page(gfp_mask);
+		if (!pages->pages[k])
+			goto enomem;
+	}
+	return 0;
+enomem:
+	for (--k; k >= 0; --k)
+		__free_page(pages->pages[k]);
+	kfree(pages->pages);
+	memset(pages, 0, sizeof(struct pagearray));
+	return -ENOMEM;
+}
+EXPORT_SYMBOL(alloc_page_array);
+
+/**
+ * free_page_array - free an array of pages
+ * @pages: the array of pages to be freed
+ *
+ * Free an array of pages, including the pages pointed to by the array.
+ */
+void free_page_array(struct pagearray *pages)
+{
+	int k;
+	for (k = 0; k < pages->nr_pages; ++k)
+		__free_page(pages->pages[k]);
+	kfree(pages->pages);
+	memset(pages, 0, sizeof(struct pagearray));
+}
+EXPORT_SYMBOL(free_page_array);
+
+/**
+ * zero_page_array - zero an array of pages
+ * @pages: the array of pages
+ *
+ * Zero out a set of pages pointed to by an array of page pointers.
+ */
+void zero_page_array(struct pagearray *pages)
+{
+	int k;
+	for (k = 0; k < pages->nr_pages; ++k)
+		clear_highpage(pages->pages[k]);
+}
+EXPORT_SYMBOL(zero_page_array);
+
+/**
+ * nopage_page_array - retrieve the page to satisfy a fault with
+ * @vma: the user virtual memory area the fault occurred on
+ * @pgoff: an offset into the underlying array to add to ->vm_pgoff
+ * @vaddr: the user virtual address the fault occurred on
+ * @type: the type of fault that occurred, to be returned
+ * @pages: the array of page pointers
+ *
+ * This is a trivial helper for ->nopage() methods. Simply return the
+ * result of this function after retrieving the page array and its
+ * descriptive parameters from vma->vm_private_data, for instance:
+ * return nopage_page_array(vma, pgoff, vaddr, type, pages);
+ * as the last thing in the ->nopage() method after fetching the
+ * parameters from vma->vm_private_data.
+ */
+struct page *nopage_page_array(const struct vm_area_struct *vma, unsigned long pgoff, unsigned long vaddr, int *type, struct pagearray *pages)
+{
+	if (vaddr >= vma->vm_end)
+		goto sigbus;
+	pgoff += vma->vm_pgoff + ((vaddr - vma->vm_start) >> PAGE_SHIFT);
+	if (pgoff > PAGE_ALIGN(pages->length)/PAGE_SIZE)
+		goto sigbus;
+	if (pgoff > pages->nr_pages)
+		goto sigbus;
+	get_page(pages->pages[pgoff]);
+	if (type)
+		*type = VM_FAULT_MINOR;
+	return pages->pages[pgoff];
+sigbus:
+	if (type)
+		*type = VM_FAULT_SIGBUS;
+	return NOPAGE_SIGBUS;
+}
+EXPORT_SYMBOL(nopage_page_array);
+
+/**
+ * mmap_page_array - mmap an array of pages
+ * @vma: the vma where the mmapping is done
+ * @pages: the array of page pointers
+ * @offset: the offset into the vma in bytes where mmapping should be done
+ * @length: the amount of data that should be mmap'd, in bytes
+ *
+ * vma->vm_pgoff specifies how far out into the page array mmapping
+ * should be done. The page array is treated as a list of the pieces
+ * of an object and vma->vm_pgoff the offset into that object.
+ * vma->vm_page_prot in turn specifies the protections to map with.
+ * offset says where in userspace relative to vma->vm_start to put
+ * the mappings of the pieces of the page array. length specifies how
+ * much data should be mapped into userspace.
+ */
+#ifdef CONFIG_MMU
+int mmap_page_array(const struct vm_area_struct *vma, struct pagearray *pages, const size_t offset, const size_t length)
+{
+	int k, ret = 0;
+	unsigned long end, off, vaddr = vma->vm_start + offset;
+	off = (vma->vm_pgoff << PAGE_SHIFT) + offset;
+	end = vaddr + length;
+	if (vaddr >= end)
+		return -EINVAL;
+	else if (offset != PAGE_ALIGN(offset))
+		return -EINVAL;
+	else if (offset + length > pages->length)
+		return -EINVAL;
+	k = off >> PAGE_SHIFT;
+	while (vaddr < end && !ret) {
+		pgd_t *pgd;
+		pud_t *pud;
+
+		spin_lock(&vma->vm_mm->page_table_lock);
+		pgd = pgd_offset(vma->vm_mm, vaddr);
+		pud = pud_alloc(vma->vm_mm, pgd, vaddr);
+		if (!pud) {
+			ret = -ENOMEM;
+			break;
+		} else {
+			pmd_t *pmd = pmd_alloc(vma->vm_mm, pud, vaddr);
+			if (!pmd) {
+				ret = -ENOMEM;
+				break;
+			} else {
+				pte_t val, *pte;
+
+				pte = pte_alloc_map(vma->vm_mm, pmd, vaddr);
+				if (!pte) {
+					ret = -ENOMEM;
+					break;
+				} else {
+					val = mk_pte(pages->pages[k], vma->vm_page_prot);
+					set_pte(pte, val);
+					pte_unmap(pte);
+					update_mmu_cache(vma, vaddr, val);
+				}
+			}
+		}
+		spin_unlock(&vma->vm_mm->page_table_lock);
+		vaddr += PAGE_SIZE;
+		off += PAGE_SIZE;
+		++k;
+	}
+	return ret;
+}
+#else
+int mmap_page_array(const struct vm_area_struct *vma, struct pagearray *pages, const size_t offset, const size_t length)
+{
+	return -ENOSYS;
+}
+#endif
+EXPORT_SYMBOL(mmap_page_array);
+
+static int copy_page_array(struct pagearray *pages, char __user *buf, const size_t offset, const size_t length, const int rw)
+{
+	size_t pos = 0, off = offset, remaining = length;
+	int k;
+
+	if (length > pages->length)
+		return -EFAULT;
+	else if (length > MM_VM_SIZE(current->mm))
+		return -EFAULT;
+	else if ((unsigned long)buf > MM_VM_SIZE(current->mm) - length)
+		return -EFAULT;
+
+	for (k = off >> PAGE_SHIFT; k < pages->nr_pages && remaining > 0; ++k) {
+		unsigned long left, tail, suboff = off & PAGE_MASK;
+		char *kbuf = kmap_atomic(pages->pages[k], KM_USER0);
+		tail = min(PAGE_SIZE - suboff, (unsigned long)remaining);
+		if (rw)
+			left = __copy_to_user(&buf[pos], &kbuf[suboff], tail);
+		else
+			left = __copy_from_user(&kbuf[suboff], &buf[pos], tail);
+		kunmap_atomic(kbuf, KM_USER0);
+		if (left) {
+			kbuf = kmap(pages->pages[k]);
+			if (rw)
+				left = __copy_to_user(&buf[pos], &kbuf[suboff], tail);
+			else
+				left = __copy_from_user(&kbuf[suboff], &buf[pos], tail);
+			kunmap(pages->pages[k]);
+		}
+		BUG_ON(tail - left > remaining);
+		remaining -= tail - left;
+		pos += tail - left;
+		off = (off + PAGE_SIZE) & PAGE_MASK;
+		if (left)
+			break;
+	}
+	return remaining;
+}
+
+/**
+ * copy_page_array_to_user - copy data from a page array to userspace
+ * @pages: the array of page pointers holding the data
+ * @buf: the user virtual address to start depositing the data at
+ * @offset: the offset into the page array to start copying data from
+ * @length: how much data to copy
+ *
+ * Copy data from a page array, starting offset bytes into the array
+ * when it's treated as a list of the pieces of an object in order,
+ * to userspace.
+ */
+int copy_page_array_to_user(struct pagearray *pages, void __user *buf, const size_t offset, const size_t length)
+{
+	return copy_page_array(pages, buf, offset, length, 1);
+}
+EXPORT_SYMBOL(copy_page_array_to_user);
+
+/**
+ * copy_page_array_from_user - copy data from userspace to a page array
+ * @pages: the array of page pointers holding the data
+ * @buf: the user virtual address to start reading the data from
+ * @offset: the offset into the page array to start copying data to
+ * @length: how much data to copy
+ *
+ * Copy data to a page array, starting offset bytes into the array
+ * when it's treated as a list of the pieces of an object in order,
+ * from userspace.
+ */
+int copy_page_array_from_user(struct pagearray *pages, void __user *buf, const size_t offset, const size_t length)
+{
+	return copy_page_array(pages, buf, offset, length, 0);
+}
+EXPORT_SYMBOL(copy_page_array_from_user);
+
+/**
+ * pagearray_to_scatterlist - generate a scatterlist for a slice of a pagearray
+ * @pages: the pagearray to make a scatterlist for
+ * @offset: the offset into the pagearray of the start of the slice
+ * @length: the length of the slice of the pagearray
+ * @sglist_len: the size of the generated scatterlist
+ *
+ * Set up a scatterlist covering a slice of a pagearray, starting at offset
+ * bytes into the pagearray, with length length.
+ */
+struct scatterlist *pagearray_to_scatterlist(struct pagearray *pages, size_t offset, size_t length, int *sglist_len)
+{
+	struct scatterlist *sg;
+	int i, nr_pages =
+		(PAGE_ALIGN(offset + length) - (offset & PAGE_MASK))/PAGE_SIZE;
+	sg = kmalloc(nr_pages * sizeof(struct scatterlist), GFP_KERNEL);
+	if (!sg)
+		return NULL;
+	memset(sg, 0, nr_pages * sizeof(struct scatterlist));
+	sg[0].page = pages->pages[offset >> PAGE_SHIFT];
+	sg[0].offset = offset & ~PAGE_MASK;
+	sg[0].length = PAGE_SIZE - sg[0].offset;
+	offset = (offset + PAGE_SIZE) & PAGE_MASK;
+	for (i = 1; i < nr_pages - 1; ++i) {
+		sg[i].page = pages->pages[i];
+		sg[i].length = PAGE_SIZE;
+	}
+	sg[i].page = pages->pages[i];
+	sg[i].length = (offset + length) & ~PAGE_MASK;
+	*sglist_len = nr_pages;
+	return sg;
+}
+EXPORT_SYMBOL(pagearray_to_scatterlist);
+
+void *vmap_pagearray(struct pagearray *pages)
+{
+	return vmap(pages->pages, pages->nr_pages, VM_MAP, PAGE_KERNEL);
+}
+EXPORT_SYMBOL(vmap_pagearray);

  reply	other threads:[~2007-05-07  7:06 UTC|newest]

Thread overview: 235+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-04-24 22:21 [00/17] Large Blocksize Support V3 clameter
2007-04-24 22:21 ` [01/17] Remove open coded implementation of memclear_highpage flush clameter
2007-04-24 22:21 ` [02/17] Fix page allocation flags in grow_dev_page() clameter
2007-04-24 22:21 ` [03/17] Fix: find_or_create_page does not spread memory clameter
2007-04-24 22:21 ` [04/17] Free up page->private for compound pages clameter
2007-04-24 22:21 ` [05/17] More compound page features clameter
2007-04-24 22:21 ` [06/17] Fix up handling of Compound head pages clameter
2007-04-24 22:21 ` [07/17] vmstat.c: Support accounting for compound pages clameter
2007-04-24 22:21 ` [08/17] Define functions for page cache handling clameter
2007-04-24 23:00   ` Eric Dumazet
2007-04-25  6:27     ` Christoph Lameter
2007-04-24 22:21 ` [09/17] Convert PAGE_CACHE_xxx -> page_cache_xxx function calls clameter
2007-04-24 22:21 ` [10/17] Variable Order Page Cache: Add clearing and flushing function clameter
2007-04-26  7:02   ` Christoph Lameter
2007-04-26  8:14     ` David Chinner
2007-04-24 22:21 ` [11/17] Readahead support for the variable order page cache clameter
2007-04-24 22:21 ` [12/17] Variable Page Cache Size: Fix up reclaim counters clameter
2007-04-24 22:21 ` [13/17] set_blocksize: Allow to set a larger block size than PAGE_SIZE clameter
2007-04-24 22:21 ` [14/17] Add VM_BUG_ONs to check for correct page order clameter
2007-04-24 22:21 ` [15/17] ramfs: Variable order page cache support clameter
2007-04-24 22:21 ` [16/17] ext2: " clameter
2007-04-24 22:21 ` [17/17] xfs: " clameter
2007-04-25  0:46 ` [00/17] Large Blocksize Support V3 Jörn Engel
2007-04-25  0:47 ` H. Peter Anvin
2007-04-25  3:11 ` William Lee Irwin III
2007-04-25 11:35 ` Jens Axboe
2007-04-25 15:36   ` Christoph Lameter
2007-04-25 17:53     ` Jens Axboe
2007-04-25 18:03       ` Christoph Lameter
2007-04-25 18:05         ` Jens Axboe
2007-04-25 18:14           ` Christoph Lameter
2007-04-25 18:16             ` Jens Axboe
2007-04-25 13:28 ` Mel Gorman
2007-04-25 15:23   ` Christoph Lameter
2007-04-25 22:46 ` Badari Pulavarty
2007-04-26  1:14   ` David Chinner
2007-04-26  1:17     ` David Chinner
2007-04-26  4:51 ` Eric W. Biederman
2007-04-26  5:05   ` Christoph Lameter
2007-04-26  5:44     ` Eric W. Biederman
2007-04-26  6:37       ` Christoph Lameter
2007-04-26  9:16         ` Mel Gorman
2007-04-26  6:38       ` Nick Piggin
2007-04-26  6:46         ` Christoph Lameter
2007-04-26  6:57           ` Nick Piggin
2007-04-26  7:10             ` Christoph Lameter
2007-04-26  7:22               ` Nick Piggin
2007-04-26  7:34                 ` Christoph Lameter
2007-04-26  7:48                   ` Nick Piggin
2007-04-26  9:20                     ` David Chinner
2007-04-26 13:53                       ` Avi Kivity
2007-04-26 14:33                         ` David Chinner
2007-04-26 14:56                           ` Avi Kivity
2007-04-26 15:20                       ` Nick Piggin
2007-04-26 17:42                         ` Jens Axboe
2007-04-26 18:59                           ` Eric W. Biederman
2007-04-26 16:07                     ` Christoph Hellwig
2007-04-27 10:05                       ` Nick Piggin
2007-04-27 13:06                         ` Mel Gorman
2007-04-26 13:50                   ` William Lee Irwin III
2007-04-26 18:09                     ` Eric W. Biederman
2007-04-26 23:34                       ` William Lee Irwin III
2007-04-26  7:48                 ` Questions on printk and console_drivers gshan
2007-04-26 10:06           ` [00/17] Large Blocksize Support V3 Mel Gorman
2007-04-26 14:47             ` Nick Piggin
2007-04-26 15:58         ` Christoph Hellwig
2007-04-26 16:05           ` Jens Axboe
2007-04-26 16:16             ` Christoph Hellwig
2007-04-26 13:28       ` Alan Cox
2007-04-26 13:30         ` Jens Axboe
2007-04-29 14:12         ` Matt Mackall
2007-04-28 10:55       ` Pierre Ossman
2007-04-28 15:39         ` Eric W. Biederman
2007-04-26  5:37   ` Nick Piggin
2007-04-26  6:38     ` David Chinner
2007-04-26  6:50       ` Nick Piggin
2007-04-26  8:40         ` Mel Gorman
2007-04-26  8:55           ` Nick Piggin
2007-04-26 10:30             ` Mel Gorman
2007-04-26 10:54               ` Eric W. Biederman
2007-04-26 12:23                 ` Mel Gorman
2007-04-26 17:58                 ` Christoph Lameter
2007-04-26 18:02                   ` Jens Axboe
2007-04-26 16:11         ` Christoph Hellwig
2007-04-26 17:49           ` Eric W. Biederman
2007-04-26 18:03             ` Christoph Lameter
2007-04-26 18:03               ` Jens Axboe
2007-04-26 18:09                 ` Christoph Hellwig
2007-04-26 18:12                   ` Jens Axboe
2007-04-26 18:24                     ` Christoph Hellwig
2007-04-26 18:24                       ` Jens Axboe
2007-04-26 18:28                     ` Christoph Lameter
2007-04-26 18:29                       ` Jens Axboe
2007-04-26 18:35                         ` Christoph Lameter
2007-04-26 18:39                           ` Jens Axboe
2007-04-26 19:35                             ` Eric W. Biederman
2007-04-26 19:42                               ` Jens Axboe
2007-04-27  4:05                                 ` Eric W. Biederman
2007-04-27 10:26                                   ` Nick Piggin
2007-04-27 13:51                                     ` Eric W. Biederman
2007-04-26 20:22                             ` Mel Gorman
2007-04-27  0:21                               ` William Lee Irwin III
2007-04-27  5:16                               ` Jens Axboe
2007-04-27 10:38           ` Nick Piggin
2007-04-26 10:10       ` Eric W. Biederman
2007-04-26 13:50         ` David Chinner
2007-04-26 14:40           ` William Lee Irwin III
2007-04-26 15:38           ` Nick Piggin
2007-04-26 15:58             ` William Lee Irwin III
2007-04-27  9:46               ` Nick Piggin
2007-04-27  0:19           ` Jeremy Higdon
2007-04-26 18:07         ` Christoph Lameter
2007-04-26 18:45           ` Eric W. Biederman
2007-04-26 18:59             ` Christoph Lameter
2007-04-26 19:21               ` Eric W. Biederman
2007-04-26  6:40     ` Christoph Lameter
2007-04-26  6:53       ` Nick Piggin
2007-04-26  7:04         ` David Chinner
2007-04-26  7:07           ` Nick Piggin
2007-04-26  7:11             ` Christoph Lameter
2007-04-26  7:17               ` Nick Piggin
2007-04-26  7:28                 ` Christoph Lameter
2007-04-26  7:45                   ` Nick Piggin
2007-04-26 18:10                     ` Christoph Lameter
2007-04-27 10:08                       ` Nick Piggin
2007-04-26  7:07         ` Christoph Lameter
2007-04-26  7:15           ` Nick Piggin
2007-04-26  7:22             ` Christoph Lameter
2007-04-26  7:42               ` Nick Piggin
2007-04-26 10:48                 ` Mel Gorman
2007-04-26 12:37                 ` Andy Whitcroft
2007-04-26 14:18                   ` David Chinner
2007-04-26 15:08                   ` Nick Piggin
2007-04-26 15:19                     ` William Lee Irwin III
2007-04-26 15:28                     ` David Chinner
2007-04-26 14:53                 ` William Lee Irwin III
2007-04-26 18:16                   ` Christoph Lameter
2007-04-26 18:21                   ` Eric W. Biederman
2007-04-27  0:32                     ` William Lee Irwin III
2007-04-27 10:22                       ` Nick Piggin
2007-04-27 12:58                         ` William Lee Irwin III
2007-04-27 13:06                           ` Nick Piggin
2007-04-27 14:49                             ` William Lee Irwin III
2007-04-26 18:13                 ` Christoph Lameter
2007-04-27 10:15                   ` Nick Piggin
2007-04-26 14:49               ` William Lee Irwin III
2007-04-26 18:50 ` Maxim Levitsky
2007-04-27  2:04 ` Andrew Morton
2007-04-27  2:27   ` David Chinner
2007-04-27  2:53     ` Andrew Morton
2007-04-27  3:47       ` [00/17] Large Blocksize Support V3 (mmap conceptual discussion) Christoph Lameter
2007-04-27  4:20       ` [00/17] Large Blocksize Support V3 David Chinner
2007-04-27  5:15         ` Andrew Morton
2007-04-27  5:49           ` Christoph Lameter
2007-04-27  6:55             ` Andrew Morton
2007-04-27  7:19               ` Christoph Lameter
2007-04-27  7:26                 ` Andrew Morton
2007-04-27  8:37                   ` David Chinner
2007-04-27 12:01                   ` Christoph Lameter
2007-04-27 16:36                   ` David Chinner
2007-04-27 17:34                     ` David Chinner
2007-04-27 19:11                       ` Andrew Morton
2007-04-28  1:43                         ` Nick Piggin
2007-04-28  8:04                           ` Peter Zijlstra
2007-04-28  8:22                             ` Andrew Morton
2007-04-28  8:32                               ` Peter Zijlstra
2007-04-28  8:55                                 ` Andrew Morton
2007-04-28  9:36                                   ` Peter Zijlstra
2007-04-28 14:09                               ` William Lee Irwin III
2007-04-28 18:26                                 ` Andrew Morton
2007-04-28 19:19                                   ` William Lee Irwin III
2007-04-28 21:28                                     ` Andrew Morton
2007-04-28  3:17                         ` David Chinner
2007-04-28  3:49                           ` Christoph Lameter
2007-04-28  4:56                           ` Andrew Morton
2007-04-28  5:08                             ` Christoph Lameter
2007-04-28  5:36                               ` Andrew Morton
2007-04-28  6:24                                 ` Christoph Lameter
2007-04-28  6:52                                   ` Andrew Morton
2007-04-30  5:30                                     ` Christoph Lameter
2007-04-28  9:43                             ` Alan Cox
2007-04-28  9:58                               ` Andrew Morton
2007-04-28 10:21                                 ` Alan Cox
2007-04-28 10:25                                   ` Andrew Morton
2007-04-28 11:29                                     ` Alan Cox
2007-04-28 14:37                                       ` William Lee Irwin III
2007-04-27  7:22               ` Christoph Lameter
2007-04-27  7:29                 ` Andrew Morton
2007-04-27  7:35                   ` Christoph Lameter
2007-04-27  7:43                     ` Andrew Morton
2007-04-27 11:05               ` Paul Mackerras
2007-04-27 11:41                 ` Nick Piggin
2007-04-27 12:12                   ` Christoph Lameter
2007-04-27 12:25                     ` Nick Piggin
2007-04-27 13:39                       ` Christoph Hellwig
2007-04-28  2:27                         ` Nick Piggin
2007-04-28  2:39                           ` William Lee Irwin III
2007-04-28  2:50                             ` Nick Piggin
2007-04-28  3:16                               ` William Lee Irwin III
2007-04-28  8:16                           ` Christoph Hellwig
2007-04-27 16:48                       ` Christoph Lameter
2007-04-27 13:37                     ` Christoph Hellwig
2007-04-27 12:14                   ` Paul Mackerras
2007-04-27 12:36                     ` Nick Piggin
2007-04-27 13:42                     ` Christoph Hellwig
2007-04-27 11:58                 ` Christoph Lameter
2007-04-27 13:44               ` William Lee Irwin III
2007-04-27 19:15                 ` Andrew Morton
2007-04-28  2:21                   ` William Lee Irwin III
2007-04-27  6:09           ` David Chinner
2007-04-27  7:04             ` Andrew Morton
2007-04-27  8:03               ` David Chinner
2007-04-27  8:48                 ` Andrew Morton
2007-04-27 16:45                   ` Theodore Tso
2007-05-04 13:33                     ` Eric W. Biederman
2007-05-07  4:29                       ` David Chinner
2007-05-07  4:48                         ` Eric W. Biederman
2007-05-07  5:27                           ` David Chinner
2007-05-07  6:43                             ` Eric W. Biederman
2007-05-07  6:49                               ` William Lee Irwin III
2007-05-07  7:06                                 ` William Lee Irwin III [this message]
2007-05-08  8:49                                   ` William Lee Irwin III
2007-05-07 16:06                               ` Christoph Lameter
2007-05-07 17:29                                 ` William Lee Irwin III
2007-05-04 12:57                   ` Eric W. Biederman
2007-05-04 13:31                 ` Eric W. Biederman
2007-05-04 16:11                   ` Christoph Lameter
2007-05-07  4:58                   ` David Chinner
2007-05-07  6:56                     ` Eric W. Biederman
2007-05-07 15:17                       ` Weigert, Daniel
2007-04-27 16:55           ` Theodore Tso
2007-04-27 17:32             ` Nicholas Miell
2007-04-27 18:12               ` William Lee Irwin III
2007-04-28 16:39 ` Maxim Levitsky
2007-04-30  5:23   ` Christoph Lameter

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070507070638.GC19966@holomorphy.com \
    --to=wli@holomorphy.com \
    --cc=akpm@linux-foundation.org \
    --cc=clameter@sgi.com \
    --cc=dgc@sgi.com \
    --cc=ebiederm@xmission.com \
    --cc=jens.axboe@oracle.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=maximlevitsky@gmail.com \
    --cc=mel@skynet.ie \
    --cc=pbadari@gmail.com \
    --cc=tytso@mit.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.