All of lore.kernel.org
 help / color / mirror / Atom feed
* [Ocfs2-devel] [PATCH 06/30] ocfs2: Include do_sync_mapping_range() from mainline
  2007-12-20 15:30 [Ocfs2-devel] ocfs2 1.4: A new beginning Sunil Mushran
@ 2007-12-20 15:29 ` Sunil Mushran
  2007-12-21  0:54   ` Joel Becker
  0 siblings, 1 reply; 61+ messages in thread
From: Sunil Mushran @ 2007-12-20 15:29 UTC (permalink / raw)
  To: ocfs2-devel

Commit 5b04aa3a64f854244bc40a6f528176ed50b5c4f6 introduced export symbol
do_sync_mapping_range(). This patch allows one to build ocfs2 with kernels
having/not having that change.

Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
---
 Config.make.in    |    2 +
 configure.in      |    5 +++
 fs/ocfs2/Makefile |    4 ++
 fs/ocfs2/alloc.c  |   93 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 104 insertions(+), 0 deletions(-)

diff --git a/Config.make.in b/Config.make.in
index befeb79..1fe7ddc 100644
--- a/Config.make.in
+++ b/Config.make.in
@@ -59,6 +59,8 @@ EXTRA_CFLAGS += @KAPI_COMPAT_CFLAGS@
 
 DELAYED_WORK_DEFINED = @DELAYED_WORK_DEFINED@
 
+HAS_SYNC_MAPPING_RANGE  = @HAS_SYNC_MAPPING_RANGE@
+
 OCFS_DEBUG = @OCFS_DEBUG@
 
 ifneq ($(OCFS_DEBUG),)
diff --git a/configure.in b/configure.in
index 47b0da0..603dc94 100644
--- a/configure.in
+++ b/configure.in
@@ -172,6 +172,11 @@ OCFS2_CHECK_KERNEL([zero_user_page() in highmem.h], highmem.h,
   , highmem_compat_header="highmem.h", [zero_user_page])
 KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $highmem_compat_header"
 
+HAS_SYNC_MAPPING_RANGE=
+OCFS2_CHECK_KERNEL([do_sync_mapping_range() in fs.h], fs.h,
+  HAS_SYNC_MAPPING_RANGE=yes, , [do_sync_mapping_range(])
+AC_SUBST(HAS_SYNC_MAPPING_RANGE)
+
 # using -include has two advantages:
 #  the source doesn't need to know to include compat headers
 #  the compat header file names don't go through the search path
diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
index 0edfed7..3dc33a5 100644
--- a/fs/ocfs2/Makefile
+++ b/fs/ocfs2/Makefile
@@ -29,6 +29,10 @@ ifdef DELAYED_WORK_DEFINED
 EXTRA_CFLAGS += -DDELAYED_WORK_DEFINED
 endif
 
+ifdef HAS_SYNC_MAPPING_RANGE
+EXTRA_CFLAGS += -DHAS_SYNC_MAPPING_RANGE
+endif
+
 #
 # Since SUBDIRS means something to kbuild, define them safely.  Do not
 # include trailing slashes.
diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c
index 5a8a4f2..0cc4729 100644
--- a/fs/ocfs2/alloc.c
+++ b/fs/ocfs2/alloc.c
@@ -29,6 +29,11 @@
 #include <linux/highmem.h>
 #include <linux/swap.h>
 
+#ifndef HAS_SYNC_MAPPING_RANGE
+#include <linux/writeback.h>
+#include <linux/mpage.h>
+#endif
+
 #define MLOG_MASK_PREFIX ML_DISK_ALLOC
 #include <cluster/masklog.h>
 
@@ -5750,6 +5755,94 @@ out:
 	return ret;
 }
 
+#ifndef HAS_SYNC_MAPPING_RANGE
+int do_writepages(struct address_space *mapping, struct writeback_control *wbc)
+{
+	int ret;
+
+	if (wbc->nr_to_write <= 0)
+		return 0;
+	wbc->for_writepages = 1;
+	if (mapping->a_ops->writepages)
+		ret = mapping->a_ops->writepages(mapping, wbc);
+	else
+		ret = generic_writepages(mapping, wbc);
+	wbc->for_writepages = 0;
+	return ret;
+}
+
+/**
+ * __filemap_fdatawrite_range - start writeback on mapping dirty pages in range
+ * @mapping:	address space structure to write
+ * @start:	offset in bytes where the range starts
+ * @end:	offset in bytes where the range ends (inclusive)
+ * @sync_mode:	enable synchronous operation
+ *
+ * Start writeback against all of a mapping's dirty pages that lie
+ * within the byte offsets <start, end> inclusive.
+ *
+ * If sync_mode is WB_SYNC_ALL then this is a "data integrity" operation, as
+ * opposed to a regular memory cleansing writeback.  The difference between
+ * these two operations is that if a dirty page/buffer is encountered, it must
+ * be waited upon, and not just skipped over.
+ */
+int __filemap_fdatawrite_range(struct address_space *mapping, loff_t start,
+				loff_t end, int sync_mode)
+{
+	int ret;
+	struct writeback_control wbc = {
+		.sync_mode = sync_mode,
+		.nr_to_write = mapping->nrpages * 2,
+		.range_start = start,
+		.range_end = end,
+	};
+
+	if (!mapping_cap_writeback_dirty(mapping))
+		return 0;
+
+	ret = do_writepages(mapping, &wbc);
+	return ret;
+}
+
+/*
+ * `endbyte' is inclusive
+ */
+static int do_sync_mapping_range(struct address_space *mapping, loff_t offset,
+				 loff_t endbyte, unsigned int flags)
+{
+	int ret;
+
+	if (!mapping) {
+		ret = -EINVAL;
+		goto out;
+	}
+
+	ret = 0;
+	if (flags & SYNC_FILE_RANGE_WAIT_BEFORE) {
+		ret = wait_on_page_writeback_range(mapping,
+					offset >> PAGE_CACHE_SHIFT,
+					endbyte >> PAGE_CACHE_SHIFT);
+		if (ret < 0)
+			goto out;
+	}
+
+	if (flags & SYNC_FILE_RANGE_WRITE) {
+		ret = __filemap_fdatawrite_range(mapping, offset, endbyte,
+						WB_SYNC_NONE);
+		if (ret < 0)
+			goto out;
+	}
+
+	if (flags & SYNC_FILE_RANGE_WAIT_AFTER) {
+		ret = wait_on_page_writeback_range(mapping,
+					offset >> PAGE_CACHE_SHIFT,
+					endbyte >> PAGE_CACHE_SHIFT);
+	}
+out:
+	return ret;
+}
+#endif
+
 /*
  * Zero the area past i_size but still within an allocated
  * cluster. This avoids exposing nonzero data on subsequent file
-- 
1.5.2.5

^ permalink raw reply related	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 06/30] ocfs2: Include do_sync_mapping_range() from mainline
  2007-12-20 15:29 ` [Ocfs2-devel] [PATCH 06/30] ocfs2: Include do_sync_mapping_range() from mainline Sunil Mushran
@ 2007-12-21  0:54   ` Joel Becker
  2007-12-21  9:39     ` Sunil Mushran
  0 siblings, 1 reply; 61+ messages in thread
From: Joel Becker @ 2007-12-21  0:54 UTC (permalink / raw)
  To: ocfs2-devel

On Thu, Dec 20, 2007 at 03:29:23PM -0800, Sunil Mushran wrote:
> Commit 5b04aa3a64f854244bc40a6f528176ed50b5c4f6 introduced export symbol
> do_sync_mapping_range(). This patch allows one to build ocfs2 with kernels
> having/not having that change.

	Rather than putting this in alloc.c, I'd put it in
kapi-include/sync_mapping_range.h, wrapped in the
!HAVE_SYNC_MAPPING_RANGE check:

    #ifndef KAPI_SYNC_MAPPING_RANGE_H
    #define KAPI_SYNC_MAPPING_RANGE_H

    #ifndef HAVE_SYNC_MAPPING_RANGE
    int do_writepages...
    {
    }
    int sync_mapping..
    {
    }
    #endif
    #endif

then, in fs/ocfs2/Makefile, I'd do:

ifdef HAS_SYNC_MAPPING_RANGE
CPPFLAGS_alloc.o += -DHAS_SYNC_MAPPING_RANGE
endif

This applys the define to alloc.c only.  Thus, while all files would get
-include kapi-compat/sync_mapping_range.h, every file except alloc.c
would see it as empty.
	The other thing I would do would be to reverse the check.  Right
now, you set HAS_SYNC_MAPPING_RANGE for new kernels.  If I ran "make -C
/usr/src/linux M=`pwd`/fs/ocfs2" without running configure, it would
fail against a recent kernel.

Joel

> 
> Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
> ---
>  Config.make.in    |    2 +
>  configure.in      |    5 +++
>  fs/ocfs2/Makefile |    4 ++
>  fs/ocfs2/alloc.c  |   93 +++++++++++++++++++++++++++++++++++++++++++++++++++++
>  4 files changed, 104 insertions(+), 0 deletions(-)
> 
> diff --git a/Config.make.in b/Config.make.in
> index befeb79..1fe7ddc 100644
> --- a/Config.make.in
> +++ b/Config.make.in
> @@ -59,6 +59,8 @@ EXTRA_CFLAGS += @KAPI_COMPAT_CFLAGS@
>  
>  DELAYED_WORK_DEFINED = @DELAYED_WORK_DEFINED@
>  
> +HAS_SYNC_MAPPING_RANGE  = @HAS_SYNC_MAPPING_RANGE@
> +
>  OCFS_DEBUG = @OCFS_DEBUG@
>  
>  ifneq ($(OCFS_DEBUG),)
> diff --git a/configure.in b/configure.in
> index 47b0da0..603dc94 100644
> --- a/configure.in
> +++ b/configure.in
> @@ -172,6 +172,11 @@ OCFS2_CHECK_KERNEL([zero_user_page() in highmem.h], highmem.h,
>    , highmem_compat_header="highmem.h", [zero_user_page])
>  KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $highmem_compat_header"
>  
> +HAS_SYNC_MAPPING_RANGE=
> +OCFS2_CHECK_KERNEL([do_sync_mapping_range() in fs.h], fs.h,
> +  HAS_SYNC_MAPPING_RANGE=yes, , [do_sync_mapping_range(])
> +AC_SUBST(HAS_SYNC_MAPPING_RANGE)
> +
>  # using -include has two advantages:
>  #  the source doesn't need to know to include compat headers
>  #  the compat header file names don't go through the search path
> diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
> index 0edfed7..3dc33a5 100644
> --- a/fs/ocfs2/Makefile
> +++ b/fs/ocfs2/Makefile
> @@ -29,6 +29,10 @@ ifdef DELAYED_WORK_DEFINED
>  EXTRA_CFLAGS += -DDELAYED_WORK_DEFINED
>  endif
>  
> +ifdef HAS_SYNC_MAPPING_RANGE
> +EXTRA_CFLAGS += -DHAS_SYNC_MAPPING_RANGE
> +endif
> +
>  #
>  # Since SUBDIRS means something to kbuild, define them safely.  Do not
>  # include trailing slashes.
> diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c
> index 5a8a4f2..0cc4729 100644
> --- a/fs/ocfs2/alloc.c
> +++ b/fs/ocfs2/alloc.c
> @@ -29,6 +29,11 @@
>  #include <linux/highmem.h>
>  #include <linux/swap.h>
>  
> +#ifndef HAS_SYNC_MAPPING_RANGE
> +#include <linux/writeback.h>
> +#include <linux/mpage.h>
> +#endif
> +
>  #define MLOG_MASK_PREFIX ML_DISK_ALLOC
>  #include <cluster/masklog.h>
>  
> @@ -5750,6 +5755,94 @@ out:
>  	return ret;
>  }
>  
> +#ifndef HAS_SYNC_MAPPING_RANGE
> +int do_writepages(struct address_space *mapping, struct writeback_control *wbc)
> +{
> +	int ret;
> +
> +	if (wbc->nr_to_write <= 0)
> +		return 0;
> +	wbc->for_writepages = 1;
> +	if (mapping->a_ops->writepages)
> +		ret = mapping->a_ops->writepages(mapping, wbc);
> +	else
> +		ret = generic_writepages(mapping, wbc);
> +	wbc->for_writepages = 0;
> +	return ret;
> +}
> +
> +/**
> + * __filemap_fdatawrite_range - start writeback on mapping dirty pages in range
> + * @mapping:	address space structure to write
> + * @start:	offset in bytes where the range starts
> + * @end:	offset in bytes where the range ends (inclusive)
> + * @sync_mode:	enable synchronous operation
> + *
> + * Start writeback against all of a mapping's dirty pages that lie
> + * within the byte offsets <start, end> inclusive.
> + *
> + * If sync_mode is WB_SYNC_ALL then this is a "data integrity" operation, as
> + * opposed to a regular memory cleansing writeback.  The difference between
> + * these two operations is that if a dirty page/buffer is encountered, it must
> + * be waited upon, and not just skipped over.
> + */
> +int __filemap_fdatawrite_range(struct address_space *mapping, loff_t start,
> +				loff_t end, int sync_mode)
> +{
> +	int ret;
> +	struct writeback_control wbc = {
> +		.sync_mode = sync_mode,
> +		.nr_to_write = mapping->nrpages * 2,
> +		.range_start = start,
> +		.range_end = end,
> +	};
> +
> +	if (!mapping_cap_writeback_dirty(mapping))
> +		return 0;
> +
> +	ret = do_writepages(mapping, &wbc);
> +	return ret;
> +}
> +
> +/*
> + * `endbyte' is inclusive
> + */
> +static int do_sync_mapping_range(struct address_space *mapping, loff_t offset,
> +				 loff_t endbyte, unsigned int flags)
> +{
> +	int ret;
> +
> +	if (!mapping) {
> +		ret = -EINVAL;
> +		goto out;
> +	}
> +
> +	ret = 0;
> +	if (flags & SYNC_FILE_RANGE_WAIT_BEFORE) {
> +		ret = wait_on_page_writeback_range(mapping,
> +					offset >> PAGE_CACHE_SHIFT,
> +					endbyte >> PAGE_CACHE_SHIFT);
> +		if (ret < 0)
> +			goto out;
> +	}
> +
> +	if (flags & SYNC_FILE_RANGE_WRITE) {
> +		ret = __filemap_fdatawrite_range(mapping, offset, endbyte,
> +						WB_SYNC_NONE);
> +		if (ret < 0)
> +			goto out;
> +	}
> +
> +	if (flags & SYNC_FILE_RANGE_WAIT_AFTER) {
> +		ret = wait_on_page_writeback_range(mapping,
> +					offset >> PAGE_CACHE_SHIFT,
> +					endbyte >> PAGE_CACHE_SHIFT);
> +	}
> +out:
> +	return ret;
> +}
> +#endif
> +
>  /*
>   * Zero the area past i_size but still within an allocated
>   * cluster. This avoids exposing nonzero data on subsequent file
> -- 
> 1.5.2.5
> 
> 
> _______________________________________________
> Ocfs2-devel mailing list
> Ocfs2-devel@oss.oracle.com
> http://oss.oracle.com/mailman/listinfo/ocfs2-devel

-- 

"And yet I fight,
 And yet I fight this battle all alone.
 No one to cry to;
 No place to call home."

Joel Becker
Principal Software Developer
Oracle
E-mail: joel.becker@oracle.com
Phone: (650) 506-8127

^ permalink raw reply	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 06/30] ocfs2: Include do_sync_mapping_range() from mainline
  2007-12-21  0:54   ` Joel Becker
@ 2007-12-21  9:39     ` Sunil Mushran
  0 siblings, 0 replies; 61+ messages in thread
From: Sunil Mushran @ 2007-12-21  9:39 UTC (permalink / raw)
  To: ocfs2-devel

Yes, this is better.

Joel Becker wrote:
> On Thu, Dec 20, 2007 at 03:29:23PM -0800, Sunil Mushran wrote:
>   
>> Commit 5b04aa3a64f854244bc40a6f528176ed50b5c4f6 introduced export symbol
>> do_sync_mapping_range(). This patch allows one to build ocfs2 with kernels
>> having/not having that change.
>>     
>
> 	Rather than putting this in alloc.c, I'd put it in
> kapi-include/sync_mapping_range.h, wrapped in the
> !HAVE_SYNC_MAPPING_RANGE check:
>
>     #ifndef KAPI_SYNC_MAPPING_RANGE_H
>     #define KAPI_SYNC_MAPPING_RANGE_H
>
>     #ifndef HAVE_SYNC_MAPPING_RANGE
>     int do_writepages...
>     {
>     }
>     int sync_mapping..
>     {
>     }
>     #endif
>     #endif
>
> then, in fs/ocfs2/Makefile, I'd do:
>
> ifdef HAS_SYNC_MAPPING_RANGE
> CPPFLAGS_alloc.o += -DHAS_SYNC_MAPPING_RANGE
> endif
>
> This applys the define to alloc.c only.  Thus, while all files would get
> -include kapi-compat/sync_mapping_range.h, every file except alloc.c
> would see it as empty.
> 	The other thing I would do would be to reverse the check.  Right
> now, you set HAS_SYNC_MAPPING_RANGE for new kernels.  If I ran "make -C
> /usr/src/linux M=`pwd`/fs/ocfs2" without running configure, it would
> fail against a recent kernel.
>
> Joel
>
>   
>> Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
>> ---
>>  Config.make.in    |    2 +
>>  configure.in      |    5 +++
>>  fs/ocfs2/Makefile |    4 ++
>>  fs/ocfs2/alloc.c  |   93 +++++++++++++++++++++++++++++++++++++++++++++++++++++
>>  4 files changed, 104 insertions(+), 0 deletions(-)
>>
>> diff --git a/Config.make.in b/Config.make.in
>> index befeb79..1fe7ddc 100644
>> --- a/Config.make.in
>> +++ b/Config.make.in
>> @@ -59,6 +59,8 @@ EXTRA_CFLAGS += @KAPI_COMPAT_CFLAGS@
>>  
>>  DELAYED_WORK_DEFINED = @DELAYED_WORK_DEFINED@
>>  
>> +HAS_SYNC_MAPPING_RANGE  = @HAS_SYNC_MAPPING_RANGE@
>> +
>>  OCFS_DEBUG = @OCFS_DEBUG@
>>  
>>  ifneq ($(OCFS_DEBUG),)
>> diff --git a/configure.in b/configure.in
>> index 47b0da0..603dc94 100644
>> --- a/configure.in
>> +++ b/configure.in
>> @@ -172,6 +172,11 @@ OCFS2_CHECK_KERNEL([zero_user_page() in highmem.h], highmem.h,
>>    , highmem_compat_header="highmem.h", [zero_user_page])
>>  KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $highmem_compat_header"
>>  
>> +HAS_SYNC_MAPPING_RANGE=
>> +OCFS2_CHECK_KERNEL([do_sync_mapping_range() in fs.h], fs.h,
>> +  HAS_SYNC_MAPPING_RANGE=yes, , [do_sync_mapping_range(])
>> +AC_SUBST(HAS_SYNC_MAPPING_RANGE)
>> +
>>  # using -include has two advantages:
>>  #  the source doesn't need to know to include compat headers
>>  #  the compat header file names don't go through the search path
>> diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
>> index 0edfed7..3dc33a5 100644
>> --- a/fs/ocfs2/Makefile
>> +++ b/fs/ocfs2/Makefile
>> @@ -29,6 +29,10 @@ ifdef DELAYED_WORK_DEFINED
>>  EXTRA_CFLAGS += -DDELAYED_WORK_DEFINED
>>  endif
>>  
>> +ifdef HAS_SYNC_MAPPING_RANGE
>> +EXTRA_CFLAGS += -DHAS_SYNC_MAPPING_RANGE
>> +endif
>> +
>>  #
>>  # Since SUBDIRS means something to kbuild, define them safely.  Do not
>>  # include trailing slashes.
>> diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c
>> index 5a8a4f2..0cc4729 100644
>> --- a/fs/ocfs2/alloc.c
>> +++ b/fs/ocfs2/alloc.c
>> @@ -29,6 +29,11 @@
>>  #include <linux/highmem.h>
>>  #include <linux/swap.h>
>>  
>> +#ifndef HAS_SYNC_MAPPING_RANGE
>> +#include <linux/writeback.h>
>> +#include <linux/mpage.h>
>> +#endif
>> +
>>  #define MLOG_MASK_PREFIX ML_DISK_ALLOC
>>  #include <cluster/masklog.h>
>>  
>> @@ -5750,6 +5755,94 @@ out:
>>  	return ret;
>>  }
>>  
>> +#ifndef HAS_SYNC_MAPPING_RANGE
>> +int do_writepages(struct address_space *mapping, struct writeback_control *wbc)
>> +{
>> +	int ret;
>> +
>> +	if (wbc->nr_to_write <= 0)
>> +		return 0;
>> +	wbc->for_writepages = 1;
>> +	if (mapping->a_ops->writepages)
>> +		ret = mapping->a_ops->writepages(mapping, wbc);
>> +	else
>> +		ret = generic_writepages(mapping, wbc);
>> +	wbc->for_writepages = 0;
>> +	return ret;
>> +}
>> +
>> +/**
>> + * __filemap_fdatawrite_range - start writeback on mapping dirty pages in range
>> + * @mapping:	address space structure to write
>> + * @start:	offset in bytes where the range starts
>> + * @end:	offset in bytes where the range ends (inclusive)
>> + * @sync_mode:	enable synchronous operation
>> + *
>> + * Start writeback against all of a mapping's dirty pages that lie
>> + * within the byte offsets <start, end> inclusive.
>> + *
>> + * If sync_mode is WB_SYNC_ALL then this is a "data integrity" operation, as
>> + * opposed to a regular memory cleansing writeback.  The difference between
>> + * these two operations is that if a dirty page/buffer is encountered, it must
>> + * be waited upon, and not just skipped over.
>> + */
>> +int __filemap_fdatawrite_range(struct address_space *mapping, loff_t start,
>> +				loff_t end, int sync_mode)
>> +{
>> +	int ret;
>> +	struct writeback_control wbc = {
>> +		.sync_mode = sync_mode,
>> +		.nr_to_write = mapping->nrpages * 2,
>> +		.range_start = start,
>> +		.range_end = end,
>> +	};
>> +
>> +	if (!mapping_cap_writeback_dirty(mapping))
>> +		return 0;
>> +
>> +	ret = do_writepages(mapping, &wbc);
>> +	return ret;
>> +}
>> +
>> +/*
>> + * `endbyte' is inclusive
>> + */
>> +static int do_sync_mapping_range(struct address_space *mapping, loff_t offset,
>> +				 loff_t endbyte, unsigned int flags)
>> +{
>> +	int ret;
>> +
>> +	if (!mapping) {
>> +		ret = -EINVAL;
>> +		goto out;
>> +	}
>> +
>> +	ret = 0;
>> +	if (flags & SYNC_FILE_RANGE_WAIT_BEFORE) {
>> +		ret = wait_on_page_writeback_range(mapping,
>> +					offset >> PAGE_CACHE_SHIFT,
>> +					endbyte >> PAGE_CACHE_SHIFT);
>> +		if (ret < 0)
>> +			goto out;
>> +	}
>> +
>> +	if (flags & SYNC_FILE_RANGE_WRITE) {
>> +		ret = __filemap_fdatawrite_range(mapping, offset, endbyte,
>> +						WB_SYNC_NONE);
>> +		if (ret < 0)
>> +			goto out;
>> +	}
>> +
>> +	if (flags & SYNC_FILE_RANGE_WAIT_AFTER) {
>> +		ret = wait_on_page_writeback_range(mapping,
>> +					offset >> PAGE_CACHE_SHIFT,
>> +					endbyte >> PAGE_CACHE_SHIFT);
>> +	}
>> +out:
>> +	return ret;
>> +}
>> +#endif
>> +
>>  /*
>>   * Zero the area past i_size but still within an allocated
>>   * cluster. This avoids exposing nonzero data on subsequent file
>> -- 
>> 1.5.2.5
>>
>>
>> _______________________________________________
>> Ocfs2-devel mailing list
>> Ocfs2-devel@oss.oracle.com
>> http://oss.oracle.com/mailman/listinfo/ocfs2-devel
>>     
>
>   

^ permalink raw reply	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 06/30] ocfs2: Include do_sync_mapping_range() from mainline
  2007-12-31 14:25 [Ocfs2-devel] ocfs2-1.4: A new beginning - 2nd attempt Sunil Mushran
@ 2007-12-31 14:25 ` Sunil Mushran
  0 siblings, 0 replies; 61+ messages in thread
From: Sunil Mushran @ 2007-12-31 14:25 UTC (permalink / raw)
  To: ocfs2-devel

Commit 5b04aa3a64f854244bc40a6f528176ed50b5c4f6 introduced export symbol
do_sync_mapping_range(). This patch allows one to build ocfs2 with kernels
having/not having that change.

Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
---
 Config.make.in                           |    2 +
 Makefile                                 |    3 +-
 configure.in                             |    6 ++
 fs/ocfs2/Makefile                        |    4 +
 fs/ocfs2/alloc.c                         |    2 +
 kapi-compat/include/sync_mapping_range.h |  103 ++++++++++++++++++++++++++++++
 6 files changed, 119 insertions(+), 1 deletions(-)
 create mode 100644 kapi-compat/include/sync_mapping_range.h

diff --git a/Config.make.in b/Config.make.in
index 1dc4d44..67ee363 100644
--- a/Config.make.in
+++ b/Config.make.in
@@ -59,6 +59,8 @@ EXTRA_CFLAGS += @KAPI_COMPAT_CFLAGS@
 
 NO_DELAYED_WORK = @NO_DELAYED_WORK@
 
+NO_SYNC_MAPPING_RANGE  = @NO_SYNC_MAPPING_RANGE@
+
 OCFS_DEBUG = @OCFS_DEBUG@
 
 ifneq ($(OCFS_DEBUG),)
diff --git a/Makefile b/Makefile
index b7b86db..3ddb1aa 100644
--- a/Makefile
+++ b/Makefile
@@ -11,7 +11,8 @@ LINUX_INCLUDE_FILES =
 KAPI_COMPAT_FILES = \
 	kapi-compat/include/workqueue.h \
 	kapi-compat/include/compiler.h \
-	kapi-compat/include/highmem.h
+	kapi-compat/include/highmem.h \
+	kapi-compat/include/sync_mapping_range.h
 
 PATCH_FILES =
 
diff --git a/configure.in b/configure.in
index 0108f99..72698ae 100644
--- a/configure.in
+++ b/configure.in
@@ -172,6 +172,12 @@ OCFS2_CHECK_KERNEL([zero_user_page() in highmem.h], highmem.h,
   , highmem_compat_header="highmem.h", [zero_user_page])
 KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $highmem_compat_header"
 
+NO_SYNC_MAPPING_RANGE=
+OCFS2_CHECK_KERNEL([do_sync_mapping_range() in fs.h], fs.h,
+  , NO_SYNC_MAPPING_RANGE=yes, [do_sync_mapping_range(])
+KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS sync_mapping_range.h"
+AC_SUBST(NO_SYNC_MAPPING_RANGE)
+
 # using -include has two advantages:
 #  the source doesn't need to know to include compat headers
 #  the compat header file names don't go through the search path
diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
index 8bc2dff..737c12a 100644
--- a/fs/ocfs2/Makefile
+++ b/fs/ocfs2/Makefile
@@ -29,6 +29,10 @@ ifdef NO_DELAYED_WORK
 EXTRA_CFLAGS += -DNO_DELAYED_WORK
 endif
 
+ifdef NO_SYNC_MAPPING_RANGE
+CFLAGS_alloc.o += -DNO_SYNC_MAPPING_RANGE
+endif
+
 #
 # Since SUBDIRS means something to kbuild, define them safely.  Do not
 # include trailing slashes.
diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c
index 4791433..fc7ee22 100644
--- a/fs/ocfs2/alloc.c
+++ b/fs/ocfs2/alloc.c
@@ -23,11 +23,13 @@
  * Boston, MA 021110-1307, USA.
  */
 
+#ifndef NO_SYNC_MAPPING_RANGE
 #include <linux/fs.h>
 #include <linux/types.h>
 #include <linux/slab.h>
 #include <linux/highmem.h>
 #include <linux/swap.h>
+#endif
 
 #define MLOG_MASK_PREFIX ML_DISK_ALLOC
 #include <cluster/masklog.h>
diff --git a/kapi-compat/include/sync_mapping_range.h b/kapi-compat/include/sync_mapping_range.h
new file mode 100644
index 0000000..d6e1b30
--- /dev/null
+++ b/kapi-compat/include/sync_mapping_range.h
@@ -0,0 +1,103 @@
+#ifndef KAPI_SYNC_MAPPING_RANGE_H
+#define KAPI_SYNC_MAPPING_RANGE_H
+
+#ifdef NO_SYNC_MAPPING_RANGE
+
+#include <linux/fs.h>
+#include <linux/types.h>
+#include <linux/slab.h>
+#include <linux/highmem.h>
+#include <linux/swap.h>
+#include <linux/writeback.h>
+#include <linux/mpage.h>
+#include <linux/pagemap.h>
+
+
+int do_writepages(struct address_space *mapping, struct writeback_control *wbc)
+{
+	int ret;
+
+	if (wbc->nr_to_write <= 0)
+		return 0;
+	wbc->for_writepages = 1;
+	if (mapping->a_ops->writepages)
+		ret = mapping->a_ops->writepages(mapping, wbc);
+	else
+		ret = generic_writepages(mapping, wbc);
+	wbc->for_writepages = 0;
+	return ret;
+}
+
+/**
+ * __filemap_fdatawrite_range - start writeback on mapping dirty pages in range
+ * @mapping:	address space structure to write
+ * @start:	offset in bytes where the range starts
+ * @end:	offset in bytes where the range ends (inclusive)
+ * @sync_mode:	enable synchronous operation
+ *
+ * Start writeback against all of a mapping's dirty pages that lie
+ * within the byte offsets <start, end> inclusive.
+ *
+ * If sync_mode is WB_SYNC_ALL then this is a "data integrity" operation, as
+ * opposed to a regular memory cleansing writeback.  The difference between
+ * these two operations is that if a dirty page/buffer is encountered, it must
+ * be waited upon, and not just skipped over.
+ */
+int __filemap_fdatawrite_range(struct address_space *mapping, loff_t start,
+				loff_t end, int sync_mode)
+{
+	int ret;
+	struct writeback_control wbc = {
+		.sync_mode = sync_mode,
+		.nr_to_write = mapping->nrpages * 2,
+		.range_start = start,
+		.range_end = end,
+	};
+
+	if (!mapping_cap_writeback_dirty(mapping))
+		return 0;
+
+	ret = do_writepages(mapping, &wbc);
+	return ret;
+}
+
+/*
+ * `endbyte' is inclusive
+ */
+static int do_sync_mapping_range(struct address_space *mapping, loff_t offset,
+				 loff_t endbyte, unsigned int flags)
+{
+	int ret;
+
+	if (!mapping) {
+		ret = -EINVAL;
+		goto out;
+	}
+
+	ret = 0;
+	if (flags & SYNC_FILE_RANGE_WAIT_BEFORE) {
+		ret = wait_on_page_writeback_range(mapping,
+					offset >> PAGE_CACHE_SHIFT,
+					endbyte >> PAGE_CACHE_SHIFT);
+		if (ret < 0)
+			goto out;
+	}
+
+	if (flags & SYNC_FILE_RANGE_WRITE) {
+		ret = __filemap_fdatawrite_range(mapping, offset, endbyte,
+						WB_SYNC_NONE);
+		if (ret < 0)
+			goto out;
+	}
+
+	if (flags & SYNC_FILE_RANGE_WAIT_AFTER) {
+		ret = wait_on_page_writeback_range(mapping,
+					offset >> PAGE_CACHE_SHIFT,
+					endbyte >> PAGE_CACHE_SHIFT);
+	}
+out:
+	return ret;
+}
+#endif
+
+#endif
-- 
1.5.3.4

^ permalink raw reply related	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 29/30] ocfs2: Handle older prototype of bi_end_io_t
  2008-01-03 11:22 [Ocfs2-devel] OCFS2 1.4 Repository Base (3rd attempt) Sunil Mushran
@ 2008-01-03 11:21 ` Sunil Mushran
  2008-01-08 16:20   ` Mark Fasheh
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 22/30] ocfs2: Handle missing macro MNT_RELATIME Sunil Mushran
                   ` (26 subsequent siblings)
  27 siblings, 1 reply; 61+ messages in thread
From: Sunil Mushran @ 2008-01-03 11:21 UTC (permalink / raw)
  To: ocfs2-devel

Commit 6712ecf8f648118c3363c142196418f89a510b90 in mainline
dropped 'size' argument from bi_end_io(). This patch allows
one to build ocfs2 with kernels having/not having this change.

Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
---
 Config.make.in               |    1 +
 configure.in                 |    5 +++++
 fs/ocfs2/cluster/Makefile    |    4 ++++
 fs/ocfs2/cluster/heartbeat.c |    9 +++++++++
 4 files changed, 19 insertions(+), 0 deletions(-)

diff --git a/Config.make.in b/Config.make.in
index 114cf90..98577c6 100644
--- a/Config.make.in
+++ b/Config.make.in
@@ -74,6 +74,7 @@ SOP_IS_NOT_CONST = @SOP_IS_NOT_CONST@
 IOP_IS_NOT_CONST = @IOP_IS_NOT_CONST@
 NO_VECTORIZED_AIO = @NO_VECTORIZED_AIO@
 NO_SPLICE_FROM_PIPE = @NO_SPLICE_FROM_PIPE@
+OLD_BIO_END_IO = @OLD_BIO_END_IO@
 
 OCFS_DEBUG = @OCFS_DEBUG@
 
diff --git a/configure.in b/configure.in
index b1e7be6..a55db86 100644
--- a/configure.in
+++ b/configure.in
@@ -296,6 +296,11 @@ OCFS2_CHECK_KERNEL([__splice_from_pipe() in splice.h], splice.h,
   , NO_SPLICE_FROM_PIPE=yes, [^extern ssize_t __splice_from_pipe(struct pipe_inode_info \*])
 AC_SUBST(NO_SPLICE_FROM_PIPE)
 
+OLD_BIO_END_IO=
+OCFS2_CHECK_KERNEL([old bio_end_io_t in bio.h], bio.h,
+  OLD_BIO_END_IO=yes, , [^typedef int (bio_end_io_t) (struct bio \*, unsigned int, int);])
+AC_SUBST(OLD_BIO_END_IO)
+
 # using -include has two advantages:
 #  the source doesn't need to know to include compat headers
 #  the compat header file names don't go through the search path
diff --git a/fs/ocfs2/cluster/Makefile b/fs/ocfs2/cluster/Makefile
index 512bfa1..0a5e287 100644
--- a/fs/ocfs2/cluster/Makefile
+++ b/fs/ocfs2/cluster/Makefile
@@ -29,6 +29,10 @@ ifdef STRUCT_SUBSYSTEM_DEFINED
 EXTRA_CFLAGS += -DSTRUCT_SUBSYSTEM_DEFINED
 endif
 
+ifdef OLD_BIO_END_IO
+EXTRA_CFLAGS += -DOLD_BIO_END_IO
+endif
+
 SOURCES =			\
 	heartbeat.c		\
 	masklog.c		\
diff --git a/fs/ocfs2/cluster/heartbeat.c b/fs/ocfs2/cluster/heartbeat.c
index 65ff7f3..6a91607 100644
--- a/fs/ocfs2/cluster/heartbeat.c
+++ b/fs/ocfs2/cluster/heartbeat.c
@@ -215,8 +215,14 @@ static void o2hb_wait_on_io(struct o2hb_region *reg,
 	wait_for_completion(&wc->wc_io_complete);
 }
 
+#ifdef OLD_BIO_END_IO
+static int o2hb_bio_end_io(struct bio *bio,
+			   unsigned int bytes_done,
+			   int error)
+#else
 static void o2hb_bio_end_io(struct bio *bio,
 			   int error)
+#endif
 {
 	struct o2hb_bio_wait_ctxt *wc = bio->bi_private;
 
@@ -227,6 +233,9 @@ static void o2hb_bio_end_io(struct bio *bio,
 
 	o2hb_bio_wait_dec(wc, 1);
 	bio_put(bio);
+#ifdef OLD_BIO_END_IO
+	return 0;
+#endif
 }
 
 /* Setup a Bio to cover I/O against num_slots slots starting at
-- 
1.5.2.5

^ permalink raw reply related	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 03/30] ocfs2: Handle workqueue changes
  2008-01-03 11:22 [Ocfs2-devel] OCFS2 1.4 Repository Base (3rd attempt) Sunil Mushran
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 29/30] ocfs2: Handle older prototype of bi_end_io_t Sunil Mushran
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 22/30] ocfs2: Handle missing macro MNT_RELATIME Sunil Mushran
@ 2008-01-03 11:21 ` Sunil Mushran
  2008-01-08 13:16   ` Mark Fasheh
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 25/30] ocfs2: Handle missing const s_op in struct super_block Sunil Mushran
                   ` (24 subsequent siblings)
  27 siblings, 1 reply; 61+ messages in thread
From: Sunil Mushran @ 2008-01-03 11:21 UTC (permalink / raw)
  To: ocfs2-devel

Commit 52bad64d95bd89e08c49ec5a071fa6dcbe5a1a9c in mainline makes
changes to workqueue.h. This patch allows one to build ocfs2 with
kernels having/not having that change.

Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
---
 Config.make.in                  |    2 +
 Makefile                        |    3 +-
 configure.in                    |    6 +++
 fs/ocfs2/Makefile               |    4 ++
 fs/ocfs2/alloc.c                |   11 +++---
 fs/ocfs2/cluster/Makefile       |    4 ++
 fs/ocfs2/cluster/heartbeat.c    |    9 ++---
 fs/ocfs2/cluster/quorum.c       |    4 +-
 fs/ocfs2/cluster/tcp.c          |   66 +++++++++++++++++++-------------------
 fs/ocfs2/dlm/Makefile           |    4 ++
 fs/ocfs2/dlm/dlmcommon.h        |    2 +-
 fs/ocfs2/dlm/dlmdomain.c        |    2 +-
 fs/ocfs2/dlm/dlmrecovery.c      |    2 +-
 fs/ocfs2/dlm/userdlm.c          |    8 ++--
 fs/ocfs2/journal.c              |    4 +-
 fs/ocfs2/journal.h              |    2 +-
 fs/ocfs2/super.c                |    2 +-
 kapi-compat/include/workqueue.h |   17 ++++++++++
 18 files changed, 94 insertions(+), 58 deletions(-)
 create mode 100644 kapi-compat/include/workqueue.h

diff --git a/Config.make.in b/Config.make.in
index c9e0132..1dc4d44 100644
--- a/Config.make.in
+++ b/Config.make.in
@@ -57,6 +57,8 @@ MAKEBO_VERSION = @VERSION@
 
 EXTRA_CFLAGS += @KAPI_COMPAT_CFLAGS@
 
+NO_DELAYED_WORK = @NO_DELAYED_WORK@
+
 OCFS_DEBUG = @OCFS_DEBUG@
 
 ifneq ($(OCFS_DEBUG),)
diff --git a/Makefile b/Makefile
index 227ab23..4752593 100644
--- a/Makefile
+++ b/Makefile
@@ -8,7 +8,8 @@ SUBDIRS = fs vendor
 
 LINUX_INCLUDE_FILES =
 
-KAPI_COMPAT_FILES =
+KAPI_COMPAT_FILES = \
+	kapi-compat/include/workqueue.h
 
 PATCH_FILES =
 
diff --git a/configure.in b/configure.in
index 1af47fc..46f0057 100644
--- a/configure.in
+++ b/configure.in
@@ -156,6 +156,12 @@ case "$kversion" in
     ;;
 esac
 
+NO_DELAYED_WORK=
+OCFS2_CHECK_KERNEL([struct delayed_work in workqueue.h], workqueue.h,
+  , NO_DELAYED_WORK=yes, [^struct delayed_work])
+AC_SUBST(NO_DELAYED_WORK)
+KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS workqueue.h"
+
 # using -include has two advantages:
 #  the source doesn't need to know to include compat headers
 #  the compat header file names don't go through the search path
diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
index dce2a62..8bc2dff 100644
--- a/fs/ocfs2/Makefile
+++ b/fs/ocfs2/Makefile
@@ -25,6 +25,10 @@ EXTRA_CFLAGS += -DOCFS2_CDSL
 
 EXTRA_CFLAGS += -DCONFIG_OCFS2_DEBUG_MASKLOG
 
+ifdef NO_DELAYED_WORK
+EXTRA_CFLAGS += -DNO_DELAYED_WORK
+endif
+
 #
 # Since SUBDIRS means something to kbuild, define them safely.  Do not
 # include trailing slashes.
diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c
index 4ba7f0b..4791433 100644
--- a/fs/ocfs2/alloc.c
+++ b/fs/ocfs2/alloc.c
@@ -4752,12 +4752,11 @@ int ocfs2_flush_truncate_log(struct ocfs2_super *osb)
 	return status;
 }
 
-static void ocfs2_truncate_log_worker(struct work_struct *work)
+static void ocfs2_truncate_log_worker(kapi_work_struct_t *work)
 {
 	int status;
-	struct ocfs2_super *osb =
-		container_of(work, struct ocfs2_super,
-			     osb_truncate_log_wq.work);
+	struct ocfs2_super *osb = work_to_object(work, struct ocfs2_super,
+						 osb_truncate_log_wq.work);
 
 	mlog_entry_void();
 
@@ -4989,8 +4988,8 @@ int ocfs2_truncate_log_init(struct ocfs2_super *osb)
 	/* ocfs2_truncate_log_shutdown keys on the existence of
 	 * osb->osb_tl_inode so we don't set any of the osb variables
 	 * until we're sure all is well. */
-	INIT_DELAYED_WORK(&osb->osb_truncate_log_wq,
-			  ocfs2_truncate_log_worker);
+	KAPI_INIT_DELAYED_WORK(&osb->osb_truncate_log_wq,
+			       ocfs2_truncate_log_worker, osb);
 	osb->osb_tl_bh    = tl_bh;
 	osb->osb_tl_inode = tl_inode;
 
diff --git a/fs/ocfs2/cluster/Makefile b/fs/ocfs2/cluster/Makefile
index c9c2e9b..c40eae0 100644
--- a/fs/ocfs2/cluster/Makefile
+++ b/fs/ocfs2/cluster/Makefile
@@ -13,6 +13,10 @@ endif
 
 EXTRA_CFLAGS += -DCONFIG_OCFS2_DEBUG_MASKLOG
 
+ifdef NO_DELAYED_WORK
+EXTRA_CFLAGS += -DNO_DELAYED_WORK
+endif
+
 SOURCES =			\
 	heartbeat.c		\
 	masklog.c		\
diff --git a/fs/ocfs2/cluster/heartbeat.c b/fs/ocfs2/cluster/heartbeat.c
index f14b541..65ff7f3 100644
--- a/fs/ocfs2/cluster/heartbeat.c
+++ b/fs/ocfs2/cluster/heartbeat.c
@@ -156,11 +156,10 @@ struct o2hb_bio_wait_ctxt {
 	int               wc_error;
 };
 
-static void o2hb_write_timeout(struct work_struct *work)
+static void o2hb_write_timeout(kapi_work_struct_t *work)
 {
-	struct o2hb_region *reg =
-		container_of(work, struct o2hb_region,
-			     hr_write_timeout_work.work);
+	struct o2hb_region *reg = work_to_object(work, struct o2hb_region,
+						 hr_write_timeout_work.work);
 
 	mlog(ML_ERROR, "Heartbeat write timeout to device %s after %u "
 	     "milliseconds\n", reg->hr_dev_name,
@@ -1306,7 +1305,7 @@ static ssize_t o2hb_region_dev_write(struct o2hb_region *reg,
 		goto out;
 	}
 
-	INIT_DELAYED_WORK(&reg->hr_write_timeout_work, o2hb_write_timeout);
+	KAPI_INIT_DELAYED_WORK(&reg->hr_write_timeout_work, o2hb_write_timeout, reg);
 
 	/*
 	 * A node is considered live after it has beat LIVE_THRESHOLD
diff --git a/fs/ocfs2/cluster/quorum.c b/fs/ocfs2/cluster/quorum.c
index bbacf7d..df9b74a 100644
--- a/fs/ocfs2/cluster/quorum.c
+++ b/fs/ocfs2/cluster/quorum.c
@@ -91,7 +91,7 @@ void o2quo_disk_timeout(void)
 	o2quo_fence_self();
 }
 
-static void o2quo_make_decision(struct work_struct *work)
+static void o2quo_make_decision(kapi_work_struct_t *work)
 {
 	int quorum;
 	int lowest_hb, lowest_reachable = 0, fence = 0;
@@ -309,7 +309,7 @@ void o2quo_init(void)
 	struct o2quo_state *qs = &o2quo_state;
 
 	spin_lock_init(&qs->qs_lock);
-	INIT_WORK(&qs->qs_work, o2quo_make_decision);
+	KAPI_INIT_WORK(&qs->qs_work, o2quo_make_decision, NULL);
 }
 
 void o2quo_exit(void)
diff --git a/fs/ocfs2/cluster/tcp.c b/fs/ocfs2/cluster/tcp.c
index 685c180..5fb8400 100644
--- a/fs/ocfs2/cluster/tcp.c
+++ b/fs/ocfs2/cluster/tcp.c
@@ -140,11 +140,11 @@ static int o2net_sys_err_translations[O2NET_ERR_MAX] =
 		 [O2NET_ERR_DIED]	= -EHOSTDOWN,};
 
 /* can't quite avoid *all* internal declarations :/ */
-static void o2net_sc_connect_completed(struct work_struct *work);
-static void o2net_rx_until_empty(struct work_struct *work);
-static void o2net_shutdown_sc(struct work_struct *work);
+static void o2net_sc_connect_completed(kapi_work_struct_t *work);
+static void o2net_rx_until_empty(kapi_work_struct_t *work);
+static void o2net_shutdown_sc(kapi_work_struct_t *work);
 static void o2net_listen_data_ready(struct sock *sk, int bytes);
-static void o2net_sc_send_keep_req(struct work_struct *work);
+static void o2net_sc_send_keep_req(kapi_work_struct_t *work);
 static void o2net_idle_timer(unsigned long data);
 static void o2net_sc_postpone_idle(struct o2net_sock_container *sc);
 static void o2net_sc_reset_idle_timer(struct o2net_sock_container *sc);
@@ -330,10 +330,10 @@ static struct o2net_sock_container *sc_alloc(struct o2nm_node *node)
 	o2nm_node_get(node);
 	sc->sc_node = node;
 
-	INIT_WORK(&sc->sc_connect_work, o2net_sc_connect_completed);
-	INIT_WORK(&sc->sc_rx_work, o2net_rx_until_empty);
-	INIT_WORK(&sc->sc_shutdown_work, o2net_shutdown_sc);
-	INIT_DELAYED_WORK(&sc->sc_keepalive_work, o2net_sc_send_keep_req);
+	KAPI_INIT_WORK(&sc->sc_connect_work, o2net_sc_connect_completed, sc);
+	KAPI_INIT_WORK(&sc->sc_rx_work, o2net_rx_until_empty, sc);
+	KAPI_INIT_WORK(&sc->sc_shutdown_work, o2net_shutdown_sc, sc);
+	KAPI_INIT_DELAYED_WORK(&sc->sc_keepalive_work, o2net_sc_send_keep_req, sc);
 
 	init_timer(&sc->sc_idle_timeout);
 	sc->sc_idle_timeout.function = o2net_idle_timer;
@@ -600,11 +600,11 @@ static void o2net_ensure_shutdown(struct o2net_node *nn,
  * ourselves as state_change couldn't get the nn_lock and call set_nn_state
  * itself.
  */
-static void o2net_shutdown_sc(struct work_struct *work)
+static void o2net_shutdown_sc(kapi_work_struct_t *work)
 {
 	struct o2net_sock_container *sc =
-		container_of(work, struct o2net_sock_container,
-			     sc_shutdown_work);
+		work_to_object(work, struct o2net_sock_container,
+			       sc_shutdown_work);
 	struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num);
 
 	sclog(sc, "shutting down\n");
@@ -1306,10 +1306,10 @@ out:
 /* this work func is triggerd by data ready.  it reads until it can read no
  * more.  it interprets 0, eof, as fatal.  if data_ready hits while we're doing
  * our work the work struct will be marked and we'll be called again. */
-static void o2net_rx_until_empty(struct work_struct *work)
+static void o2net_rx_until_empty(kapi_work_struct_t *work)
 {
 	struct o2net_sock_container *sc =
-		container_of(work, struct o2net_sock_container, sc_rx_work);
+		work_to_object(work, struct o2net_sock_container, sc_rx_work);
 	int ret;
 
 	do {
@@ -1367,11 +1367,11 @@ static void o2net_initialize_handshake(void)
 
 /* called when a connect completes and after a sock is accepted.  the
  * rx path will see the response and mark the sc valid */
-static void o2net_sc_connect_completed(struct work_struct *work)
+static void o2net_sc_connect_completed(kapi_work_struct_t *work)
 {
 	struct o2net_sock_container *sc =
-		container_of(work, struct o2net_sock_container,
-			     sc_connect_work);
+		work_to_object(work, struct o2net_sock_container,
+			       sc_connect_work);
 
 	mlog(ML_MSG, "sc sending handshake with ver %llu id %llx\n",
               (unsigned long long)O2NET_PROTOCOL_VERSION,
@@ -1383,11 +1383,11 @@ static void o2net_sc_connect_completed(struct work_struct *work)
 }
 
 /* this is called as a work_struct func. */
-static void o2net_sc_send_keep_req(struct work_struct *work)
+static void o2net_sc_send_keep_req(kapi_work_struct_t *work)
 {
 	struct o2net_sock_container *sc =
-		container_of(work, struct o2net_sock_container,
-			     sc_keepalive_work.work);
+		work_to_object(work, struct o2net_sock_container,
+			       sc_keepalive_work.work);
 
 	o2net_sendpage(sc, o2net_keep_req, sizeof(*o2net_keep_req));
 	sc_put(sc);
@@ -1446,10 +1446,10 @@ static void o2net_sc_postpone_idle(struct o2net_sock_container *sc)
  * having a connect attempt fail, etc. This centralizes the logic which decides
  * if a connect attempt should be made or if we should give up and all future
  * transmit attempts should fail */
-static void o2net_start_connect(struct work_struct *work)
+static void o2net_start_connect(kapi_work_struct_t *work)
 {
 	struct o2net_node *nn =
-		container_of(work, struct o2net_node, nn_connect_work.work);
+		work_to_object(work, struct o2net_node, nn_connect_work.work);
 	struct o2net_sock_container *sc = NULL;
 	struct o2nm_node *node = NULL, *mynode = NULL;
 	struct socket *sock = NULL;
@@ -1553,10 +1553,10 @@ out:
 	return;
 }
 
-static void o2net_connect_expired(struct work_struct *work)
+static void o2net_connect_expired(kapi_work_struct_t *work)
 {
-	struct o2net_node *nn =
-		container_of(work, struct o2net_node, nn_connect_expired.work);
+	struct o2net_node *nn = work_to_object(work, struct o2net_node,
+					       nn_connect_expired.work);
 
 	spin_lock(&nn->nn_lock);
 	if (!nn->nn_sc_valid) {
@@ -1572,10 +1572,10 @@ static void o2net_connect_expired(struct work_struct *work)
 	spin_unlock(&nn->nn_lock);
 }
 
-static void o2net_still_up(struct work_struct *work)
+static void o2net_still_up(kapi_work_struct_t *work)
 {
-	struct o2net_node *nn =
-		container_of(work, struct o2net_node, nn_still_up.work);
+	struct o2net_node *nn = work_to_object(work, struct o2net_node,
+					       nn_still_up.work);
 
 	o2quo_hb_still_up(o2net_num_from_nn(nn));
 }
@@ -1775,7 +1775,7 @@ out:
 	return ret;
 }
 
-static void o2net_accept_many(struct work_struct *work)
+static void o2net_accept_many(kapi_work_struct_t *work)
 {
 	struct socket *sock = o2net_listen_sock;
 	while (o2net_accept_one(sock) == 0)
@@ -1831,7 +1831,7 @@ static int o2net_open_listening_sock(__be32 addr, __be16 port)
 	write_unlock_bh(&sock->sk->sk_callback_lock);
 
 	o2net_listen_sock = sock;
-	INIT_WORK(&o2net_listen_work, o2net_accept_many);
+	KAPI_INIT_WORK(&o2net_listen_work, o2net_accept_many, sock);
 
 	sock->sk->sk_reuse = 1;
 	ret = sock->ops->bind(sock, (struct sockaddr *)&sin, sizeof(sin));
@@ -1951,10 +1951,10 @@ int o2net_init(void)
 		struct o2net_node *nn = o2net_nn_from_num(i);
 
 		spin_lock_init(&nn->nn_lock);
-		INIT_DELAYED_WORK(&nn->nn_connect_work, o2net_start_connect);
-		INIT_DELAYED_WORK(&nn->nn_connect_expired,
-				  o2net_connect_expired);
-		INIT_DELAYED_WORK(&nn->nn_still_up, o2net_still_up);
+		KAPI_INIT_DELAYED_WORK(&nn->nn_connect_work, o2net_start_connect, nn);
+		KAPI_INIT_DELAYED_WORK(&nn->nn_connect_expired,
+				       o2net_connect_expired, nn);
+		KAPI_INIT_DELAYED_WORK(&nn->nn_still_up, o2net_still_up, nn);
 		/* until we see hb from a node we'll return einval */
 		nn->nn_persistent_error = -ENOTCONN;
 		init_waitqueue_head(&nn->nn_sc_wq);
diff --git a/fs/ocfs2/dlm/Makefile b/fs/ocfs2/dlm/Makefile
index 7e1031e..aeae5fd 100644
--- a/fs/ocfs2/dlm/Makefile
+++ b/fs/ocfs2/dlm/Makefile
@@ -16,6 +16,10 @@ EXTRA_CFLAGS += -I$(OUR_TOPDIR)/fs/ocfs2
 
 EXTRA_CFLAGS += -DCONFIG_OCFS2_DEBUG_MASKLOG
 
+ifdef NO_DELAYED_WORK
+EXTRA_CFLAGS += -DNO_DELAYED_WORK
+endif
+
 DLM_SOURCES =			\
 	dlmast.c		\
 	dlmconvert.c		\
diff --git a/fs/ocfs2/dlm/dlmcommon.h b/fs/ocfs2/dlm/dlmcommon.h
index e90b92f..cddf85a 100644
--- a/fs/ocfs2/dlm/dlmcommon.h
+++ b/fs/ocfs2/dlm/dlmcommon.h
@@ -153,7 +153,7 @@ static inline struct hlist_head *dlm_lockres_hash(struct dlm_ctxt *dlm, unsigned
  * called functions that cannot be directly called from the
  * net message handlers for some reason, usually because
  * they need to send net messages of their own. */
-void dlm_dispatch_work(struct work_struct *work);
+void dlm_dispatch_work(kapi_work_struct_t *work);
 
 struct dlm_lock_resource;
 struct dlm_work_item;
diff --git a/fs/ocfs2/dlm/dlmdomain.c b/fs/ocfs2/dlm/dlmdomain.c
index 6954565..10b3e60 100644
--- a/fs/ocfs2/dlm/dlmdomain.c
+++ b/fs/ocfs2/dlm/dlmdomain.c
@@ -1435,7 +1435,7 @@ static struct dlm_ctxt *dlm_alloc_ctxt(const char *domain,
 
 	spin_lock_init(&dlm->work_lock);
 	INIT_LIST_HEAD(&dlm->work_list);
-	INIT_WORK(&dlm->dispatched_work, dlm_dispatch_work);
+	KAPI_INIT_WORK(&dlm->dispatched_work, dlm_dispatch_work, dlm);
 
 	kref_init(&dlm->dlm_refs);
 	dlm->dlm_state = DLM_CTXT_NEW;
diff --git a/fs/ocfs2/dlm/dlmrecovery.c b/fs/ocfs2/dlm/dlmrecovery.c
index a2c3316..3cf4f49 100644
--- a/fs/ocfs2/dlm/dlmrecovery.c
+++ b/fs/ocfs2/dlm/dlmrecovery.c
@@ -153,7 +153,7 @@ static inline void dlm_reset_recovery(struct dlm_ctxt *dlm)
 }
 
 /* Worker function used during recovery. */
-void dlm_dispatch_work(struct work_struct *work)
+void dlm_dispatch_work(kapi_work_struct_t *work)
 {
 	struct dlm_ctxt *dlm =
 		container_of(work, struct dlm_ctxt, dispatched_work);
diff --git a/fs/ocfs2/dlm/userdlm.c b/fs/ocfs2/dlm/userdlm.c
index 7d2f578..6340da3 100644
--- a/fs/ocfs2/dlm/userdlm.c
+++ b/fs/ocfs2/dlm/userdlm.c
@@ -171,14 +171,14 @@ static inline void user_dlm_grab_inode_ref(struct user_lock_res *lockres)
 		BUG();
 }
 
-static void user_dlm_unblock_lock(struct work_struct *work);
+static void user_dlm_unblock_lock(kapi_work_struct_t *work);
 
 static void __user_dlm_queue_lockres(struct user_lock_res *lockres)
 {
 	if (!(lockres->l_flags & USER_LOCK_QUEUED)) {
 		user_dlm_grab_inode_ref(lockres);
 
-		INIT_WORK(&lockres->l_work, user_dlm_unblock_lock);
+		KAPI_INIT_WORK(&lockres->l_work, user_dlm_unblock_lock, lockres);
 
 		queue_work(user_dlm_worker, &lockres->l_work);
 		lockres->l_flags |= USER_LOCK_QUEUED;
@@ -278,11 +278,11 @@ static inline void user_dlm_drop_inode_ref(struct user_lock_res *lockres)
 	iput(inode);
 }
 
-static void user_dlm_unblock_lock(struct work_struct *work)
+static void user_dlm_unblock_lock(kapi_work_struct_t *work)
 {
 	int new_level, status;
 	struct user_lock_res *lockres =
-		container_of(work, struct user_lock_res, l_work);
+		work_to_object(work, struct user_lock_res, l_work);
 	struct dlm_ctxt *dlm = dlm_ctxt_from_user_lockres(lockres);
 
 	mlog(0, "processing lockres %.*s\n", lockres->l_namelen,
diff --git a/fs/ocfs2/journal.c b/fs/ocfs2/journal.c
index f9d01e2..aafd0a3 100644
--- a/fs/ocfs2/journal.c
+++ b/fs/ocfs2/journal.c
@@ -715,11 +715,11 @@ struct ocfs2_la_recovery_item {
  * NOTE: This function can and will sleep on recovery of other nodes
  * during cluster locking, just like any other ocfs2 process.
  */
-void ocfs2_complete_recovery(struct work_struct *work)
+void ocfs2_complete_recovery(kapi_work_struct_t *work)
 {
 	int ret;
 	struct ocfs2_journal *journal =
-		container_of(work, struct ocfs2_journal, j_recovery_work);
+		work_to_object(work, struct ocfs2_journal, j_recovery_work);
 	struct ocfs2_super *osb = journal->j_osb;
 	struct ocfs2_dinode *la_dinode, *tl_dinode;
 	struct ocfs2_la_recovery_item *item, *n;
diff --git a/fs/ocfs2/journal.h b/fs/ocfs2/journal.h
index 4b32e09..548d6af 100644
--- a/fs/ocfs2/journal.h
+++ b/fs/ocfs2/journal.h
@@ -133,7 +133,7 @@ static inline void ocfs2_inode_set_new(struct ocfs2_super *osb,
 }
 
 /* Exported only for the journal struct init code in super.c. Do not call. */
-void ocfs2_complete_recovery(struct work_struct *work);
+void ocfs2_complete_recovery(kapi_work_struct_t *work);
 
 /*
  *  Journal Control:
diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c
index 0e2a1b4..a8f90a2 100644
--- a/fs/ocfs2/super.c
+++ b/fs/ocfs2/super.c
@@ -1465,7 +1465,7 @@ static int ocfs2_initialize_super(struct super_block *sb,
 	spin_lock_init(&journal->j_lock);
 	journal->j_trans_id = (unsigned long) 1;
 	INIT_LIST_HEAD(&journal->j_la_cleanups);
-	INIT_WORK(&journal->j_recovery_work, ocfs2_complete_recovery);
+	KAPI_INIT_WORK(&journal->j_recovery_work, ocfs2_complete_recovery, journal);
 	journal->j_state = OCFS2_JOURNAL_FREE;
 
 	/* get some pseudo constants for clustersize bits */
diff --git a/kapi-compat/include/workqueue.h b/kapi-compat/include/workqueue.h
new file mode 100644
index 0000000..277fca6
--- /dev/null
+++ b/kapi-compat/include/workqueue.h
@@ -0,0 +1,17 @@
+#ifndef KAPI_WORKQUEUE_H
+#define KAPI_WORKQUEUE_H
+
+#ifdef NO_DELAYED_WORK
+# define delayed_work				work_struct
+typedef void kapi_work_struct_t;
+# define work_to_object(a, b, c)		(a)
+# define KAPI_INIT_WORK(a, b, c)		INIT_WORK(a, b, c)
+# define KAPI_INIT_DELAYED_WORK(a, b, c)	INIT_WORK(a, b, c)
+#else
+typedef struct work_struct kapi_work_struct_t;
+# define work_to_object(a, b, c)		container_of(a, b, c)
+# define KAPI_INIT_WORK(a, b, c)		INIT_WORK(a, b)
+# define KAPI_INIT_DELAYED_WORK(a, b, c)	INIT_DELAYED_WORK(a, b)
+#endif
+
+#endif
-- 
1.5.2.5

^ permalink raw reply related	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 22/30] ocfs2: Handle missing macro MNT_RELATIME
  2008-01-03 11:22 [Ocfs2-devel] OCFS2 1.4 Repository Base (3rd attempt) Sunil Mushran
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 29/30] ocfs2: Handle older prototype of bi_end_io_t Sunil Mushran
@ 2008-01-03 11:21 ` Sunil Mushran
  2008-01-08 16:03   ` Mark Fasheh
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 03/30] ocfs2: Handle workqueue changes Sunil Mushran
                   ` (25 subsequent siblings)
  27 siblings, 1 reply; 61+ messages in thread
From: Sunil Mushran @ 2008-01-03 11:21 UTC (permalink / raw)
  To: ocfs2-devel

Commit 47ae32d6a54955a041cdc30b06d0bb16e75f68d5 in mainline introduced
macro MNT_RELATIME to limit atime updates to frequency specified in the
mount option. This patch allows one to build ocfs2 with kernels having/not
having this change.

It should be noted that the functionality will not be available on kernels
not having the macro as the vfs support will be missing.

Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
---
 Makefile                       |    3 ++-
 configure.in                   |    5 +++++
 kapi-compat/include/relatime.h |    6 ++++++
 3 files changed, 13 insertions(+), 1 deletions(-)
 create mode 100644 kapi-compat/include/relatime.h

diff --git a/Makefile b/Makefile
index 5539d48..ea4b979 100644
--- a/Makefile
+++ b/Makefile
@@ -24,7 +24,8 @@ KAPI_COMPAT_FILES = \
 	kapi-compat/include/register_sysctl.h \
 	kapi-compat/include/su_mutex.h \
 	kapi-compat/include/kobject.h \
-	kapi-compat/include/cap.h
+	kapi-compat/include/cap.h \
+	kapi-compat/include/relatime.h
 
 PATCH_FILES =
 
diff --git a/configure.in b/configure.in
index e58cc18..a792b2f 100644
--- a/configure.in
+++ b/configure.in
@@ -258,6 +258,11 @@ OCFS2_CHECK_KERNEL([struct splice_desc in splice.h], splice.h,
   , NO_SPLICE_HEADER=yes, [^struct splice_desc ])
 AC_SUBST(NO_SPLICE_HEADER)
 
+relatime_compat_header=""
+OCFS2_CHECK_KERNEL([MNT_RELATIME in mount.h], mount.h,
+  , relatime_compat_header="relatime.h", [^#define MNT_RELATIME])
+KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $relatime_compat_header"
+
 # using -include has two advantages:
 #  the source doesn't need to know to include compat headers
 #  the compat header file names don't go through the search path
diff --git a/kapi-compat/include/relatime.h b/kapi-compat/include/relatime.h
new file mode 100644
index 0000000..34c5d38
--- /dev/null
+++ b/kapi-compat/include/relatime.h
@@ -0,0 +1,6 @@
+#ifndef KAPI_RELATIME_H
+#define KAPI_RELATIME_H
+
+#define MNT_RELATIME    0x20
+
+#endif
-- 
1.5.2.5

^ permalink raw reply related	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 30/30] ocfs2: Handle missing exportfs.h
  2008-01-03 11:22 [Ocfs2-devel] OCFS2 1.4 Repository Base (3rd attempt) Sunil Mushran
                   ` (4 preceding siblings ...)
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 24/30] ocfs2: Handle missing export generic_segment_checks() Sunil Mushran
@ 2008-01-03 11:21 ` Sunil Mushran
  2008-01-08 16:22   ` Mark Fasheh
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 18/30] ocfs2: Handle the removal of struct subsystem Sunil Mushran
                   ` (21 subsequent siblings)
  27 siblings, 1 reply; 61+ messages in thread
From: Sunil Mushran @ 2008-01-03 11:21 UTC (permalink / raw)
  To: ocfs2-devel

Commit a569425512253992cc64ebf8b6d00a62f986db3e in mainline
moved struct export_operation from fs.h to exportfs.h. This
patch allows one to build ocfs2 with kernels having/not having
this change.

Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
---
 Config.make.in    |    1 +
 configure.in      |    5 +++++
 fs/ocfs2/Makefile |    4 ++++
 fs/ocfs2/export.h |    2 ++
 4 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/Config.make.in b/Config.make.in
index 98577c6..ed67a49 100644
--- a/Config.make.in
+++ b/Config.make.in
@@ -75,6 +75,7 @@ IOP_IS_NOT_CONST = @IOP_IS_NOT_CONST@
 NO_VECTORIZED_AIO = @NO_VECTORIZED_AIO@
 NO_SPLICE_FROM_PIPE = @NO_SPLICE_FROM_PIPE@
 OLD_BIO_END_IO = @OLD_BIO_END_IO@
+NO_EXPORTFS_HEADER = @NO_EXPORTFS_HEADER@
 
 OCFS_DEBUG = @OCFS_DEBUG@
 
diff --git a/configure.in b/configure.in
index a55db86..b12aed8 100644
--- a/configure.in
+++ b/configure.in
@@ -301,6 +301,11 @@ OCFS2_CHECK_KERNEL([old bio_end_io_t in bio.h], bio.h,
   OLD_BIO_END_IO=yes, , [^typedef int (bio_end_io_t) (struct bio \*, unsigned int, int);])
 AC_SUBST(OLD_BIO_END_IO)
 
+NO_EXPORTFS_HEADER=
+OCFS2_CHECK_KERNEL([exportfs.h], exportfs.h,
+  , NO_EXPORTFS_HEADER=yes, [^struct export_operations {])
+AC_SUBST(NO_EXPORTFS_HEADER)
+
 # using -include has two advantages:
 #  the source doesn't need to know to include compat headers
 #  the compat header file names don't go through the search path
diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
index eb46c29..51cac1b 100644
--- a/fs/ocfs2/Makefile
+++ b/fs/ocfs2/Makefile
@@ -81,6 +81,10 @@ ifdef NO_SPLICE_FROM_PIPE
 EXTRA_CFLAGS += -DNO_SPLICE_FROM_PIPE
 endif
 
+ifdef NO_EXPORTFS_HEADER
+EXTRA_CFLAGS += -DNO_EXPORTFS_HEADER
+endif
+
 #
 # Since SUBDIRS means something to kbuild, define them safely.  Do not
 # include trailing slashes.
diff --git a/fs/ocfs2/export.h b/fs/ocfs2/export.h
index e08bed9..591b185 100644
--- a/fs/ocfs2/export.h
+++ b/fs/ocfs2/export.h
@@ -26,7 +26,9 @@
 #ifndef OCFS2_EXPORT_H
 #define OCFS2_EXPORT_H
 
+#ifndef NO_EXPORTFS_HEADER
 #include <linux/exportfs.h>
+#endif
 
 extern struct export_operations ocfs2_export_ops;
 
-- 
1.5.2.5

^ permalink raw reply related	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 24/30] ocfs2: Handle missing export generic_segment_checks()
  2008-01-03 11:22 [Ocfs2-devel] OCFS2 1.4 Repository Base (3rd attempt) Sunil Mushran
                   ` (3 preceding siblings ...)
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 25/30] ocfs2: Handle missing const s_op in struct super_block Sunil Mushran
@ 2008-01-03 11:21 ` Sunil Mushran
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 30/30] ocfs2: Handle missing exportfs.h Sunil Mushran
                   ` (22 subsequent siblings)
  27 siblings, 0 replies; 61+ messages in thread
From: Sunil Mushran @ 2008-01-03 11:21 UTC (permalink / raw)
  To: ocfs2-devel

Commit 0ceb331433e8aad9c5f441a965d7c681f8b9046f in mainline wraps
common segment checks in generic_segment_checks(). This patch allows
one to build ocfs2 with kernels having/not having this change.

Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
---
 Config.make.in                               |    1 +
 Makefile                                     |    3 +-
 configure.in                                 |    6 +++
 fs/ocfs2/Makefile                            |    4 ++
 kapi-compat/include/generic_segment_checks.h |   49 ++++++++++++++++++++++++++
 5 files changed, 62 insertions(+), 1 deletions(-)
 create mode 100644 kapi-compat/include/generic_segment_checks.h

diff --git a/Config.make.in b/Config.make.in
index 53792d0..a44bbe3 100644
--- a/Config.make.in
+++ b/Config.make.in
@@ -69,6 +69,7 @@ STRUCT_SUBSYSTEM_DEFINED = @STRUCT_SUBSYSTEM_DEFINED@
 NO_FALLOCATE = @NO_FALLOCATE@
 NO_SPLICE_HEADER = @NO_SPLICE_HEADER@
 NO_SHOULD_REMOVE_SUID = @NO_SHOULD_REMOVE_SUID@
+NO_GENERIC_SEGMENT_CHECKS = @NO_GENERIC_SEGMENT_CHECKS@
 
 OCFS_DEBUG = @OCFS_DEBUG@
 
diff --git a/Makefile b/Makefile
index 0c17fec..9427ce6 100644
--- a/Makefile
+++ b/Makefile
@@ -26,7 +26,8 @@ KAPI_COMPAT_FILES = \
 	kapi-compat/include/kobject.h \
 	kapi-compat/include/cap.h \
 	kapi-compat/include/relatime.h \
-	kapi-compat/include/should_remove_suid.h
+	kapi-compat/include/should_remove_suid.h \
+	kapi-compat/include/generic_segment_checks.h
 
 PATCH_FILES =
 
diff --git a/configure.in b/configure.in
index cd0c299..2f7e19c 100644
--- a/configure.in
+++ b/configure.in
@@ -269,6 +269,12 @@ OCFS2_CHECK_KERNEL([should_remove_suid() in fs.h], fs.h,
 AC_SUBST(NO_SHOULD_REMOVE_SUID)
 KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS should_remove_suid.h"
 
+NO_GENERIC_SEGMENT_CHECKS=
+OCFS2_CHECK_KERNEL([generic_segment_checks() in fs.h], fs.h,
+  , NO_GENERIC_SEGMENT_CHECKS=yes, [generic_segment_checks()])
+AC_SUBST(NO_GENERIC_SEGMENT_CHECKS)
+KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS generic_segment_checks.h"
+
 # using -include has two advantages:
 #  the source doesn't need to know to include compat headers
 #  the compat header file names don't go through the search path
diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
index cecd610..98a7ada 100644
--- a/fs/ocfs2/Makefile
+++ b/fs/ocfs2/Makefile
@@ -61,6 +61,10 @@ ifdef NO_SHOULD_REMOVE_SUID
 CFLAGS_file.o += -DNO_SHOULD_REMOVE_SUID
 endif
 
+ifdef NO_GENERIC_SEGMENT_CHECKS
+CFLAGS_file.o += -DNO_GENERIC_SEGMENT_CHECKS
+endif
+
 #
 # Since SUBDIRS means something to kbuild, define them safely.  Do not
 # include trailing slashes.
diff --git a/kapi-compat/include/generic_segment_checks.h b/kapi-compat/include/generic_segment_checks.h
new file mode 100644
index 0000000..84aa888
--- /dev/null
+++ b/kapi-compat/include/generic_segment_checks.h
@@ -0,0 +1,49 @@
+#ifndef KAPI_GENERIC_SEGMENT_CHECKS_H
+#define KAPI_GENERIC_SEGMENT_CHECKS_H
+
+#ifdef NO_GENERIC_SEGMENT_CHECKS
+
+#include <linux/fs.h>
+#include <linux/uaccess.h>
+#include <linux/uio.h>
+
+/*
+ * Performs necessary checks before doing a write
+ * @iov:	io vector request
+ * @nr_segs:	number of segments in the iovec
+ * @count:	number of bytes to write
+ * @access_flags: type of access: %VERIFY_READ or %VERIFY_WRITE
+ *
+ * Adjust number of segments and amount of bytes to write (nr_segs should be
+ * properly initialized first). Returns appropriate error code that caller
+ * should return or zero in case that write should be allowed.
+ */
+int generic_segment_checks(const struct iovec *iov,
+			unsigned long *nr_segs, size_t *count, int access_flags)
+{
+	unsigned long   seg;
+	size_t cnt = 0;
+	for (seg = 0; seg < *nr_segs; seg++) {
+		const struct iovec *iv = &iov[seg];
+
+		/*
+		 * If any segment has a negative length, or the cumulative
+		 * length ever wraps negative then return -EINVAL.
+		 */
+		cnt += iv->iov_len;
+		if (unlikely((ssize_t)(cnt|iv->iov_len) < 0))
+			return -EINVAL;
+		if (access_ok(access_flags, iv->iov_base, iv->iov_len))
+			continue;
+		if (seg == 0)
+			return -EFAULT;
+		*nr_segs = seg;
+		cnt -= iv->iov_len;	/* This segment is no good */
+		break;
+	}
+	*count = cnt;
+	return 0;
+}
+#endif
+
+#endif
-- 
1.5.2.5

^ permalink raw reply related	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 25/30] ocfs2: Handle missing const s_op in struct super_block
  2008-01-03 11:22 [Ocfs2-devel] OCFS2 1.4 Repository Base (3rd attempt) Sunil Mushran
                   ` (2 preceding siblings ...)
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 03/30] ocfs2: Handle workqueue changes Sunil Mushran
@ 2008-01-03 11:21 ` Sunil Mushran
  2008-01-08 16:13   ` Mark Fasheh
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 24/30] ocfs2: Handle missing export generic_segment_checks() Sunil Mushran
                   ` (23 subsequent siblings)
  27 siblings, 1 reply; 61+ messages in thread
From: Sunil Mushran @ 2008-01-03 11:21 UTC (permalink / raw)
  To: ocfs2-devel

Commit ee9b6d61a2a43c5952eb43283f8db284a4e70b8a in mainline marks
struct super_operations as a const in struct super_block. This patch
allows one to build with kernels having/not having this change.

Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
---
 Config.make.in        |    1 +
 configure.in          |    5 +++++
 fs/ocfs2/Makefile     |    4 ++++
 fs/ocfs2/dlm/Makefile |    4 ++++
 fs/ocfs2/dlm/dlmfs.c  |    8 ++++++++
 fs/ocfs2/super.c      |    4 ++++
 6 files changed, 26 insertions(+), 0 deletions(-)

diff --git a/Config.make.in b/Config.make.in
index a44bbe3..8479f37 100644
--- a/Config.make.in
+++ b/Config.make.in
@@ -70,6 +70,7 @@ NO_FALLOCATE = @NO_FALLOCATE@
 NO_SPLICE_HEADER = @NO_SPLICE_HEADER@
 NO_SHOULD_REMOVE_SUID = @NO_SHOULD_REMOVE_SUID@
 NO_GENERIC_SEGMENT_CHECKS = @NO_GENERIC_SEGMENT_CHECKS@
+SOP_IS_NOT_CONST = @SOP_IS_NOT_CONST@
 
 OCFS_DEBUG = @OCFS_DEBUG@
 
diff --git a/configure.in b/configure.in
index 2f7e19c..4771818 100644
--- a/configure.in
+++ b/configure.in
@@ -275,6 +275,11 @@ OCFS2_CHECK_KERNEL([generic_segment_checks() in fs.h], fs.h,
 AC_SUBST(NO_GENERIC_SEGMENT_CHECKS)
 KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS generic_segment_checks.h"
 
+SOP_IS_NOT_CONST=
+OCFS2_CHECK_KERNEL([s_op declared as const in struct super_block in fs.h], fs.h,
+  , SOP_IS_NOT_CONST=yes, [^.*const struct super_operations.*\*s_op;])
+AC_SUBST(SOP_IS_NOT_CONST)
+
 # using -include has two advantages:
 #  the source doesn't need to know to include compat headers
 #  the compat header file names don't go through the search path
diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
index 98a7ada..5a8a838 100644
--- a/fs/ocfs2/Makefile
+++ b/fs/ocfs2/Makefile
@@ -65,6 +65,10 @@ ifdef NO_GENERIC_SEGMENT_CHECKS
 CFLAGS_file.o += -DNO_GENERIC_SEGMENT_CHECKS
 endif
 
+ifdef SOP_IS_NOT_CONST
+EXTRA_CFLAGS += -DSOP_IS_NOT_CONST
+endif
+
 #
 # Since SUBDIRS means something to kbuild, define them safely.  Do not
 # include trailing slashes.
diff --git a/fs/ocfs2/dlm/Makefile b/fs/ocfs2/dlm/Makefile
index 76d794b..5108301 100644
--- a/fs/ocfs2/dlm/Makefile
+++ b/fs/ocfs2/dlm/Makefile
@@ -32,6 +32,10 @@ ifdef STRUCT_SUBSYSTEM_DEFINED
 EXTRA_CFLAGS += -DSTRUCT_SUBSYSTEM_DEFINED
 endif
 
+ifdef SOP_IS_NOT_CONST
+EXTRA_CFLAGS += -DSOP_IS_NOT_CONST
+endif
+
 DLM_SOURCES =			\
 	dlmast.c		\
 	dlmconvert.c		\
diff --git a/fs/ocfs2/dlm/dlmfs.c b/fs/ocfs2/dlm/dlmfs.c
index 78704a1..6d57554 100644
--- a/fs/ocfs2/dlm/dlmfs.c
+++ b/fs/ocfs2/dlm/dlmfs.c
@@ -60,7 +60,11 @@
 #define MLOG_MASK_PREFIX ML_DLMFS
 #include "cluster/masklog.h"
 
+#ifdef SOP_IS_NOT_CONST
+static struct super_operations dlmfs_ops;
+#else
 static const struct super_operations dlmfs_ops;
+#endif
 static const struct file_operations dlmfs_file_operations;
 static const struct inode_operations dlmfs_dir_inode_operations;
 static const struct inode_operations dlmfs_root_inode_operations;
@@ -556,7 +560,11 @@ static const struct inode_operations dlmfs_root_inode_operations = {
 	.rmdir		= simple_rmdir,
 };
 
+#ifdef SOP_IS_NOT_CONST
+static struct super_operations dlmfs_ops = {
+#else
 static const struct super_operations dlmfs_ops = {
+#endif
 	.statfs		= simple_statfs,
 	.alloc_inode	= dlmfs_alloc_inode,
 	.destroy_inode	= dlmfs_destroy_inode,
diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c
index f5c424d..43147c0 100644
--- a/fs/ocfs2/super.c
+++ b/fs/ocfs2/super.c
@@ -124,7 +124,11 @@ static void ocfs2_write_super(struct super_block *sb);
 static struct inode *ocfs2_alloc_inode(struct super_block *sb);
 static void ocfs2_destroy_inode(struct inode *inode);
 
+#ifdef SOP_IS_NOT_CONST
+static struct super_operations ocfs2_sops = {
+#else
 static const struct super_operations ocfs2_sops = {
+#endif
 	.statfs		= ocfs2_statfs,
 	.alloc_inode	= ocfs2_alloc_inode,
 	.destroy_inode	= ocfs2_destroy_inode,
-- 
1.5.2.5

^ permalink raw reply related	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 14/30] ocfs2: Handle enum value FS_OCFS2
  2008-01-03 11:22 [Ocfs2-devel] OCFS2 1.4 Repository Base (3rd attempt) Sunil Mushran
                   ` (7 preceding siblings ...)
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 27/30] ocfs2: Handle missing vectorized fileops aio_read() and aio_write() Sunil Mushran
@ 2008-01-03 11:21 ` Sunil Mushran
  2008-01-08 15:43   ` Mark Fasheh
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 23/30] ocfs2: Handles missing export should_remove_suid() Sunil Mushran
                   ` (18 subsequent siblings)
  27 siblings, 1 reply; 61+ messages in thread
From: Sunil Mushran @ 2008-01-03 11:21 UTC (permalink / raw)
  To: ocfs2-devel

Commit 0e03036c97b70b2602f7dedaa3a223ed7563c2c9 in mainline registers
ocfs2 sysctl (FS_OCFS2) number under CTL_FS. This patch allows one to
build ocfs2 with kernels having/not having this change.

Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
---
 Makefile                     |    3 ++-
 configure.in                 |    5 +++++
 kapi-compat/include/sysctl.h |    9 +++++++++
 3 files changed, 16 insertions(+), 1 deletions(-)
 create mode 100644 kapi-compat/include/sysctl.h

diff --git a/Makefile b/Makefile
index 43cd04c..1d27943 100644
--- a/Makefile
+++ b/Makefile
@@ -18,7 +18,8 @@ KAPI_COMPAT_FILES = \
 	kapi-compat/include/inc_nlink.h \
 	kapi-compat/include/drop_nlink.h \
 	kapi-compat/include/slab.h \
-	kapi-compat/include/fs_rename_does_d_move.h
+	kapi-compat/include/fs_rename_does_d_move.h \
+	kapi-compat/include/sysctl.h
 
 PATCH_FILES =
 
diff --git a/configure.in b/configure.in
index ae5dada..28e1198 100644
--- a/configure.in
+++ b/configure.in
@@ -215,6 +215,11 @@ OCFS2_CHECK_KERNEL([flag FS_RENAME_DOES_D_MOVE in fs.h], fs.h,
   , fstype_compat_header="fs_rename_does_d_move.h", [FS_RENAME_DOES_D_MOVE])
 KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $fstype_compat_header"
 
+sysctl_compat_header=""
+OCFS2_CHECK_KERNEL([enum FS_OCFS2 in sysctl.h], sysctl.h,
+  , sysctl_compat_header="sysctl.h", [FS_OCFS2])
+KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $sysctl_compat_header"
+
 # using -include has two advantages:
 #  the source doesn't need to know to include compat headers
 #  the compat header file names don't go through the search path
diff --git a/kapi-compat/include/sysctl.h b/kapi-compat/include/sysctl.h
new file mode 100644
index 0000000..73ed0a7
--- /dev/null
+++ b/kapi-compat/include/sysctl.h
@@ -0,0 +1,9 @@
+#ifndef KAPI_SYSCTL_H
+#define KAPI_SYSCTL_H
+
+/* CTL_FS names: */
+enum {
+	FS_OCFS2=988,   /* ocfs2 */
+};
+
+#endif
-- 
1.5.2.5

^ permalink raw reply related	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 27/30] ocfs2: Handle missing vectorized fileops aio_read() and aio_write()
  2008-01-03 11:22 [Ocfs2-devel] OCFS2 1.4 Repository Base (3rd attempt) Sunil Mushran
                   ` (6 preceding siblings ...)
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 18/30] ocfs2: Handle the removal of struct subsystem Sunil Mushran
@ 2008-01-03 11:21 ` Sunil Mushran
  2008-01-08 16:17   ` Mark Fasheh
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 14/30] ocfs2: Handle enum value FS_OCFS2 Sunil Mushran
                   ` (19 subsequent siblings)
  27 siblings, 1 reply; 61+ messages in thread
From: Sunil Mushran @ 2008-01-03 11:21 UTC (permalink / raw)
  To: ocfs2-devel

Commit 027445c37282bc1ed26add45e573ad2d3e4860a5 in mainline vectorized
fileops aio_read() and aio_write(). This patch allows one to build ocfs2
with kernels having/not having this change.

Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
---
 Config.make.in               |    1 +
 Makefile                     |    3 +-
 configure.in                 |    6 ++++
 fs/ocfs2/Makefile            |    4 ++
 fs/ocfs2/file.c              |    6 ++--
 kapi-compat/include/aiovec.h |   68 ++++++++++++++++++++++++++++++++++++++++++
 6 files changed, 84 insertions(+), 4 deletions(-)
 create mode 100644 kapi-compat/include/aiovec.h

diff --git a/Config.make.in b/Config.make.in
index 4b2d1c5..c6deb57 100644
--- a/Config.make.in
+++ b/Config.make.in
@@ -72,6 +72,7 @@ NO_SHOULD_REMOVE_SUID = @NO_SHOULD_REMOVE_SUID@
 NO_GENERIC_SEGMENT_CHECKS = @NO_GENERIC_SEGMENT_CHECKS@
 SOP_IS_NOT_CONST = @SOP_IS_NOT_CONST@
 IOP_IS_NOT_CONST = @IOP_IS_NOT_CONST@
+NO_VECTORIZED_AIO = @NO_VECTORIZED_AIO@
 
 OCFS_DEBUG = @OCFS_DEBUG@
 
diff --git a/Makefile b/Makefile
index 9427ce6..a3a0c9d 100644
--- a/Makefile
+++ b/Makefile
@@ -27,7 +27,8 @@ KAPI_COMPAT_FILES = \
 	kapi-compat/include/cap.h \
 	kapi-compat/include/relatime.h \
 	kapi-compat/include/should_remove_suid.h \
-	kapi-compat/include/generic_segment_checks.h
+	kapi-compat/include/generic_segment_checks.h \
+	kapi-compat/include/aiovec.h
 
 PATCH_FILES =
 
diff --git a/configure.in b/configure.in
index a6f4336..8c30910 100644
--- a/configure.in
+++ b/configure.in
@@ -285,6 +285,12 @@ OCFS2_CHECK_KERNEL([i_op declared as const in struct inode in fs.h], fs.h,
   , IOP_IS_NOT_CONST=yes, [^.*const struct inode_operations.*\*i_op;])
 AC_SUBST(IOP_IS_NOT_CONST)
 
+NO_VECTORIZED_AIO=
+OCFS2_CHECK_KERNEL([aio_read() in struct file_operations using iovec in fs.h], fs.h,
+  , NO_VECTORIZED_AIO=yes, [ssize_t (\*aio_read) (struct kiocb \*, const struct iovec \*, unsigned long, loff_t);])
+AC_SUBST(NO_VECTORIZED_AIO)
+KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS aiovec.h"
+
 # using -include has two advantages:
 #  the source doesn't need to know to include compat headers
 #  the compat header file names don't go through the search path
diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
index a894c45..1646a9b 100644
--- a/fs/ocfs2/Makefile
+++ b/fs/ocfs2/Makefile
@@ -73,6 +73,10 @@ ifdef IOP_IS_NOT_CONST
 EXTRA_CFLAGS += -DIOP_IS_NOT_CONST
 endif
 
+ifdef NO_VECTORIZED_AIO
+CFLAGS_file.o += -DNO_VECTORIZED_AIO
+endif
+
 #
 # Since SUBDIRS means something to kbuild, define them safely.  Do not
 # include trailing slashes.
diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
index a19322e..62040aa 100644
--- a/fs/ocfs2/file.c
+++ b/fs/ocfs2/file.c
@@ -2017,7 +2017,7 @@ out:
 	return total ? total : ret;
 }
 
-static ssize_t ocfs2_file_aio_write(struct kiocb *iocb,
+static ssize_t __ocfs2_file_aio_write(struct kiocb *iocb,
 				    const struct iovec *iov,
 				    unsigned long nr_segs,
 				    loff_t pos)
@@ -2322,7 +2322,7 @@ bail:
 	return ret;
 }
 
-static ssize_t ocfs2_file_aio_read(struct kiocb *iocb,
+static ssize_t __ocfs2_file_aio_read(struct kiocb *iocb,
 				   const struct iovec *iov,
 				   unsigned long nr_segs,
 				   loff_t pos)
@@ -2376,7 +2376,7 @@ static ssize_t ocfs2_file_aio_read(struct kiocb *iocb,
 	}
 	ocfs2_meta_unlock(inode, lock_level);
 
-	ret = generic_file_aio_read(iocb, iov, nr_segs, iocb->ki_pos);
+	ret = kapi_generic_file_aio_read(iocb, iov, nr_segs, iocb->ki_pos);
 	if (ret == -EINVAL)
 		mlog(ML_ERROR, "generic_file_aio_read returned -EINVAL\n");
 
diff --git a/kapi-compat/include/aiovec.h b/kapi-compat/include/aiovec.h
new file mode 100644
index 0000000..e6cb3fb
--- /dev/null
+++ b/kapi-compat/include/aiovec.h
@@ -0,0 +1,68 @@
+#ifndef KAPI_AIOVEC_H
+#define KAPI_AIOVEC_H
+
+#ifdef NO_VECTORIZED_AIO
+
+#include <linux/fs.h>
+#include <linux/uio.h>
+
+static ssize_t kapi_generic_file_aio_read(struct kiocb *iocb,
+					  const struct iovec *iov,
+					  unsigned long nr_segs,
+					  loff_t pos)
+{
+	BUG_ON(nr_segs != 1);
+	return generic_file_aio_read(iocb, iov->iov_base, iov->iov_len, pos);
+}
+
+static ssize_t __ocfs2_file_aio_read(struct kiocb *iocb,
+				     const struct iovec *iov,
+				     unsigned long nr_segs,
+				     loff_t pos);
+
+static ssize_t ocfs2_file_aio_read(struct kiocb *iocb,
+				   char __user *buf,
+				   size_t buflen,
+				   loff_t pos)
+{
+	struct iovec iov_local = { .iov_base = (void __user *)buf,
+				   .iov_len  = buflen };
+	const struct iovec *iov = &iov_local;
+	unsigned long nr_segs = 1;
+
+	return __ocfs2_file_aio_read(iocb, iov, nr_segs, pos);
+}
+
+static ssize_t __ocfs2_file_aio_write(struct kiocb *iocb,
+				      const struct iovec *iov,
+				      unsigned long nr_segs,
+				      loff_t pos);
+
+static ssize_t ocfs2_file_aio_write(struct kiocb *iocb,
+				    const char __user *buf,
+				    size_t buflen,
+				    loff_t pos)
+{
+	struct iovec iov_local = { .iov_base = (void __user *)buf,
+				   .iov_len  = buflen };
+	const struct iovec *iov = &iov_local;
+	unsigned long nr_segs = 1;
+
+	iocb->ki_left = buflen;
+	return __ocfs2_file_aio_write(iocb, iov, nr_segs, pos);
+}
+
+#else	/* ! NO_VECTORIZED_AIO */
+
+#define kapi_generic_file_aio_read(a, b, c, d) \
+			generic_file_aio_read(a, b, c, d)
+
+#define ocfs2_file_aio_read(a, b, c, d) \
+			__ocfs2_file_aio_read(a, b, c, d)
+
+#define ocfs2_file_aio_write(a, b, c, d) \
+			__ocfs2_file_aio_write(a, b, c, d)
+
+#endif
+
+#endif
-- 
1.5.2.5

^ permalink raw reply related	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 18/30] ocfs2: Handle the removal of struct subsystem
  2008-01-03 11:22 [Ocfs2-devel] OCFS2 1.4 Repository Base (3rd attempt) Sunil Mushran
                   ` (5 preceding siblings ...)
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 30/30] ocfs2: Handle missing exportfs.h Sunil Mushran
@ 2008-01-03 11:21 ` Sunil Mushran
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 27/30] ocfs2: Handle missing vectorized fileops aio_read() and aio_write() Sunil Mushran
                   ` (20 subsequent siblings)
  27 siblings, 0 replies; 61+ messages in thread
From: Sunil Mushran @ 2008-01-03 11:21 UTC (permalink / raw)
  To: ocfs2-devel

Commit 823bccfc4002296ba88c3ad0f049e1abd8108d30 in mainline removes struct
subsystem from kobject.h. This patch allows one to build ocfs2 with kernels
having/not having this change.

Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
---
 Config.make.in                |    1 +
 Makefile                      |    3 ++-
 configure.in                  |    6 ++++++
 fs/ocfs2/Makefile             |    4 ++++
 fs/ocfs2/cluster/Makefile     |    4 ++++
 fs/ocfs2/cluster/masklog.c    |    2 +-
 fs/ocfs2/cluster/sys.c        |    8 ++++----
 fs/ocfs2/dlm/Makefile         |    4 ++++
 kapi-compat/include/kobject.h |   12 ++++++++++++
 9 files changed, 38 insertions(+), 6 deletions(-)
 create mode 100644 kapi-compat/include/kobject.h

diff --git a/Config.make.in b/Config.make.in
index b12623a..34c4825 100644
--- a/Config.make.in
+++ b/Config.make.in
@@ -65,6 +65,7 @@ NO_F_PATH_IN_STRUCT_FILE = @NO_F_PATH_IN_STRUCT_FILE@
 KMEM_CACHE_CREATE_DTOR = @KMEM_CACHE_CREATE_DTOR@
 REGISTER_SYSCTL_TWO_ARGS = @REGISTER_SYSCTL_TWO_ARGS@
 NO_SU_MUTEX_IN_STRUCT_CONFIGFS_SUBSYSTEM = @NO_SU_MUTEX_IN_STRUCT_CONFIGFS_SUBSYSTEM@
+STRUCT_SUBSYSTEM_DEFINED = @STRUCT_SUBSYSTEM_DEFINED@
 
 OCFS_DEBUG = @OCFS_DEBUG@
 
diff --git a/Makefile b/Makefile
index 1ecedd2..b035e29 100644
--- a/Makefile
+++ b/Makefile
@@ -22,7 +22,8 @@ KAPI_COMPAT_FILES = \
 	kapi-compat/include/sysctl.h \
 	kapi-compat/include/configfs.h \
 	kapi-compat/include/register_sysctl.h \
-	kapi-compat/include/su_mutex.h
+	kapi-compat/include/su_mutex.h \
+	kapi-compat/include/kobject.h
 
 PATCH_FILES =
 
diff --git a/configure.in b/configure.in
index 034f104..4164a42 100644
--- a/configure.in
+++ b/configure.in
@@ -237,6 +237,12 @@ OCFS2_CHECK_KERNEL([su_mutex in struct configfs_subsystem in configfs.h], config
 AC_SUBST(NO_SU_MUTEX_IN_STRUCT_CONFIGFS_SUBSYSTEM)
 KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS su_mutex.h"
 
+STRUCT_SUBSYSTEM_DEFINED=
+OCFS2_CHECK_KERNEL([struct subsystem in kobject.h], kobject.h,
+  STRUCT_SUBSYSTEM_DEFINED=yes, , [^struct subsystem {])
+AC_SUBST(STRUCT_SUBSYSTEM_DEFINED)
+KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS kobject.h"
+
 # using -include has two advantages:
 #  the source doesn't need to know to include compat headers
 #  the compat header file names don't go through the search path
diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
index 1924d5c..2511fba 100644
--- a/fs/ocfs2/Makefile
+++ b/fs/ocfs2/Makefile
@@ -45,6 +45,10 @@ ifdef KMEM_CACHE_CREATE_DTOR
 EXTRA_CFLAGS += -DKMEM_CACHE_CREATE_DTOR
 endif
 
+ifdef STRUCT_SUBSYSTEM_DEFINED
+EXTRA_CFLAGS += -DSTRUCT_SUBSYSTEM_DEFINED
+endif
+
 #
 # Since SUBDIRS means something to kbuild, define them safely.  Do not
 # include trailing slashes.
diff --git a/fs/ocfs2/cluster/Makefile b/fs/ocfs2/cluster/Makefile
index 671104a..512bfa1 100644
--- a/fs/ocfs2/cluster/Makefile
+++ b/fs/ocfs2/cluster/Makefile
@@ -25,6 +25,10 @@ ifdef NO_SU_MUTEX_IN_STRUCT_CONFIGFS_SUBSYSTEM
 EXTRA_CFLAGS += -DNO_SU_MUTEX_IN_STRUCT_CONFIGFS_SUBSYSTEM
 endif
 
+ifdef STRUCT_SUBSYSTEM_DEFINED
+EXTRA_CFLAGS += -DSTRUCT_SUBSYSTEM_DEFINED
+endif
+
 SOURCES =			\
 	heartbeat.c		\
 	masklog.c		\
diff --git a/fs/ocfs2/cluster/masklog.c b/fs/ocfs2/cluster/masklog.c
index e9e042b..ced6c35 100644
--- a/fs/ocfs2/cluster/masklog.c
+++ b/fs/ocfs2/cluster/masklog.c
@@ -156,7 +156,7 @@ int mlog_sys_init(struct kset *o2cb_subsys)
 	}
 	mlog_attr_ptrs[i] = NULL;
 
-	kobj_set_kset_s(&mlog_kset, *o2cb_subsys);
+	kobj_set_kset_s(&mlog_kset, kapi_subsystem(o2cb_subsys));
 	return kset_register(&mlog_kset);
 }
 
diff --git a/fs/ocfs2/cluster/sys.c b/fs/ocfs2/cluster/sys.c
index 64f6f37..c3e4131 100644
--- a/fs/ocfs2/cluster/sys.c
+++ b/fs/ocfs2/cluster/sys.c
@@ -80,7 +80,7 @@ o2cb_show(struct kobject * kobj, struct attribute * attr, char * buffer)
 	struct o2cb_attribute *o2cb_attr = to_o2cb_attr(attr);
 	struct kset *sbs = to_kset(kobj);
 
-	BUG_ON(sbs != &o2cb_subsys);
+	BUG_ON(sbs != kapi_subsystem_kset(&o2cb_subsys));
 
 	if (o2cb_attr->show)
 		return o2cb_attr->show(buffer);
@@ -94,7 +94,7 @@ o2cb_store(struct kobject * kobj, struct attribute * attr,
 	struct o2cb_attribute *o2cb_attr = to_o2cb_attr(attr);
 	struct kset *sbs = to_kset(kobj);
 
-	BUG_ON(sbs != &o2cb_subsys);
+	BUG_ON(sbs != kapi_subsystem_kset(&o2cb_subsys));
 
 	if (o2cb_attr->store)
 		return o2cb_attr->store(buffer, count);
@@ -111,12 +111,12 @@ int o2cb_sys_init(void)
 {
 	int ret;
 
-	o2cb_subsys.kobj.ktype = &o2cb_subsys_type;
+	kapi_subsystem_kset(&o2cb_subsys)->kobj.ktype = &o2cb_subsys_type;
 	ret = subsystem_register(&o2cb_subsys);
 	if (ret)
 		return ret;
 
-	ret = mlog_sys_init(&o2cb_subsys);
+	ret = mlog_sys_init(kapi_subsystem_kset(&o2cb_subsys));
 	if (ret)
 		subsystem_unregister(&o2cb_subsys);
 	return ret;
diff --git a/fs/ocfs2/dlm/Makefile b/fs/ocfs2/dlm/Makefile
index f8a5376..76d794b 100644
--- a/fs/ocfs2/dlm/Makefile
+++ b/fs/ocfs2/dlm/Makefile
@@ -28,6 +28,10 @@ ifdef KMEM_CACHE_CREATE_DTOR
 EXTRA_CFLAGS += -DKMEM_CACHE_CREATE_DTOR
 endif
 
+ifdef STRUCT_SUBSYSTEM_DEFINED
+EXTRA_CFLAGS += -DSTRUCT_SUBSYSTEM_DEFINED
+endif
+
 DLM_SOURCES =			\
 	dlmast.c		\
 	dlmconvert.c		\
diff --git a/kapi-compat/include/kobject.h b/kapi-compat/include/kobject.h
new file mode 100644
index 0000000..c613868
--- /dev/null
+++ b/kapi-compat/include/kobject.h
@@ -0,0 +1,12 @@
+#ifndef KAPI_KOBJECT_H
+#define KAPI_KOBJECT_H
+
+#ifdef STRUCT_SUBSYSTEM_DEFINED
+# define kapi_subsystem_kset(_sub)	(&((_sub)->kset))
+# define kapi_subsystem(_sub)		*((struct subsystem *)(_sub))
+#else
+# define kapi_subsystem_kset(_sub)	(_sub)
+# define kapi_subsystem(_sub)		(_sub)
+#endif
+
+#endif
-- 
1.5.2.5

^ permalink raw reply related	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 28/30] ocfs2: Handle missing __splice_from_pipe()
  2008-01-03 11:22 [Ocfs2-devel] OCFS2 1.4 Repository Base (3rd attempt) Sunil Mushran
                   ` (9 preceding siblings ...)
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 23/30] ocfs2: Handles missing export should_remove_suid() Sunil Mushran
@ 2008-01-03 11:21 ` Sunil Mushran
  2008-01-08 16:19   ` Mark Fasheh
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 07/30] ocfs2: Handle missing vmops->fault() Sunil Mushran
                   ` (16 subsequent siblings)
  27 siblings, 1 reply; 61+ messages in thread
From: Sunil Mushran @ 2008-01-03 11:21 UTC (permalink / raw)
  To: ocfs2-devel

Commit c66ab6fa705e1b2887a6d9246b798bdc526839e2 in mainline introduced
__splice_from_pipe(). This patch allows one to build ocfs2 with kernels
having/not having this change.

Note: This patch disables splice io for kernels not providing
__splice_from_pipe(). We will later add a patch to enable splice
io with such kernels too.

Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
---
 Config.make.in    |    1 +
 configure.in      |    5 +++++
 fs/ocfs2/Makefile |    4 ++++
 fs/ocfs2/file.c   |    4 ++++
 4 files changed, 14 insertions(+), 0 deletions(-)

diff --git a/Config.make.in b/Config.make.in
index c6deb57..114cf90 100644
--- a/Config.make.in
+++ b/Config.make.in
@@ -73,6 +73,7 @@ NO_GENERIC_SEGMENT_CHECKS = @NO_GENERIC_SEGMENT_CHECKS@
 SOP_IS_NOT_CONST = @SOP_IS_NOT_CONST@
 IOP_IS_NOT_CONST = @IOP_IS_NOT_CONST@
 NO_VECTORIZED_AIO = @NO_VECTORIZED_AIO@
+NO_SPLICE_FROM_PIPE = @NO_SPLICE_FROM_PIPE@
 
 OCFS_DEBUG = @OCFS_DEBUG@
 
diff --git a/configure.in b/configure.in
index 8c30910..b1e7be6 100644
--- a/configure.in
+++ b/configure.in
@@ -291,6 +291,11 @@ OCFS2_CHECK_KERNEL([aio_read() in struct file_operations using iovec in fs.h], f
 AC_SUBST(NO_VECTORIZED_AIO)
 KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS aiovec.h"
 
+NO_SPLICE_FROM_PIPE=
+OCFS2_CHECK_KERNEL([__splice_from_pipe() in splice.h], splice.h,
+  , NO_SPLICE_FROM_PIPE=yes, [^extern ssize_t __splice_from_pipe(struct pipe_inode_info \*])
+AC_SUBST(NO_SPLICE_FROM_PIPE)
+
 # using -include has two advantages:
 #  the source doesn't need to know to include compat headers
 #  the compat header file names don't go through the search path
diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
index 1646a9b..eb46c29 100644
--- a/fs/ocfs2/Makefile
+++ b/fs/ocfs2/Makefile
@@ -77,6 +77,10 @@ ifdef NO_VECTORIZED_AIO
 CFLAGS_file.o += -DNO_VECTORIZED_AIO
 endif
 
+ifdef NO_SPLICE_FROM_PIPE
+EXTRA_CFLAGS += -DNO_SPLICE_FROM_PIPE
+endif
+
 #
 # Since SUBDIRS means something to kbuild, define them safely.  Do not
 # include trailing slashes.
diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
index 62040aa..ad73b3c 100644
--- a/fs/ocfs2/file.c
+++ b/fs/ocfs2/file.c
@@ -2173,6 +2173,7 @@ out_sems:
 	return written ? written : ret;
 }
 
+#ifndef NO_SPLICE_FROM_PIPE
 static int ocfs2_splice_write_actor(struct pipe_inode_info *pipe,
 				    struct pipe_buffer *buf,
 				    struct splice_desc *sd)
@@ -2321,6 +2322,7 @@ bail:
 	mlog_exit(ret);
 	return ret;
 }
+#endif
 
 static ssize_t __ocfs2_file_aio_read(struct kiocb *iocb,
 				   const struct iovec *iov,
@@ -2435,8 +2437,10 @@ const struct file_operations ocfs2_fops = {
 #ifdef CONFIG_COMPAT
 	.compat_ioctl   = ocfs2_compat_ioctl,
 #endif
+#ifndef NO_SPLICE_FROM_PIPE
 	.splice_read	= ocfs2_file_splice_read,
 	.splice_write	= ocfs2_file_splice_write,
+#endif
 };
 
 const struct file_operations ocfs2_dops = {
-- 
1.5.2.5

^ permalink raw reply related	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 23/30] ocfs2: Handles missing export should_remove_suid()
  2008-01-03 11:22 [Ocfs2-devel] OCFS2 1.4 Repository Base (3rd attempt) Sunil Mushran
                   ` (8 preceding siblings ...)
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 14/30] ocfs2: Handle enum value FS_OCFS2 Sunil Mushran
@ 2008-01-03 11:21 ` Sunil Mushran
  2008-01-08 16:05   ` Mark Fasheh
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 28/30] ocfs2: Handle missing __splice_from_pipe() Sunil Mushran
                   ` (17 subsequent siblings)
  27 siblings, 1 reply; 61+ messages in thread
From: Sunil Mushran @ 2008-01-03 11:21 UTC (permalink / raw)
  To: ocfs2-devel

Commits 01de85e057328ecbef36e108673b1e81059d54c1 and
d23a147bb6e8d467e8df73b6589888717da3b9ce in mainline added and exported
symbol should_remove_suid(). This patch allows one to build ocfs2 with
kernels having/not having these changes.

Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
---
 Config.make.in                           |    1 +
 Makefile                                 |    3 +-
 configure.in                             |    6 +++++
 fs/ocfs2/Makefile                        |    4 +++
 kapi-compat/include/should_remove_suid.h |   37 ++++++++++++++++++++++++++++++
 5 files changed, 50 insertions(+), 1 deletions(-)
 create mode 100644 kapi-compat/include/should_remove_suid.h

diff --git a/Config.make.in b/Config.make.in
index a912f40..53792d0 100644
--- a/Config.make.in
+++ b/Config.make.in
@@ -68,6 +68,7 @@ NO_SU_MUTEX_IN_STRUCT_CONFIGFS_SUBSYSTEM = @NO_SU_MUTEX_IN_STRUCT_CONFIGFS_SUBSY
 STRUCT_SUBSYSTEM_DEFINED = @STRUCT_SUBSYSTEM_DEFINED@
 NO_FALLOCATE = @NO_FALLOCATE@
 NO_SPLICE_HEADER = @NO_SPLICE_HEADER@
+NO_SHOULD_REMOVE_SUID = @NO_SHOULD_REMOVE_SUID@
 
 OCFS_DEBUG = @OCFS_DEBUG@
 
diff --git a/Makefile b/Makefile
index ea4b979..0c17fec 100644
--- a/Makefile
+++ b/Makefile
@@ -25,7 +25,8 @@ KAPI_COMPAT_FILES = \
 	kapi-compat/include/su_mutex.h \
 	kapi-compat/include/kobject.h \
 	kapi-compat/include/cap.h \
-	kapi-compat/include/relatime.h
+	kapi-compat/include/relatime.h \
+	kapi-compat/include/should_remove_suid.h
 
 PATCH_FILES =
 
diff --git a/configure.in b/configure.in
index a792b2f..cd0c299 100644
--- a/configure.in
+++ b/configure.in
@@ -263,6 +263,12 @@ OCFS2_CHECK_KERNEL([MNT_RELATIME in mount.h], mount.h,
   , relatime_compat_header="relatime.h", [^#define MNT_RELATIME])
 KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $relatime_compat_header"
 
+NO_SHOULD_REMOVE_SUID=
+OCFS2_CHECK_KERNEL([should_remove_suid() in fs.h], fs.h,
+  , NO_SHOULD_REMOVE_SUID=yes, [should_remove_suid()])
+AC_SUBST(NO_SHOULD_REMOVE_SUID)
+KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS should_remove_suid.h"
+
 # using -include has two advantages:
 #  the source doesn't need to know to include compat headers
 #  the compat header file names don't go through the search path
diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
index 58be004..cecd610 100644
--- a/fs/ocfs2/Makefile
+++ b/fs/ocfs2/Makefile
@@ -57,6 +57,10 @@ ifdef NO_SPLICE_HEADER
 EXTRA_CFLAGS += -DNO_SPLICE_HEADER
 endif
 
+ifdef NO_SHOULD_REMOVE_SUID
+CFLAGS_file.o += -DNO_SHOULD_REMOVE_SUID
+endif
+
 #
 # Since SUBDIRS means something to kbuild, define them safely.  Do not
 # include trailing slashes.
diff --git a/kapi-compat/include/should_remove_suid.h b/kapi-compat/include/should_remove_suid.h
new file mode 100644
index 0000000..4c9e598
--- /dev/null
+++ b/kapi-compat/include/should_remove_suid.h
@@ -0,0 +1,37 @@
+#ifndef KAP_SHOULD_REMOVE_SUID_H
+#define KAP_SHOULD_REMOVE_SUID_H
+
+#ifdef NO_SHOULD_REMOVE_SUID
+
+#include <linux/fs.h>
+
+/*
+ * The logic we want is
+ *
+ *	if suid or (sgid and xgrp)
+ *		remove privs
+ */
+int should_remove_suid(struct dentry *dentry)
+{
+	mode_t mode = dentry->d_inode->i_mode;
+	int kill = 0;
+
+	/* suid always must be killed */
+	if (unlikely(mode & S_ISUID))
+		kill = ATTR_KILL_SUID;
+
+	/*
+	 * sgid without any exec bits is just a mandatory locking mark; leave
+	 * it alone.  If some exec bits are set, it's a real sgid; kill it.
+	 */
+	if (unlikely((mode & S_ISGID) && (mode & S_IXGRP)))
+		kill |= ATTR_KILL_SGID;
+
+	if (unlikely(kill && !capable(CAP_FSETID)))
+		return kill;
+
+	return 0;
+}
+#endif
+
+#endif
-- 
1.5.2.5

^ permalink raw reply related	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 07/30] ocfs2: Handle missing vmops->fault()
  2008-01-03 11:22 [Ocfs2-devel] OCFS2 1.4 Repository Base (3rd attempt) Sunil Mushran
                   ` (10 preceding siblings ...)
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 28/30] ocfs2: Handle missing __splice_from_pipe() Sunil Mushran
@ 2008-01-03 11:21 ` Sunil Mushran
  2008-01-08 13:20   ` Mark Fasheh
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 17/30] ocfs2: Handle su_mutex in struct configfs_subsystem Sunil Mushran
                   ` (15 subsequent siblings)
  27 siblings, 1 reply; 61+ messages in thread
From: Sunil Mushran @ 2008-01-03 11:21 UTC (permalink / raw)
  To: ocfs2-devel

Commit 54cb8821de07f2ffcd28c380ce9b93d5784b40d7 in mainline introduces
vmops->fault() which is used to replace vmops->populate() and vmops->nopage().
This patch allows one to build ocfs2 with kernels having/not having this
change.

Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
---
 Config.make.in    |    1 +
 configure.in      |    5 ++++
 fs/ocfs2/Makefile |    4 +++
 fs/ocfs2/mmap.c   |   55 +++++++++++++++++++++++++++++++++++++++++++++++++---
 4 files changed, 61 insertions(+), 4 deletions(-)

diff --git a/Config.make.in b/Config.make.in
index 67ee363..4208ece 100644
--- a/Config.make.in
+++ b/Config.make.in
@@ -60,6 +60,7 @@ EXTRA_CFLAGS += @KAPI_COMPAT_CFLAGS@
 NO_DELAYED_WORK = @NO_DELAYED_WORK@
 
 NO_SYNC_MAPPING_RANGE  = @NO_SYNC_MAPPING_RANGE@
+NO_FAULT_IN_VMOPS = @NO_FAULT_IN_VMOPS@
 
 OCFS_DEBUG = @OCFS_DEBUG@
 
diff --git a/configure.in b/configure.in
index 72698ae..1aced84 100644
--- a/configure.in
+++ b/configure.in
@@ -178,6 +178,11 @@ OCFS2_CHECK_KERNEL([do_sync_mapping_range() in fs.h], fs.h,
 KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS sync_mapping_range.h"
 AC_SUBST(NO_SYNC_MAPPING_RANGE)
 
+NO_FAULT_IN_VMOPS=
+OCFS2_CHECK_KERNEL([fault() in struct vm_operations_struct in mm.h], mm.h,
+  , NO_FAULT_IN_VMOPS=yes, [^.*int (\*fault)])
+AC_SUBST(NO_FAULT_IN_VMOPS)
+
 # using -include has two advantages:
 #  the source doesn't need to know to include compat headers
 #  the compat header file names don't go through the search path
diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
index 737c12a..cbf3118 100644
--- a/fs/ocfs2/Makefile
+++ b/fs/ocfs2/Makefile
@@ -33,6 +33,10 @@ ifdef NO_SYNC_MAPPING_RANGE
 CFLAGS_alloc.o += -DNO_SYNC_MAPPING_RANGE
 endif
 
+ifdef NO_FAULT_IN_VMOPS
+EXTRA_CFLAGS += -DNO_FAULT_IN_VMOPS
+endif
+
 #
 # Since SUBDIRS means something to kbuild, define them safely.  Do not
 # include trailing slashes.
diff --git a/fs/ocfs2/mmap.c b/fs/ocfs2/mmap.c
index 9875615..a827b0b 100644
--- a/fs/ocfs2/mmap.c
+++ b/fs/ocfs2/mmap.c
@@ -60,6 +60,7 @@ static inline int ocfs2_vm_op_unblock_sigs(sigset_t *oldset)
 	return sigprocmask(SIG_SETMASK, oldset, NULL);
 }
 
+#ifndef NO_FAULT_IN_VMOPS
 static int ocfs2_fault(struct vm_area_struct *area, struct vm_fault *vmf)
 {
 	sigset_t blocked, oldset;
@@ -83,6 +84,35 @@ out:
 	mlog_exit_ptr(vmf->page);
 	return ret;
 }
+#else
+static struct page *ocfs2_nopage(struct vm_area_struct * area,
+				 unsigned long address,
+				 int *type)
+{
+	struct page *page = NOPAGE_SIGBUS;
+	sigset_t blocked, oldset;
+	int error, ret;
+
+	mlog_entry("(area=%p, address=%lu, type=%p)\n", area, address,
+		   type);
+
+	error = ocfs2_vm_op_block_sigs(&blocked, &oldset);
+	if (error < 0) {
+		mlog_errno(error);
+		ret = VM_FAULT_SIGBUS;
+		goto out;
+	}
+
+	page = filemap_nopage(area, address, type);
+
+	error = ocfs2_vm_op_unblock_sigs(&oldset);
+	if (error < 0)
+		mlog_errno(error);
+out:
+	mlog_exit_ptr(page);
+	return page;
+}
+#endif
 
 static int __ocfs2_page_mkwrite(struct inode *inode, struct buffer_head *di_bh,
 				struct page *page)
@@ -96,6 +126,9 @@ static int __ocfs2_page_mkwrite(struct inode *inode, struct buffer_head *di_bh,
 	void *fsdata;
 	loff_t size = i_size_read(inode);
 
+	mlog_entry("(inode=0x%p, i_ino=%lu, page=0x%p)\n", inode, inode->i_ino,
+		   page);
+
 	/*
 	 * Another node might have truncated while we were waiting on
 	 * cluster locks.
@@ -147,6 +180,7 @@ static int __ocfs2_page_mkwrite(struct inode *inode, struct buffer_head *di_bh,
 	BUG_ON(ret != len);
 	ret = 0;
 out:
+	mlog_exit(ret);
 	return ret;
 }
 
@@ -157,6 +191,8 @@ static int ocfs2_page_mkwrite(struct vm_area_struct *vma, struct page *page)
 	sigset_t blocked, oldset;
 	int ret, ret2;
 
+	mlog_entry("(vma=0x%p, page=0x%p)\n", vma, page);
+
 	ret = ocfs2_vm_op_block_sigs(&blocked, &oldset);
 	if (ret < 0) {
 		mlog_errno(ret);
@@ -202,11 +238,16 @@ out:
 	if (ret2 < 0)
 		mlog_errno(ret2);
 
+	mlog_exit(ret);
 	return ret;
 }
 
 static struct vm_operations_struct ocfs2_file_vm_ops = {
+#ifndef NO_FAULT_IN_VMOPS
 	.fault		= ocfs2_fault,
+#else
+	.nopage		= ocfs2_nopage,
+#endif
 	.page_mkwrite	= ocfs2_page_mkwrite,
 };
 
@@ -214,16 +255,22 @@ int ocfs2_mmap(struct file *file, struct vm_area_struct *vma)
 {
 	int ret = 0, lock_level = 0;
 
-	ret = ocfs2_meta_lock_atime(file->f_dentry->d_inode,
+	mlog_entry("(file=0x%p, vma=%p, '%.*s')\n", file, vma,
+		   file->f_path.dentry->d_name.len,
+		   file->f_path.dentry->d_name.name);
+
+	ret = ocfs2_meta_lock_atime(file->f_path.dentry->d_inode,
 				    file->f_vfsmnt, &lock_level);
 	if (ret < 0) {
 		mlog_errno(ret);
 		goto out;
 	}
-	ocfs2_meta_unlock(file->f_dentry->d_inode, lock_level);
+	ocfs2_meta_unlock(file->f_path.dentry->d_inode, lock_level);
 out:
 	vma->vm_ops = &ocfs2_file_vm_ops;
+#ifndef NO_FAULT_IN_VMOPS
 	vma->vm_flags |= VM_CAN_NONLINEAR;
-	return 0;
+#endif
+	mlog_exit(ret);
+	return ret;
 }
-
-- 
1.5.2.5

^ permalink raw reply related	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 17/30] ocfs2: Handle su_mutex in struct configfs_subsystem
  2008-01-03 11:22 [Ocfs2-devel] OCFS2 1.4 Repository Base (3rd attempt) Sunil Mushran
                   ` (11 preceding siblings ...)
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 07/30] ocfs2: Handle missing vmops->fault() Sunil Mushran
@ 2008-01-03 11:21 ` Sunil Mushran
  2008-01-08 15:45   ` Mark Fasheh
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 20/30] ocfs2: Handle missing iop->fallocate() Sunil Mushran
                   ` (14 subsequent siblings)
  27 siblings, 1 reply; 61+ messages in thread
From: Sunil Mushran @ 2008-01-03 11:21 UTC (permalink / raw)
  To: ocfs2-devel

Commit e6bd07aee739566803425acdbf5cdb29919164e1 in mainline changed a
semaphore into a mutex in struct configfs_subsystem. This patch allows
building ocfs2 with kernels having/not having this change.

Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
---
 Config.make.in                 |    1 +
 Makefile                       |    3 ++-
 configure.in                   |    6 ++++++
 fs/ocfs2/cluster/Makefile      |    4 ++++
 fs/ocfs2/cluster/nodemanager.c |    2 +-
 kapi-compat/include/su_mutex.h |   13 +++++++++++++
 6 files changed, 27 insertions(+), 2 deletions(-)
 create mode 100644 kapi-compat/include/su_mutex.h

diff --git a/Config.make.in b/Config.make.in
index 2b2a041..b12623a 100644
--- a/Config.make.in
+++ b/Config.make.in
@@ -64,6 +64,7 @@ NO_FAULT_IN_VMOPS = @NO_FAULT_IN_VMOPS@
 NO_F_PATH_IN_STRUCT_FILE = @NO_F_PATH_IN_STRUCT_FILE@
 KMEM_CACHE_CREATE_DTOR = @KMEM_CACHE_CREATE_DTOR@
 REGISTER_SYSCTL_TWO_ARGS = @REGISTER_SYSCTL_TWO_ARGS@
+NO_SU_MUTEX_IN_STRUCT_CONFIGFS_SUBSYSTEM = @NO_SU_MUTEX_IN_STRUCT_CONFIGFS_SUBSYSTEM@
 
 OCFS_DEBUG = @OCFS_DEBUG@
 
diff --git a/Makefile b/Makefile
index 4256eb7..1ecedd2 100644
--- a/Makefile
+++ b/Makefile
@@ -21,7 +21,8 @@ KAPI_COMPAT_FILES = \
 	kapi-compat/include/fs_rename_does_d_move.h \
 	kapi-compat/include/sysctl.h \
 	kapi-compat/include/configfs.h \
-	kapi-compat/include/register_sysctl.h
+	kapi-compat/include/register_sysctl.h \
+	kapi-compat/include/su_mutex.h
 
 PATCH_FILES =
 
diff --git a/configure.in b/configure.in
index f4d0185..034f104 100644
--- a/configure.in
+++ b/configure.in
@@ -231,6 +231,12 @@ OCFS2_CHECK_KERNEL([register_sysctl() with two args in sysctl.h], sysctl.h,
 AC_SUBST(REGISTER_SYSCTL_TWO_ARGS)
 KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS register_sysctl.h"
 
+NO_SU_MUTEX_IN_STRUCT_CONFIGFS_SUBSYSTEM=
+OCFS2_CHECK_KERNEL([su_mutex in struct configfs_subsystem in configfs.h], configfs.h,
+  , NO_SU_MUTEX_IN_STRUCT_CONFIGFS_SUBSYSTEM=yes, [su_mutex])
+AC_SUBST(NO_SU_MUTEX_IN_STRUCT_CONFIGFS_SUBSYSTEM)
+KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS su_mutex.h"
+
 # using -include has two advantages:
 #  the source doesn't need to know to include compat headers
 #  the compat header file names don't go through the search path
diff --git a/fs/ocfs2/cluster/Makefile b/fs/ocfs2/cluster/Makefile
index 68b434b..671104a 100644
--- a/fs/ocfs2/cluster/Makefile
+++ b/fs/ocfs2/cluster/Makefile
@@ -21,6 +21,10 @@ ifdef REGISTER_SYSCTL_TWO_ARGS
 EXTRA_CFLAGS += -DREGISTER_SYSCTL_TWO_ARGS
 endif
 
+ifdef NO_SU_MUTEX_IN_STRUCT_CONFIGFS_SUBSYSTEM
+EXTRA_CFLAGS += -DNO_SU_MUTEX_IN_STRUCT_CONFIGFS_SUBSYSTEM
+endif
+
 SOURCES =			\
 	heartbeat.c		\
 	masklog.c		\
diff --git a/fs/ocfs2/cluster/nodemanager.c b/fs/ocfs2/cluster/nodemanager.c
index 9fff881..cb06ef4 100644
--- a/fs/ocfs2/cluster/nodemanager.c
+++ b/fs/ocfs2/cluster/nodemanager.c
@@ -974,7 +974,7 @@ static int __init init_o2nm(void)
 		goto out_sysctl;
 
 	config_group_init(&o2nm_cluster_group.cs_subsys.su_group);
-	mutex_init(&o2nm_cluster_group.cs_subsys.su_mutex);
+	init_su_mutex(&o2nm_cluster_group.cs_subsys.su_mutex);
 	ret = configfs_register_subsystem(&o2nm_cluster_group.cs_subsys);
 	if (ret) {
 		printk(KERN_ERR "nodemanager: Registration returned %d\n", ret);
diff --git a/kapi-compat/include/su_mutex.h b/kapi-compat/include/su_mutex.h
new file mode 100644
index 0000000..12ebc2d
--- /dev/null
+++ b/kapi-compat/include/su_mutex.h
@@ -0,0 +1,13 @@
+#ifndef KAPI_SUMUTEX_H
+#define KAPI_SUMUTEX_H
+
+#ifdef NO_SU_MUTEX_IN_STRUCT_CONFIGFS_SUBSYSTEM
+# include "asm/semaphore.h"
+# define init_su_mutex		init_MUTEX
+# define su_mutex		su_sem
+#else
+# define init_su_mutex		mutex_init
+# define su_mutex		su_mutex
+#endif
+
+#endif
-- 
1.5.2.5

^ permalink raw reply related	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 08/30] ocfs2: Handle struct f_path in struct file
  2008-01-03 11:22 [Ocfs2-devel] OCFS2 1.4 Repository Base (3rd attempt) Sunil Mushran
                   ` (13 preceding siblings ...)
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 20/30] ocfs2: Handle missing iop->fallocate() Sunil Mushran
@ 2008-01-03 11:21 ` Sunil Mushran
  2008-01-08 13:22   ` Mark Fasheh
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 09/30] ocfs2: Define enum umh_wait Sunil Mushran
                   ` (12 subsequent siblings)
  27 siblings, 1 reply; 61+ messages in thread
From: Sunil Mushran @ 2008-01-03 11:21 UTC (permalink / raw)
  To: ocfs2-devel

Commit 0f7fc9e4d03987fe29f6dd4aa67e4c56eb7ecb05 in mainline added
struct path in struct file. This patch allows one to build ocfs2 with
kernels having/not having that change.

Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
---
 Config.make.in              |    1 +
 Makefile                    |    3 ++-
 configure.in                |    6 ++++++
 fs/ocfs2/Makefile           |    4 ++++
 fs/ocfs2/aops.c             |    4 ++--
 fs/ocfs2/dir.c              |    2 +-
 fs/ocfs2/dlm/Makefile       |    4 ++++
 fs/ocfs2/dlm/dlmfs.c        |    4 ++--
 fs/ocfs2/file.c             |   38 +++++++++++++++++++-------------------
 fs/ocfs2/ioctl.c            |    2 +-
 fs/ocfs2/mmap.c             |   10 +++++-----
 kapi-compat/include/fpath.h |   10 ++++++++++
 12 files changed, 57 insertions(+), 31 deletions(-)
 create mode 100644 kapi-compat/include/fpath.h

diff --git a/Config.make.in b/Config.make.in
index 4208ece..34db742 100644
--- a/Config.make.in
+++ b/Config.make.in
@@ -61,6 +61,7 @@ NO_DELAYED_WORK = @NO_DELAYED_WORK@
 
 NO_SYNC_MAPPING_RANGE  = @NO_SYNC_MAPPING_RANGE@
 NO_FAULT_IN_VMOPS = @NO_FAULT_IN_VMOPS@
+NO_F_PATH_IN_STRUCT_FILE = @NO_F_PATH_IN_STRUCT_FILE@
 
 OCFS_DEBUG = @OCFS_DEBUG@
 
diff --git a/Makefile b/Makefile
index 3ddb1aa..c1ebc15 100644
--- a/Makefile
+++ b/Makefile
@@ -12,7 +12,8 @@ KAPI_COMPAT_FILES = \
 	kapi-compat/include/workqueue.h \
 	kapi-compat/include/compiler.h \
 	kapi-compat/include/highmem.h \
-	kapi-compat/include/sync_mapping_range.h
+	kapi-compat/include/sync_mapping_range.h \
+	kapi-compat/include/fpath.h
 
 PATCH_FILES =
 
diff --git a/configure.in b/configure.in
index 1aced84..62588ac 100644
--- a/configure.in
+++ b/configure.in
@@ -183,6 +183,12 @@ OCFS2_CHECK_KERNEL([fault() in struct vm_operations_struct in mm.h], mm.h,
   , NO_FAULT_IN_VMOPS=yes, [^.*int (\*fault)])
 AC_SUBST(NO_FAULT_IN_VMOPS)
 
+NO_F_PATH_IN_STRUCT_FILE=
+OCFS2_CHECK_KERNEL([f_path in fs.h], fs.h,
+  , NO_F_PATH_IN_STRUCT_FILE=yes, [f_path])
+AC_SUBST(NO_F_PATH_IN_STRUCT_FILE)
+KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS fpath.h"
+
 # using -include has two advantages:
 #  the source doesn't need to know to include compat headers
 #  the compat header file names don't go through the search path
diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
index cbf3118..34dfbc2 100644
--- a/fs/ocfs2/Makefile
+++ b/fs/ocfs2/Makefile
@@ -37,6 +37,10 @@ ifdef NO_FAULT_IN_VMOPS
 EXTRA_CFLAGS += -DNO_FAULT_IN_VMOPS
 endif
 
+ifdef NO_F_PATH_IN_STRUCT_FILE
+EXTRA_CFLAGS += -DNO_F_PATH_IN_STRUCT_FILE
+endif
+
 #
 # Since SUBDIRS means something to kbuild, define them safely.  Do not
 # include trailing slashes.
diff --git a/fs/ocfs2/aops.c b/fs/ocfs2/aops.c
index 34d1045..93c01b7 100644
--- a/fs/ocfs2/aops.c
+++ b/fs/ocfs2/aops.c
@@ -584,7 +584,7 @@ static void ocfs2_dio_end_io(struct kiocb *iocb,
 			     ssize_t bytes,
 			     void *private)
 {
-	struct inode *inode = iocb->ki_filp->f_path.dentry->d_inode;
+	struct inode *inode = filp_dentry(iocb->ki_filp)->d_inode;
 	int level;
 
 	/* this io's submitter should not have unlocked this before we could */
@@ -626,7 +626,7 @@ static ssize_t ocfs2_direct_IO(int rw,
 			       unsigned long nr_segs)
 {
 	struct file *file = iocb->ki_filp;
-	struct inode *inode = file->f_path.dentry->d_inode->i_mapping->host;
+	struct inode *inode = filp_dentry(file)->d_inode->i_mapping->host;
 	int ret;
 
 	mlog_entry_void();
diff --git a/fs/ocfs2/dir.c b/fs/ocfs2/dir.c
index 7453b70..892001d 100644
--- a/fs/ocfs2/dir.c
+++ b/fs/ocfs2/dir.c
@@ -840,7 +840,7 @@ int ocfs2_dir_foreach(struct inode *inode, loff_t *f_pos, void *priv,
 int ocfs2_readdir(struct file * filp, void * dirent, filldir_t filldir)
 {
 	int error = 0;
-	struct inode *inode = filp->f_path.dentry->d_inode;
+	struct inode *inode = filp_dentry(filp)->d_inode;
 	int lock_level = 0;
 
 	mlog_entry("dirino=%llu\n",
diff --git a/fs/ocfs2/dlm/Makefile b/fs/ocfs2/dlm/Makefile
index aeae5fd..7e7abda 100644
--- a/fs/ocfs2/dlm/Makefile
+++ b/fs/ocfs2/dlm/Makefile
@@ -20,6 +20,10 @@ ifdef NO_DELAYED_WORK
 EXTRA_CFLAGS += -DNO_DELAYED_WORK
 endif
 
+ifdef NO_F_PATH_IN_STRUCT_FILE
+EXTRA_CFLAGS += -DNO_F_PATH_IN_STRUCT_FILE
+endif
+
 DLM_SOURCES =			\
 	dlmast.c		\
 	dlmconvert.c		\
diff --git a/fs/ocfs2/dlm/dlmfs.c b/fs/ocfs2/dlm/dlmfs.c
index 7418dc8..0284cdb 100644
--- a/fs/ocfs2/dlm/dlmfs.c
+++ b/fs/ocfs2/dlm/dlmfs.c
@@ -175,7 +175,7 @@ static ssize_t dlmfs_file_read(struct file *filp,
 	int bytes_left;
 	ssize_t readlen;
 	char *lvb_buf;
-	struct inode *inode = filp->f_path.dentry->d_inode;
+	struct inode *inode = filp_dentry(filp)->d_inode;
 
 	mlog(0, "inode %lu, count = %zu, *ppos = %llu\n",
 		inode->i_ino, count, *ppos);
@@ -219,7 +219,7 @@ static ssize_t dlmfs_file_write(struct file *filp,
 	int bytes_left;
 	ssize_t writelen;
 	char *lvb_buf;
-	struct inode *inode = filp->f_path.dentry->d_inode;
+	struct inode *inode = filp_dentry(filp)->d_inode;
 
 	mlog(0, "inode %lu, count = %zu, *ppos = %llu\n",
 		inode->i_ino, count, *ppos);
diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
index a62b14e..1ccf8ea 100644
--- a/fs/ocfs2/file.c
+++ b/fs/ocfs2/file.c
@@ -70,7 +70,7 @@ static int ocfs2_file_open(struct inode *inode, struct file *file)
 	struct ocfs2_inode_info *oi = OCFS2_I(inode);
 
 	mlog_entry("(0x%p, 0x%p, '%.*s')\n", inode, file,
-		   file->f_path.dentry->d_name.len, file->f_path.dentry->d_name.name);
+		   filp_dentry(file)->d_name.len, filp_dentry(file)->d_name.name);
 
 	spin_lock(&oi->ip_lock);
 
@@ -100,8 +100,8 @@ static int ocfs2_file_release(struct inode *inode, struct file *file)
 	struct ocfs2_inode_info *oi = OCFS2_I(inode);
 
 	mlog_entry("(0x%p, 0x%p, '%.*s')\n", inode, file,
-		       file->f_path.dentry->d_name.len,
-		       file->f_path.dentry->d_name.name);
+		   filp_dentry(file)->d_name.len,
+		   filp_dentry(file)->d_name.name);
 
 	spin_lock(&oi->ip_lock);
 	if (!--oi->ip_open_count)
@@ -1663,7 +1663,7 @@ static int __ocfs2_change_file_space(struct file *file, struct inode *inode,
 		}
 	}
 
-	if (file && should_remove_suid(file->f_path.dentry)) {
+	if (file && should_remove_suid(filp_dentry(file))) {
 		ret = __ocfs2_write_remove_suid(inode, di_bh);
 		if (ret) {
 			mlog_errno(ret);
@@ -1730,7 +1730,7 @@ out:
 int ocfs2_change_file_space(struct file *file, unsigned int cmd,
 			    struct ocfs2_space_resv *sr)
 {
-	struct inode *inode = file->f_path.dentry->d_inode;
+	struct inode *inode = filp_dentry(file)->d_inode;
 	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);;
 
 	if ((cmd == OCFS2_IOC_RESVSP || cmd == OCFS2_IOC_RESVSP64) &&
@@ -2023,12 +2023,12 @@ static ssize_t ocfs2_file_aio_write(struct kiocb *iocb,
 	size_t count;		/* after file limit checks */
 	loff_t *ppos = &iocb->ki_pos;
 	struct file *file = iocb->ki_filp;
-	struct inode *inode = file->f_path.dentry->d_inode;
+	struct inode *inode = filp_dentry(file)->d_inode;
 
 	mlog_entry("(0x%p, %u, '%.*s')\n", file,
 		   (unsigned int)nr_segs,
-		   file->f_path.dentry->d_name.len,
-		   file->f_path.dentry->d_name.name);
+		   filp_dentry(file)->d_name.len,
+		   filp_dentry(file)->d_name.name);
 
 	if (iocb->ki_left == 0)
 		return 0;
@@ -2062,7 +2062,7 @@ relock:
 	}
 
 	can_do_direct = direct_io;
-	ret = ocfs2_prepare_inode_for_write(file->f_path.dentry, ppos,
+	ret = ocfs2_prepare_inode_for_write(filp_dentry(file), ppos,
 					    iocb->ki_left, appending,
 					    &can_do_direct);
 	if (ret < 0) {
@@ -2251,12 +2251,12 @@ static ssize_t ocfs2_file_splice_write(struct pipe_inode_info *pipe,
 				       unsigned int flags)
 {
 	int ret;
-	struct inode *inode = out->f_path.dentry->d_inode;
+	struct inode *inode = filp_dentry(out)->d_inode;
 
 	mlog_entry("(0x%p, 0x%p, %u, '%.*s')\n", out, pipe,
 		   (unsigned int)len,
-		   out->f_path.dentry->d_name.len,
-		   out->f_path.dentry->d_name.name);
+		   filp_dentry(out)->d_name.len,
+		   filp_dentry(out)->d_name.name);
 
 	inode_double_lock(inode, pipe->inode);
 
@@ -2266,7 +2266,7 @@ static ssize_t ocfs2_file_splice_write(struct pipe_inode_info *pipe,
 		goto out;
 	}
 
-	ret = ocfs2_prepare_inode_for_write(out->f_path.dentry, ppos, len, 0,
+	ret = ocfs2_prepare_inode_for_write(filp_dentry(out), ppos, len, 0,
 					    NULL);
 	if (ret < 0) {
 		mlog_errno(ret);
@@ -2292,12 +2292,12 @@ static ssize_t ocfs2_file_splice_read(struct file *in,
 				      unsigned int flags)
 {
 	int ret = 0;
-	struct inode *inode = in->f_path.dentry->d_inode;
+	struct inode *inode = filp_dentry(in)->d_inode;
 
 	mlog_entry("(0x%p, 0x%p, %u, '%.*s')\n", in, pipe,
 		   (unsigned int)len,
-		   in->f_path.dentry->d_name.len,
-		   in->f_path.dentry->d_name.name);
+		   filp_dentry(in)->d_name.len,
+		   filp_dentry(in)->d_name.name);
 
 	/*
 	 * See the comment in ocfs2_file_aio_read()
@@ -2323,12 +2323,12 @@ static ssize_t ocfs2_file_aio_read(struct kiocb *iocb,
 {
 	int ret = 0, rw_level = -1, have_alloc_sem = 0, lock_level = 0;
 	struct file *filp = iocb->ki_filp;
-	struct inode *inode = filp->f_path.dentry->d_inode;
+	struct inode *inode = filp_dentry(filp)->d_inode;
 
 	mlog_entry("(0x%p, %u, '%.*s')\n", filp,
 		   (unsigned int)nr_segs,
-		   filp->f_path.dentry->d_name.len,
-		   filp->f_path.dentry->d_name.name);
+		   filp_dentry(filp)->d_name.len,
+		   filp_dentry(filp)->d_name.name);
 
 	if (!inode) {
 		ret = -EINVAL;
diff --git a/fs/ocfs2/ioctl.c b/fs/ocfs2/ioctl.c
index 87dcece..135dd2f 100644
--- a/fs/ocfs2/ioctl.c
+++ b/fs/ocfs2/ioctl.c
@@ -148,7 +148,7 @@ int ocfs2_ioctl(struct inode * inode, struct file * filp,
 #ifdef CONFIG_COMPAT
 long ocfs2_compat_ioctl(struct file *file, unsigned cmd, unsigned long arg)
 {
-	struct inode *inode = file->f_path.dentry->d_inode;
+	struct inode *inode = filp_dentry(file)->d_inode;
 	int ret;
 
 	switch (cmd) {
diff --git a/fs/ocfs2/mmap.c b/fs/ocfs2/mmap.c
index a827b0b..3a09454 100644
--- a/fs/ocfs2/mmap.c
+++ b/fs/ocfs2/mmap.c
@@ -186,7 +186,7 @@ out:
 
 static int ocfs2_page_mkwrite(struct vm_area_struct *vma, struct page *page)
 {
-	struct inode *inode = vma->vm_file->f_path.dentry->d_inode;
+	struct inode *inode = filp_dentry(vma->vm_file)->d_inode;
 	struct buffer_head *di_bh = NULL;
 	sigset_t blocked, oldset;
 	int ret, ret2;
@@ -256,16 +256,16 @@ int ocfs2_mmap(struct file *file, struct vm_area_struct *vma)
 	int ret = 0, lock_level = 0;
 
 	mlog_entry("(file=0x%p, vma=%p, '%.*s')\n", file, vma,
-		   file->f_path.dentry->d_name.len,
-		   file->f_path.dentry->d_name.name);
+		   filp_dentry(file)->d_name.len,
+		   filp_dentry(file)->d_name.name);
 
-	ret = ocfs2_meta_lock_atime(file->f_path.dentry->d_inode,
+	ret = ocfs2_meta_lock_atime(filp_dentry(file)->d_inode,
 				    file->f_vfsmnt, &lock_level);
 	if (ret < 0) {
 		mlog_errno(ret);
 		goto out;
 	}
-	ocfs2_meta_unlock(file->f_path.dentry->d_inode, lock_level);
+	ocfs2_meta_unlock(filp_dentry(file)->d_inode, lock_level);
 out:
 	vma->vm_ops = &ocfs2_file_vm_ops;
 #ifndef NO_FAULT_IN_VMOPS
diff --git a/kapi-compat/include/fpath.h b/kapi-compat/include/fpath.h
new file mode 100644
index 0000000..a2f89e2
--- /dev/null
+++ b/kapi-compat/include/fpath.h
@@ -0,0 +1,10 @@
+#ifndef KAPI_FPATH_H
+#define KAPI_FPATH_H
+
+#ifdef NO_F_PATH_IN_STRUCT_FILE
+# define filp_dentry(i) (i)->f_dentry
+#else
+# define filp_dentry(i) (i)->f_path.dentry
+#endif
+
+#endif
-- 
1.5.2.5

^ permalink raw reply related	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 20/30] ocfs2: Handle missing iop->fallocate()
  2008-01-03 11:22 [Ocfs2-devel] OCFS2 1.4 Repository Base (3rd attempt) Sunil Mushran
                   ` (12 preceding siblings ...)
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 17/30] ocfs2: Handle su_mutex in struct configfs_subsystem Sunil Mushran
@ 2008-01-03 11:21 ` Sunil Mushran
  2008-01-08 15:57   ` Mark Fasheh
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 08/30] ocfs2: Handle struct f_path in struct file Sunil Mushran
                   ` (13 subsequent siblings)
  27 siblings, 1 reply; 61+ messages in thread
From: Sunil Mushran @ 2008-01-03 11:21 UTC (permalink / raw)
  To: ocfs2-devel

Commit 97ac73506c0ba93f30239bb57b4cfc5d73e68a62 in mainline introduces a
new iop, fallocate(). This patch allows one to build ocfs2 with kernels
having/not having this change.

Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
---
 Config.make.in    |    1 +
 configure.in      |    5 +++++
 fs/ocfs2/Makefile |    4 ++++
 fs/ocfs2/file.c   |    6 ++++++
 4 files changed, 16 insertions(+), 0 deletions(-)

diff --git a/Config.make.in b/Config.make.in
index 34c4825..7d0ca7d 100644
--- a/Config.make.in
+++ b/Config.make.in
@@ -66,6 +66,7 @@ KMEM_CACHE_CREATE_DTOR = @KMEM_CACHE_CREATE_DTOR@
 REGISTER_SYSCTL_TWO_ARGS = @REGISTER_SYSCTL_TWO_ARGS@
 NO_SU_MUTEX_IN_STRUCT_CONFIGFS_SUBSYSTEM = @NO_SU_MUTEX_IN_STRUCT_CONFIGFS_SUBSYSTEM@
 STRUCT_SUBSYSTEM_DEFINED = @STRUCT_SUBSYSTEM_DEFINED@
+NO_FALLOCATE = @NO_FALLOCATE@
 
 OCFS_DEBUG = @OCFS_DEBUG@
 
diff --git a/configure.in b/configure.in
index 4e47421..d258f97 100644
--- a/configure.in
+++ b/configure.in
@@ -248,6 +248,11 @@ OCFS2_CHECK_KERNEL([is_owner_or_cap() in fs.h], fs.h,
   , cap_compat_header="cap.h", [^#define is_owner_or_cap])
 KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $cap_compat_header"
 
+NO_FALLOCATE=
+OCFS2_CHECK_KERNEL([fallocate() in fs.h], fs.h,
+  , NO_FALLOCATE=yes, [^.*long (\*fallocate)])
+AC_SUBST(NO_FALLOCATE)
+
 # using -include has two advantages:
 #  the source doesn't need to know to include compat headers
 #  the compat header file names don't go through the search path
diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
index 2511fba..3b13b0c 100644
--- a/fs/ocfs2/Makefile
+++ b/fs/ocfs2/Makefile
@@ -49,6 +49,10 @@ ifdef STRUCT_SUBSYSTEM_DEFINED
 EXTRA_CFLAGS += -DSTRUCT_SUBSYSTEM_DEFINED
 endif
 
+ifdef NO_FALLOCATE
+EXTRA_CFLAGS += -DNO_FALLOCATE
+endif
+
 #
 # Since SUBDIRS means something to kbuild, define them safely.  Do not
 # include trailing slashes.
diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
index 1ccf8ea..45b1c05 100644
--- a/fs/ocfs2/file.c
+++ b/fs/ocfs2/file.c
@@ -34,7 +34,9 @@
 #include <linux/splice.h>
 #include <linux/mount.h>
 #include <linux/writeback.h>
+#ifndef NO_FALLOCATE
 #include <linux/falloc.h>
+#endif
 
 #define MLOG_MASK_PREFIX ML_INODE
 #include <cluster/masklog.h>
@@ -1749,6 +1751,7 @@ int ocfs2_change_file_space(struct file *file, unsigned int cmd,
 	return __ocfs2_change_file_space(file, inode, file->f_pos, cmd, sr, 0);
 }
 
+#ifndef NO_FALLOCATE
 static long ocfs2_fallocate(struct inode *inode, int mode, loff_t offset,
 			    loff_t len)
 {
@@ -1772,6 +1775,7 @@ static long ocfs2_fallocate(struct inode *inode, int mode, loff_t offset,
 	return __ocfs2_change_file_space(NULL, inode, offset,
 					 OCFS2_IOC_RESVSP64, &sr, change_size);
 }
+#endif
 
 static int ocfs2_prepare_inode_for_write(struct dentry *dentry,
 					 loff_t *ppos,
@@ -2397,7 +2401,9 @@ const struct inode_operations ocfs2_file_iops = {
 	.setattr	= ocfs2_setattr,
 	.getattr	= ocfs2_getattr,
 	.permission	= ocfs2_permission,
+#ifndef NO_FALLOCATE
 	.fallocate	= ocfs2_fallocate,
+#endif
 };
 
 const struct inode_operations ocfs2_special_file_iops = {
-- 
1.5.2.5

^ permalink raw reply related	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 09/30] ocfs2: Define enum umh_wait
  2008-01-03 11:22 [Ocfs2-devel] OCFS2 1.4 Repository Base (3rd attempt) Sunil Mushran
                   ` (14 preceding siblings ...)
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 08/30] ocfs2: Handle struct f_path in struct file Sunil Mushran
@ 2008-01-03 11:22 ` Sunil Mushran
  2008-01-08 13:25   ` Mark Fasheh
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 10/30] ocfs2: Add helper inc_nlink Sunil Mushran
                   ` (11 subsequent siblings)
  27 siblings, 1 reply; 61+ messages in thread
From: Sunil Mushran @ 2008-01-03 11:22 UTC (permalink / raw)
  To: ocfs2-devel

Commit 86313c488a6848b7ec2ba04e74f25f79dd32a0b7 in mainline introduced
enum umh_wait. This patch allows one to build ocfs2 with kernels having/
not having that change.

Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
---
 Makefile                       |    3 ++-
 configure.in                   |    5 +++++
 kapi-compat/include/umh_wait.h |   10 ++++++++++
 3 files changed, 17 insertions(+), 1 deletions(-)
 create mode 100644 kapi-compat/include/umh_wait.h

diff --git a/Makefile b/Makefile
index c1ebc15..b937c2b 100644
--- a/Makefile
+++ b/Makefile
@@ -13,7 +13,8 @@ KAPI_COMPAT_FILES = \
 	kapi-compat/include/compiler.h \
 	kapi-compat/include/highmem.h \
 	kapi-compat/include/sync_mapping_range.h \
-	kapi-compat/include/fpath.h
+	kapi-compat/include/fpath.h \
+	kapi-compat/include/umh_wait.h
 
 PATCH_FILES =
 
diff --git a/configure.in b/configure.in
index 62588ac..93f1558 100644
--- a/configure.in
+++ b/configure.in
@@ -189,6 +189,11 @@ OCFS2_CHECK_KERNEL([f_path in fs.h], fs.h,
 AC_SUBST(NO_F_PATH_IN_STRUCT_FILE)
 KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS fpath.h"
 
+kmod_compat_header=""
+OCFS2_CHECK_KERNEL([enum umh_wait in kmod.h], kmod.h,
+  , kmod_compat_header="umh_wait.h", [umh_wait])
+KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $kmod_compat_header"
+
 # using -include has two advantages:
 #  the source doesn't need to know to include compat headers
 #  the compat header file names don't go through the search path
diff --git a/kapi-compat/include/umh_wait.h b/kapi-compat/include/umh_wait.h
new file mode 100644
index 0000000..42a082b
--- /dev/null
+++ b/kapi-compat/include/umh_wait.h
@@ -0,0 +1,10 @@
+#ifndef KAPI_KMOD_H
+#define KAPI_KMOD_H
+
+enum umh_wait {
+	UMH_NO_WAIT = -1,	/* don't wait at all */
+	UMH_WAIT_EXEC = 0,	/* wait for the exec, but not the process */
+	UMH_WAIT_PROC = 1,	/* wait for the process to complete */
+};
+
+#endif
-- 
1.5.2.5

^ permalink raw reply related	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 10/30] ocfs2: Add helper inc_nlink
  2008-01-03 11:22 [Ocfs2-devel] OCFS2 1.4 Repository Base (3rd attempt) Sunil Mushran
                   ` (15 preceding siblings ...)
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 09/30] ocfs2: Define enum umh_wait Sunil Mushran
@ 2008-01-03 11:22 ` Sunil Mushran
  2008-01-08 13:24   ` Mark Fasheh
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 06/30] ocfs2: Include do_sync_mapping_range() from mainline Sunil Mushran
                   ` (10 subsequent siblings)
  27 siblings, 1 reply; 61+ messages in thread
From: Sunil Mushran @ 2008-01-03 11:22 UTC (permalink / raw)
  To: ocfs2-devel

Commit d8c76e6f45c111c32a4b3e50a2adc9210737b0d8 in mainline introduced
helper inc_nlink(). This patch allows one to build ocfs2 with kernels
having/not having that change.

Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
---
 Makefile                        |    3 ++-
 configure.in                    |    5 +++++
 kapi-compat/include/inc_nlink.h |   19 +++++++++++++++++++
 3 files changed, 26 insertions(+), 1 deletions(-)
 create mode 100644 kapi-compat/include/inc_nlink.h

diff --git a/Makefile b/Makefile
index b937c2b..2995450 100644
--- a/Makefile
+++ b/Makefile
@@ -14,7 +14,8 @@ KAPI_COMPAT_FILES = \
 	kapi-compat/include/highmem.h \
 	kapi-compat/include/sync_mapping_range.h \
 	kapi-compat/include/fpath.h \
-	kapi-compat/include/umh_wait.h
+	kapi-compat/include/umh_wait.h \
+	kapi-compat/include/inc_nlink.h
 
 PATCH_FILES =
 
diff --git a/configure.in b/configure.in
index 93f1558..05d71ae 100644
--- a/configure.in
+++ b/configure.in
@@ -194,6 +194,11 @@ OCFS2_CHECK_KERNEL([enum umh_wait in kmod.h], kmod.h,
   , kmod_compat_header="umh_wait.h", [umh_wait])
 KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $kmod_compat_header"
 
+inc_nlink_compat_header=""
+OCFS2_CHECK_KERNEL([inc_nlink() in fs.h], fs.h,
+  , inc_nlink_compat_header="inc_nlink.h", [^static inline void inc_nlink(])
+KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $inc_nlink_compat_header"
+
 # using -include has two advantages:
 #  the source doesn't need to know to include compat headers
 #  the compat header file names don't go through the search path
diff --git a/kapi-compat/include/inc_nlink.h b/kapi-compat/include/inc_nlink.h
new file mode 100644
index 0000000..26ddaac
--- /dev/null
+++ b/kapi-compat/include/inc_nlink.h
@@ -0,0 +1,19 @@
+#ifndef KAPI_INC_NLINK_H
+#define KAPI_INC_NLINK_H
+
+#include <linux/fs.h>
+
+/*
+ * inc_nlink - directly increment an inode's link count
+ * @inode: inode
+ *
+ * This is a low-level filesystem helper to replace any
+ * direct filesystem manipulation of i_nlink.  Currently,
+ * it is only here for parity with dec_nlink().
+ */
+static inline void inc_nlink(struct inode *inode)
+{
+	inode->i_nlink++;
+}
+
+#endif
-- 
1.5.2.5

^ permalink raw reply related	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 06/30] ocfs2: Include do_sync_mapping_range() from mainline
  2008-01-03 11:22 [Ocfs2-devel] OCFS2 1.4 Repository Base (3rd attempt) Sunil Mushran
                   ` (16 preceding siblings ...)
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 10/30] ocfs2: Add helper inc_nlink Sunil Mushran
@ 2008-01-03 11:22 ` Sunil Mushran
  2008-01-08 13:20   ` Mark Fasheh
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 05/30] ocfs2: Handle macro zero_user_page() Sunil Mushran
                   ` (9 subsequent siblings)
  27 siblings, 1 reply; 61+ messages in thread
From: Sunil Mushran @ 2008-01-03 11:22 UTC (permalink / raw)
  To: ocfs2-devel

Commit 5b04aa3a64f854244bc40a6f528176ed50b5c4f6 introduced export symbol
do_sync_mapping_range(). This patch allows one to build ocfs2 with kernels
having/not having that change.

Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
---
 Config.make.in                           |    2 +
 Makefile                                 |    3 +-
 configure.in                             |    6 ++
 fs/ocfs2/Makefile                        |    4 +
 kapi-compat/include/sync_mapping_range.h |  103 ++++++++++++++++++++++++++++++
 5 files changed, 117 insertions(+), 1 deletions(-)
 create mode 100644 kapi-compat/include/sync_mapping_range.h

diff --git a/Config.make.in b/Config.make.in
index 1dc4d44..67ee363 100644
--- a/Config.make.in
+++ b/Config.make.in
@@ -59,6 +59,8 @@ EXTRA_CFLAGS += @KAPI_COMPAT_CFLAGS@
 
 NO_DELAYED_WORK = @NO_DELAYED_WORK@
 
+NO_SYNC_MAPPING_RANGE  = @NO_SYNC_MAPPING_RANGE@
+
 OCFS_DEBUG = @OCFS_DEBUG@
 
 ifneq ($(OCFS_DEBUG),)
diff --git a/Makefile b/Makefile
index b7b86db..3ddb1aa 100644
--- a/Makefile
+++ b/Makefile
@@ -11,7 +11,8 @@ LINUX_INCLUDE_FILES =
 KAPI_COMPAT_FILES = \
 	kapi-compat/include/workqueue.h \
 	kapi-compat/include/compiler.h \
-	kapi-compat/include/highmem.h
+	kapi-compat/include/highmem.h \
+	kapi-compat/include/sync_mapping_range.h
 
 PATCH_FILES =
 
diff --git a/configure.in b/configure.in
index 0108f99..72698ae 100644
--- a/configure.in
+++ b/configure.in
@@ -172,6 +172,12 @@ OCFS2_CHECK_KERNEL([zero_user_page() in highmem.h], highmem.h,
   , highmem_compat_header="highmem.h", [zero_user_page])
 KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $highmem_compat_header"
 
+NO_SYNC_MAPPING_RANGE=
+OCFS2_CHECK_KERNEL([do_sync_mapping_range() in fs.h], fs.h,
+  , NO_SYNC_MAPPING_RANGE=yes, [do_sync_mapping_range(])
+KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS sync_mapping_range.h"
+AC_SUBST(NO_SYNC_MAPPING_RANGE)
+
 # using -include has two advantages:
 #  the source doesn't need to know to include compat headers
 #  the compat header file names don't go through the search path
diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
index 8bc2dff..737c12a 100644
--- a/fs/ocfs2/Makefile
+++ b/fs/ocfs2/Makefile
@@ -29,6 +29,10 @@ ifdef NO_DELAYED_WORK
 EXTRA_CFLAGS += -DNO_DELAYED_WORK
 endif
 
+ifdef NO_SYNC_MAPPING_RANGE
+CFLAGS_alloc.o += -DNO_SYNC_MAPPING_RANGE
+endif
+
 #
 # Since SUBDIRS means something to kbuild, define them safely.  Do not
 # include trailing slashes.
diff --git a/kapi-compat/include/sync_mapping_range.h b/kapi-compat/include/sync_mapping_range.h
new file mode 100644
index 0000000..d6e1b30
--- /dev/null
+++ b/kapi-compat/include/sync_mapping_range.h
@@ -0,0 +1,103 @@
+#ifndef KAPI_SYNC_MAPPING_RANGE_H
+#define KAPI_SYNC_MAPPING_RANGE_H
+
+#ifdef NO_SYNC_MAPPING_RANGE
+
+#include <linux/fs.h>
+#include <linux/types.h>
+#include <linux/slab.h>
+#include <linux/highmem.h>
+#include <linux/swap.h>
+#include <linux/writeback.h>
+#include <linux/mpage.h>
+#include <linux/pagemap.h>
+
+
+int do_writepages(struct address_space *mapping, struct writeback_control *wbc)
+{
+	int ret;
+
+	if (wbc->nr_to_write <= 0)
+		return 0;
+	wbc->for_writepages = 1;
+	if (mapping->a_ops->writepages)
+		ret = mapping->a_ops->writepages(mapping, wbc);
+	else
+		ret = generic_writepages(mapping, wbc);
+	wbc->for_writepages = 0;
+	return ret;
+}
+
+/**
+ * __filemap_fdatawrite_range - start writeback on mapping dirty pages in range
+ * @mapping:	address space structure to write
+ * @start:	offset in bytes where the range starts
+ * @end:	offset in bytes where the range ends (inclusive)
+ * @sync_mode:	enable synchronous operation
+ *
+ * Start writeback against all of a mapping's dirty pages that lie
+ * within the byte offsets <start, end> inclusive.
+ *
+ * If sync_mode is WB_SYNC_ALL then this is a "data integrity" operation, as
+ * opposed to a regular memory cleansing writeback.  The difference between
+ * these two operations is that if a dirty page/buffer is encountered, it must
+ * be waited upon, and not just skipped over.
+ */
+int __filemap_fdatawrite_range(struct address_space *mapping, loff_t start,
+				loff_t end, int sync_mode)
+{
+	int ret;
+	struct writeback_control wbc = {
+		.sync_mode = sync_mode,
+		.nr_to_write = mapping->nrpages * 2,
+		.range_start = start,
+		.range_end = end,
+	};
+
+	if (!mapping_cap_writeback_dirty(mapping))
+		return 0;
+
+	ret = do_writepages(mapping, &wbc);
+	return ret;
+}
+
+/*
+ * `endbyte' is inclusive
+ */
+static int do_sync_mapping_range(struct address_space *mapping, loff_t offset,
+				 loff_t endbyte, unsigned int flags)
+{
+	int ret;
+
+	if (!mapping) {
+		ret = -EINVAL;
+		goto out;
+	}
+
+	ret = 0;
+	if (flags & SYNC_FILE_RANGE_WAIT_BEFORE) {
+		ret = wait_on_page_writeback_range(mapping,
+					offset >> PAGE_CACHE_SHIFT,
+					endbyte >> PAGE_CACHE_SHIFT);
+		if (ret < 0)
+			goto out;
+	}
+
+	if (flags & SYNC_FILE_RANGE_WRITE) {
+		ret = __filemap_fdatawrite_range(mapping, offset, endbyte,
+						WB_SYNC_NONE);
+		if (ret < 0)
+			goto out;
+	}
+
+	if (flags & SYNC_FILE_RANGE_WAIT_AFTER) {
+		ret = wait_on_page_writeback_range(mapping,
+					offset >> PAGE_CACHE_SHIFT,
+					endbyte >> PAGE_CACHE_SHIFT);
+	}
+out:
+	return ret;
+}
+#endif
+
+#endif
-- 
1.5.2.5

^ permalink raw reply related	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 05/30] ocfs2: Handle macro zero_user_page()
  2008-01-03 11:22 [Ocfs2-devel] OCFS2 1.4 Repository Base (3rd attempt) Sunil Mushran
                   ` (17 preceding siblings ...)
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 06/30] ocfs2: Include do_sync_mapping_range() from mainline Sunil Mushran
@ 2008-01-03 11:22 ` Sunil Mushran
  2008-01-08 13:18   ` Mark Fasheh
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 15/30] ocfs2: Handles configfs_depend_item() and configfs_undepend_item() Sunil Mushran
                   ` (8 subsequent siblings)
  27 siblings, 1 reply; 61+ messages in thread
From: Sunil Mushran @ 2008-01-03 11:22 UTC (permalink / raw)
  To: ocfs2-devel

Commit 01f2705daf5a36208e69d7cf95db9c330f843af6 in mainline introduced
macro zero_user_page(). This patch allows one to build ocfs2 with
kernels having/not having that change.

Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
---
 Makefile                      |    3 ++-
 configure.in                  |    5 +++++
 kapi-compat/include/highmem.h |   22 ++++++++++++++++++++++
 3 files changed, 29 insertions(+), 1 deletions(-)
 create mode 100644 kapi-compat/include/highmem.h

diff --git a/Makefile b/Makefile
index 21ff590..b7b86db 100644
--- a/Makefile
+++ b/Makefile
@@ -10,7 +10,8 @@ LINUX_INCLUDE_FILES =
 
 KAPI_COMPAT_FILES = \
 	kapi-compat/include/workqueue.h \
-	kapi-compat/include/compiler.h
+	kapi-compat/include/compiler.h \
+	kapi-compat/include/highmem.h
 
 PATCH_FILES =
 
diff --git a/configure.in b/configure.in
index 70c4041..0108f99 100644
--- a/configure.in
+++ b/configure.in
@@ -167,6 +167,11 @@ OCFS2_CHECK_KERNEL([uninitialized_var() in compiler-gcc4.h], compiler-gcc4.h,
   , compiler_compat_header="compiler.h", [uninitialized_var])
 KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $compiler_compat_header"
 
+highmem_compat_header=""
+OCFS2_CHECK_KERNEL([zero_user_page() in highmem.h], highmem.h,
+  , highmem_compat_header="highmem.h", [zero_user_page])
+KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $highmem_compat_header"
+
 # using -include has two advantages:
 #  the source doesn't need to know to include compat headers
 #  the compat header file names don't go through the search path
diff --git a/kapi-compat/include/highmem.h b/kapi-compat/include/highmem.h
new file mode 100644
index 0000000..a8c7e11
--- /dev/null
+++ b/kapi-compat/include/highmem.h
@@ -0,0 +1,22 @@
+#ifndef KAPI_HIGHMEM_H
+#define KAPI_HIGHMEM_H
+
+/*
+ * Same but also flushes aliased cache contents to RAM.
+ *
+ * This must be a macro because KM_USER0 and friends aren't defined if
+ * !CONFIG_HIGHMEM
+ */
+#define zero_user_page(page, offset, size, km_type)		\
+	do {							\
+		void *kaddr;					\
+								\
+		BUG_ON((offset) + (size) > PAGE_SIZE);		\
+								\
+		kaddr = kmap_atomic(page, km_type);		\
+		memset((char *)kaddr + (offset), 0, (size));	\
+		flush_dcache_page(page);			\
+		kunmap_atomic(kaddr, (km_type));		\
+	} while (0)
+
+#endif
-- 
1.5.2.5

^ permalink raw reply related	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 19/30] ocfs2: Handle missing macro is_owner_or_cap()
  2008-01-03 11:22 [Ocfs2-devel] OCFS2 1.4 Repository Base (3rd attempt) Sunil Mushran
                   ` (19 preceding siblings ...)
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 15/30] ocfs2: Handles configfs_depend_item() and configfs_undepend_item() Sunil Mushran
@ 2008-01-03 11:22 ` Sunil Mushran
  2008-01-08 15:57   ` Mark Fasheh
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 13/30] ocfs2: Define FS_RENAME_DOES_D_MOVE Sunil Mushran
                   ` (6 subsequent siblings)
  27 siblings, 1 reply; 61+ messages in thread
From: Sunil Mushran @ 2008-01-03 11:22 UTC (permalink / raw)
  To: ocfs2-devel

Commit 3bd858ab1c451725c07a805dcb315215dc85b86e in mainline introduces
helper macro is_owner_or_cap(). This patch allows one to build ocfs2 with
kernels having/not having this change.

Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
---
 Makefile                  |    3 ++-
 configure.in              |    5 +++++
 kapi-compat/include/cap.h |    7 +++++++
 3 files changed, 14 insertions(+), 1 deletions(-)
 create mode 100644 kapi-compat/include/cap.h

diff --git a/Makefile b/Makefile
index b035e29..5539d48 100644
--- a/Makefile
+++ b/Makefile
@@ -23,7 +23,8 @@ KAPI_COMPAT_FILES = \
 	kapi-compat/include/configfs.h \
 	kapi-compat/include/register_sysctl.h \
 	kapi-compat/include/su_mutex.h \
-	kapi-compat/include/kobject.h
+	kapi-compat/include/kobject.h \
+	kapi-compat/include/cap.h
 
 PATCH_FILES =
 
diff --git a/configure.in b/configure.in
index 4164a42..4e47421 100644
--- a/configure.in
+++ b/configure.in
@@ -243,6 +243,11 @@ OCFS2_CHECK_KERNEL([struct subsystem in kobject.h], kobject.h,
 AC_SUBST(STRUCT_SUBSYSTEM_DEFINED)
 KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS kobject.h"
 
+cap_compat_header=""
+OCFS2_CHECK_KERNEL([is_owner_or_cap() in fs.h], fs.h,
+  , cap_compat_header="cap.h", [^#define is_owner_or_cap])
+KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $cap_compat_header"
+
 # using -include has two advantages:
 #  the source doesn't need to know to include compat headers
 #  the compat header file names don't go through the search path
diff --git a/kapi-compat/include/cap.h b/kapi-compat/include/cap.h
new file mode 100644
index 0000000..a10a12f
--- /dev/null
+++ b/kapi-compat/include/cap.h
@@ -0,0 +1,7 @@
+#ifndef KAPI_CAP_H
+#define KAPI_CAP_H
+
+#define is_owner_or_cap(inode)  \
+	        ((current->fsuid == (inode)->i_uid) || capable(CAP_FOWNER))
+
+#endif
-- 
1.5.2.5

^ permalink raw reply related	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 15/30] ocfs2: Handles configfs_depend_item() and configfs_undepend_item()
  2008-01-03 11:22 [Ocfs2-devel] OCFS2 1.4 Repository Base (3rd attempt) Sunil Mushran
                   ` (18 preceding siblings ...)
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 05/30] ocfs2: Handle macro zero_user_page() Sunil Mushran
@ 2008-01-03 11:22 ` Sunil Mushran
  2008-01-08 15:45   ` Mark Fasheh
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 19/30] ocfs2: Handle missing macro is_owner_or_cap() Sunil Mushran
                   ` (7 subsequent siblings)
  27 siblings, 1 reply; 61+ messages in thread
From: Sunil Mushran @ 2008-01-03 11:22 UTC (permalink / raw)
  To: ocfs2-devel

Commit 631d1febab8e546e3bb800bdfe2c212b8adf87de in mainline introduces
two new calls in configfs, configfs_depend_item() and configfs_undepend_item().
This patch allows one to build ocfs2 with kernels having/not having
this change.

Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
---
 Makefile                       |    3 ++-
 configure.in                   |    5 +++++
 kapi-compat/include/configfs.h |    7 +++++++
 3 files changed, 14 insertions(+), 1 deletions(-)
 create mode 100644 kapi-compat/include/configfs.h

diff --git a/Makefile b/Makefile
index 1d27943..1553e54 100644
--- a/Makefile
+++ b/Makefile
@@ -19,7 +19,8 @@ KAPI_COMPAT_FILES = \
 	kapi-compat/include/drop_nlink.h \
 	kapi-compat/include/slab.h \
 	kapi-compat/include/fs_rename_does_d_move.h \
-	kapi-compat/include/sysctl.h
+	kapi-compat/include/sysctl.h \
+	kapi-compat/include/configfs.h
 
 PATCH_FILES =
 
diff --git a/configure.in b/configure.in
index 28e1198..fb2b8e2 100644
--- a/configure.in
+++ b/configure.in
@@ -220,6 +220,11 @@ OCFS2_CHECK_KERNEL([enum FS_OCFS2 in sysctl.h], sysctl.h,
   , sysctl_compat_header="sysctl.h", [FS_OCFS2])
 KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $sysctl_compat_header"
 
+configfs_compat_header=""
+OCFS2_CHECK_KERNEL([configfs_depend_item() in configfs.h], configfs.h,
+  , configfs_compat_header="configfs.h", [configfs_depend_item()])
+KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $configfs_compat_header"
+
 # using -include has two advantages:
 #  the source doesn't need to know to include compat headers
 #  the compat header file names don't go through the search path
diff --git a/kapi-compat/include/configfs.h b/kapi-compat/include/configfs.h
new file mode 100644
index 0000000..cbc11e6
--- /dev/null
+++ b/kapi-compat/include/configfs.h
@@ -0,0 +1,7 @@
+#ifndef KAPI_CONFIGFS_H
+#define KAPI_CONFIGFS_H
+
+#define configfs_depend_item(a, b)	(0)
+#define configfs_undepend_item(a, b)
+
+#endif
-- 
1.5.2.5

^ permalink raw reply related	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 13/30] ocfs2: Define FS_RENAME_DOES_D_MOVE
  2008-01-03 11:22 [Ocfs2-devel] OCFS2 1.4 Repository Base (3rd attempt) Sunil Mushran
                   ` (20 preceding siblings ...)
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 19/30] ocfs2: Handle missing macro is_owner_or_cap() Sunil Mushran
@ 2008-01-03 11:22 ` Sunil Mushran
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 21/30] ocfs2: Handle splice.h Sunil Mushran
                   ` (5 subsequent siblings)
  27 siblings, 0 replies; 61+ messages in thread
From: Sunil Mushran @ 2008-01-03 11:22 UTC (permalink / raw)
  To: ocfs2-devel

Commit 349457ccf2592c14bdf13b6706170ae2e94931b1 in mainline defines macro
FS_RENAME_DOES_D_MOVE to allow fs to call d_move() during rename().
This patch allows one to build ocfs2 with kernels having/not having
this change.

Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
---
 Makefile                                    |    3 ++-
 configure.in                                |    5 +++++
 kapi-compat/include/fs_rename_does_d_move.h |    6 ++++++
 3 files changed, 13 insertions(+), 1 deletions(-)
 create mode 100644 kapi-compat/include/fs_rename_does_d_move.h

diff --git a/Makefile b/Makefile
index 23af453..43cd04c 100644
--- a/Makefile
+++ b/Makefile
@@ -17,7 +17,8 @@ KAPI_COMPAT_FILES = \
 	kapi-compat/include/umh_wait.h \
 	kapi-compat/include/inc_nlink.h \
 	kapi-compat/include/drop_nlink.h \
-	kapi-compat/include/slab.h
+	kapi-compat/include/slab.h \
+	kapi-compat/include/fs_rename_does_d_move.h
 
 PATCH_FILES =
 
diff --git a/configure.in b/configure.in
index 11b877f..ae5dada 100644
--- a/configure.in
+++ b/configure.in
@@ -210,6 +210,11 @@ OCFS2_CHECK_KERNEL([kmem_cache_create() with dtor arg in slab.h], slab.h,
 AC_SUBST(KMEM_CACHE_CREATE_DTOR)
 KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS slab.h"
 
+fstype_compat_header=""
+OCFS2_CHECK_KERNEL([flag FS_RENAME_DOES_D_MOVE in fs.h], fs.h,
+  , fstype_compat_header="fs_rename_does_d_move.h", [FS_RENAME_DOES_D_MOVE])
+KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $fstype_compat_header"
+
 # using -include has two advantages:
 #  the source doesn't need to know to include compat headers
 #  the compat header file names don't go through the search path
diff --git a/kapi-compat/include/fs_rename_does_d_move.h b/kapi-compat/include/fs_rename_does_d_move.h
new file mode 100644
index 0000000..895ea86
--- /dev/null
+++ b/kapi-compat/include/fs_rename_does_d_move.h
@@ -0,0 +1,6 @@
+#ifndef KAPI_FSTYPE_H
+#define KAPI_FSTYPE_H
+
+#define FS_RENAME_DOES_D_MOVE	FS_ODD_RENAME
+
+#endif
-- 
1.5.2.5

^ permalink raw reply related	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 21/30] ocfs2: Handle splice.h
  2008-01-03 11:22 [Ocfs2-devel] OCFS2 1.4 Repository Base (3rd attempt) Sunil Mushran
                   ` (21 preceding siblings ...)
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 13/30] ocfs2: Define FS_RENAME_DOES_D_MOVE Sunil Mushran
@ 2008-01-03 11:22 ` Sunil Mushran
  2008-01-08 16:01   ` Mark Fasheh
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 26/30] ocfs2: Handle missing const struct inode_operations in struct inode Sunil Mushran
                   ` (4 subsequent siblings)
  27 siblings, 1 reply; 61+ messages in thread
From: Sunil Mushran @ 2008-01-03 11:22 UTC (permalink / raw)
  To: ocfs2-devel

Commit d6b29d7cee064f28ca097e906de7453541351095 in mainline moves the splice
structures from pipe_fs_i.h to splice.h. This patch allows one to build
ocfs2 with kernels having/not having this change.

Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
---
 Config.make.in    |    1 +
 configure.in      |    5 +++++
 fs/ocfs2/Makefile |    4 ++++
 fs/ocfs2/file.c   |    2 ++
 4 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/Config.make.in b/Config.make.in
index 7d0ca7d..a912f40 100644
--- a/Config.make.in
+++ b/Config.make.in
@@ -67,6 +67,7 @@ REGISTER_SYSCTL_TWO_ARGS = @REGISTER_SYSCTL_TWO_ARGS@
 NO_SU_MUTEX_IN_STRUCT_CONFIGFS_SUBSYSTEM = @NO_SU_MUTEX_IN_STRUCT_CONFIGFS_SUBSYSTEM@
 STRUCT_SUBSYSTEM_DEFINED = @STRUCT_SUBSYSTEM_DEFINED@
 NO_FALLOCATE = @NO_FALLOCATE@
+NO_SPLICE_HEADER = @NO_SPLICE_HEADER@
 
 OCFS_DEBUG = @OCFS_DEBUG@
 
diff --git a/configure.in b/configure.in
index d258f97..e58cc18 100644
--- a/configure.in
+++ b/configure.in
@@ -253,6 +253,11 @@ OCFS2_CHECK_KERNEL([fallocate() in fs.h], fs.h,
   , NO_FALLOCATE=yes, [^.*long (\*fallocate)])
 AC_SUBST(NO_FALLOCATE)
 
+NO_SPLICE_HEADER=
+OCFS2_CHECK_KERNEL([struct splice_desc in splice.h], splice.h,
+  , NO_SPLICE_HEADER=yes, [^struct splice_desc ])
+AC_SUBST(NO_SPLICE_HEADER)
+
 # using -include has two advantages:
 #  the source doesn't need to know to include compat headers
 #  the compat header file names don't go through the search path
diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
index 3b13b0c..58be004 100644
--- a/fs/ocfs2/Makefile
+++ b/fs/ocfs2/Makefile
@@ -53,6 +53,10 @@ ifdef NO_FALLOCATE
 EXTRA_CFLAGS += -DNO_FALLOCATE
 endif
 
+ifdef NO_SPLICE_HEADER
+EXTRA_CFLAGS += -DNO_SPLICE_HEADER
+endif
+
 #
 # Since SUBDIRS means something to kbuild, define them safely.  Do not
 # include trailing slashes.
diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
index 45b1c05..ad38a21 100644
--- a/fs/ocfs2/file.c
+++ b/fs/ocfs2/file.c
@@ -31,7 +31,9 @@
 #include <linux/pagemap.h>
 #include <linux/uio.h>
 #include <linux/sched.h>
+#ifndef NO_SPLICE_HEADER
 #include <linux/splice.h>
+#endif
 #include <linux/mount.h>
 #include <linux/writeback.h>
 #ifndef NO_FALLOCATE
-- 
1.5.2.5

^ permalink raw reply related	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 26/30] ocfs2: Handle missing const struct inode_operations in struct inode
  2008-01-03 11:22 [Ocfs2-devel] OCFS2 1.4 Repository Base (3rd attempt) Sunil Mushran
                   ` (22 preceding siblings ...)
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 21/30] ocfs2: Handle splice.h Sunil Mushran
@ 2008-01-03 11:22 ` Sunil Mushran
  2008-01-08 16:15   ` Mark Fasheh
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 11/30] ocfs2: Add helper drop_nlink Sunil Mushran
                   ` (3 subsequent siblings)
  27 siblings, 1 reply; 61+ messages in thread
From: Sunil Mushran @ 2008-01-03 11:22 UTC (permalink / raw)
  To: ocfs2-devel

Commit c5ef1c42c51b1b5b4a401a6517bdda30933ddbaf in mainline marks struct
inode_operations in struct inode as a const. This patch allows one to build
ocfs2 with kernels having/not having this change.

Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
---
 Config.make.in        |    1 +
 configure.in          |    5 +++++
 fs/ocfs2/Makefile     |    4 ++++
 fs/ocfs2/dlm/Makefile |    4 ++++
 fs/ocfs2/dlm/dlmfs.c  |   18 ++++++++++++++++++
 fs/ocfs2/file.c       |    8 ++++++++
 fs/ocfs2/file.h       |    5 +++++
 fs/ocfs2/namei.c      |    4 ++++
 fs/ocfs2/namei.h      |    4 ++++
 fs/ocfs2/symlink.c    |    8 ++++++++
 fs/ocfs2/symlink.h    |    5 +++++
 11 files changed, 66 insertions(+), 0 deletions(-)

diff --git a/Config.make.in b/Config.make.in
index 8479f37..4b2d1c5 100644
--- a/Config.make.in
+++ b/Config.make.in
@@ -71,6 +71,7 @@ NO_SPLICE_HEADER = @NO_SPLICE_HEADER@
 NO_SHOULD_REMOVE_SUID = @NO_SHOULD_REMOVE_SUID@
 NO_GENERIC_SEGMENT_CHECKS = @NO_GENERIC_SEGMENT_CHECKS@
 SOP_IS_NOT_CONST = @SOP_IS_NOT_CONST@
+IOP_IS_NOT_CONST = @IOP_IS_NOT_CONST@
 
 OCFS_DEBUG = @OCFS_DEBUG@
 
diff --git a/configure.in b/configure.in
index 4771818..a6f4336 100644
--- a/configure.in
+++ b/configure.in
@@ -280,6 +280,11 @@ OCFS2_CHECK_KERNEL([s_op declared as const in struct super_block in fs.h], fs.h,
   , SOP_IS_NOT_CONST=yes, [^.*const struct super_operations.*\*s_op;])
 AC_SUBST(SOP_IS_NOT_CONST)
 
+IOP_IS_NOT_CONST=
+OCFS2_CHECK_KERNEL([i_op declared as const in struct inode in fs.h], fs.h,
+  , IOP_IS_NOT_CONST=yes, [^.*const struct inode_operations.*\*i_op;])
+AC_SUBST(IOP_IS_NOT_CONST)
+
 # using -include has two advantages:
 #  the source doesn't need to know to include compat headers
 #  the compat header file names don't go through the search path
diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
index 5a8a838..a894c45 100644
--- a/fs/ocfs2/Makefile
+++ b/fs/ocfs2/Makefile
@@ -69,6 +69,10 @@ ifdef SOP_IS_NOT_CONST
 EXTRA_CFLAGS += -DSOP_IS_NOT_CONST
 endif
 
+ifdef IOP_IS_NOT_CONST
+EXTRA_CFLAGS += -DIOP_IS_NOT_CONST
+endif
+
 #
 # Since SUBDIRS means something to kbuild, define them safely.  Do not
 # include trailing slashes.
diff --git a/fs/ocfs2/dlm/Makefile b/fs/ocfs2/dlm/Makefile
index 5108301..30a8d43 100644
--- a/fs/ocfs2/dlm/Makefile
+++ b/fs/ocfs2/dlm/Makefile
@@ -36,6 +36,10 @@ ifdef SOP_IS_NOT_CONST
 EXTRA_CFLAGS += -DSOP_IS_NOT_CONST
 endif
 
+ifdef IOP_IS_NOT_CONST
+EXTRA_CFLAGS += -DIOP_IS_NOT_CONST
+endif
+
 DLM_SOURCES =			\
 	dlmast.c		\
 	dlmconvert.c		\
diff --git a/fs/ocfs2/dlm/dlmfs.c b/fs/ocfs2/dlm/dlmfs.c
index 6d57554..db6d582 100644
--- a/fs/ocfs2/dlm/dlmfs.c
+++ b/fs/ocfs2/dlm/dlmfs.c
@@ -66,9 +66,15 @@ static struct super_operations dlmfs_ops;
 static const struct super_operations dlmfs_ops;
 #endif
 static const struct file_operations dlmfs_file_operations;
+#ifdef IOP_IS_NOT_CONST
+static struct inode_operations dlmfs_dir_inode_operations;
+static struct inode_operations dlmfs_root_inode_operations;
+static struct inode_operations dlmfs_file_inode_operations;
+#else
 static const struct inode_operations dlmfs_dir_inode_operations;
 static const struct inode_operations dlmfs_root_inode_operations;
 static const struct inode_operations dlmfs_file_inode_operations;
+#endif
 static struct kmem_cache *dlmfs_inode_cache;
 
 struct workqueue_struct *user_dlm_worker;
@@ -547,14 +553,22 @@ static const struct file_operations dlmfs_file_operations = {
 	.write		= dlmfs_file_write,
 };
 
+#ifdef IOP_IS_NOT_CONST
+static struct inode_operations dlmfs_dir_inode_operations = {
+#else
 static const struct inode_operations dlmfs_dir_inode_operations = {
+#endif
 	.create		= dlmfs_create,
 	.lookup		= simple_lookup,
 	.unlink		= dlmfs_unlink,
 };
 
 /* this way we can restrict mkdir to only the toplevel of the fs. */
+#ifdef IOP_IS_NOT_CONST
+static struct inode_operations dlmfs_root_inode_operations = {
+#else
 static const struct inode_operations dlmfs_root_inode_operations = {
+#endif
 	.lookup		= simple_lookup,
 	.mkdir		= dlmfs_mkdir,
 	.rmdir		= simple_rmdir,
@@ -572,7 +586,11 @@ static const struct super_operations dlmfs_ops = {
 	.drop_inode	= generic_delete_inode,
 };
 
+#ifdef IOP_IS_NOT_CONST
+static struct inode_operations dlmfs_file_inode_operations = {
+#else
 static const struct inode_operations dlmfs_file_inode_operations = {
+#endif
 	.getattr	= simple_getattr,
 };
 
diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
index ad38a21..a19322e 100644
--- a/fs/ocfs2/file.c
+++ b/fs/ocfs2/file.c
@@ -2399,7 +2399,11 @@ bail:
 	return ret;
 }
 
+#ifdef IOP_IS_NOT_CONST
+struct inode_operations ocfs2_file_iops = {
+#else
 const struct inode_operations ocfs2_file_iops = {
+#endif
 	.setattr	= ocfs2_setattr,
 	.getattr	= ocfs2_getattr,
 	.permission	= ocfs2_permission,
@@ -2408,7 +2412,11 @@ const struct inode_operations ocfs2_file_iops = {
 #endif
 };
 
+#ifdef IOP_IS_NOT_CONST
+struct inode_operations ocfs2_special_file_iops = {
+#else
 const struct inode_operations ocfs2_special_file_iops = {
+#endif
 	.setattr	= ocfs2_setattr,
 	.getattr	= ocfs2_getattr,
 	.permission	= ocfs2_permission,
diff --git a/fs/ocfs2/file.h b/fs/ocfs2/file.h
index 066f14a..807795a 100644
--- a/fs/ocfs2/file.h
+++ b/fs/ocfs2/file.h
@@ -28,8 +28,13 @@
 
 extern const struct file_operations ocfs2_fops;
 extern const struct file_operations ocfs2_dops;
+#ifdef IOP_IS_NOT_CONST
+extern struct inode_operations ocfs2_file_iops;
+extern struct inode_operations ocfs2_special_file_iops;
+#else
 extern const struct inode_operations ocfs2_file_iops;
 extern const struct inode_operations ocfs2_special_file_iops;
+#endif
 struct ocfs2_alloc_context;
 
 enum ocfs2_alloc_restarted {
diff --git a/fs/ocfs2/namei.c b/fs/ocfs2/namei.c
index 7292590..6d822b7 100644
--- a/fs/ocfs2/namei.c
+++ b/fs/ocfs2/namei.c
@@ -1898,7 +1898,11 @@ leave:
 	return status;
 }
 
+#ifdef IOP_IS_NOT_CONST
+struct inode_operations ocfs2_dir_iops = {
+#else
 const struct inode_operations ocfs2_dir_iops = {
+#endif
 	.create		= ocfs2_create,
 	.lookup		= ocfs2_lookup,
 	.link		= ocfs2_link,
diff --git a/fs/ocfs2/namei.h b/fs/ocfs2/namei.h
index 688aef6..8022f3c 100644
--- a/fs/ocfs2/namei.h
+++ b/fs/ocfs2/namei.h
@@ -26,7 +26,11 @@
 #ifndef OCFS2_NAMEI_H
 #define OCFS2_NAMEI_H
 
+#ifdef IOP_IS_NOT_CONST
+extern struct inode_operations ocfs2_dir_iops;
+#else
 extern const struct inode_operations ocfs2_dir_iops;
+#endif
 
 struct dentry *ocfs2_get_parent(struct dentry *child);
 
diff --git a/fs/ocfs2/symlink.c b/fs/ocfs2/symlink.c
index 7134007..9794649 100644
--- a/fs/ocfs2/symlink.c
+++ b/fs/ocfs2/symlink.c
@@ -163,12 +163,20 @@ bail:
 	return ERR_PTR(status);
 }
 
+#ifdef IOP_IS_NOT_CONST
+struct inode_operations ocfs2_symlink_inode_operations = {
+#else
 const struct inode_operations ocfs2_symlink_inode_operations = {
+#endif
 	.readlink	= page_readlink,
 	.follow_link	= ocfs2_follow_link,
 	.getattr	= ocfs2_getattr,
 };
+#ifdef IOP_IS_NOT_CONST
+struct inode_operations ocfs2_fast_symlink_inode_operations = {
+#else
 const struct inode_operations ocfs2_fast_symlink_inode_operations = {
+#endif
 	.readlink	= ocfs2_readlink,
 	.follow_link	= ocfs2_follow_link,
 	.getattr	= ocfs2_getattr,
diff --git a/fs/ocfs2/symlink.h b/fs/ocfs2/symlink.h
index 65a6c9c..f53d1e0 100644
--- a/fs/ocfs2/symlink.h
+++ b/fs/ocfs2/symlink.h
@@ -26,8 +26,13 @@
 #ifndef OCFS2_SYMLINK_H
 #define OCFS2_SYMLINK_H
 
+#ifdef IOP_IS_NOT_CONST
+extern struct inode_operations ocfs2_symlink_inode_operations;
+extern struct inode_operations ocfs2_fast_symlink_inode_operations;
+#else
 extern const struct inode_operations ocfs2_symlink_inode_operations;
 extern const struct inode_operations ocfs2_fast_symlink_inode_operations;
+#endif
 
 /*
  * Test whether an inode is a fast symlink.
-- 
1.5.2.5

^ permalink raw reply related	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 11/30] ocfs2: Add helper drop_nlink
  2008-01-03 11:22 [Ocfs2-devel] OCFS2 1.4 Repository Base (3rd attempt) Sunil Mushran
                   ` (23 preceding siblings ...)
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 26/30] ocfs2: Handle missing const struct inode_operations in struct inode Sunil Mushran
@ 2008-01-03 11:22 ` Sunil Mushran
  2008-01-08 13:24   ` Mark Fasheh
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 12/30] ocfs2: Handle missing dtors in kmem_cache_create() Sunil Mushran
                   ` (2 subsequent siblings)
  27 siblings, 1 reply; 61+ messages in thread
From: Sunil Mushran @ 2008-01-03 11:22 UTC (permalink / raw)
  To: ocfs2-devel

Commit 9a53c3a783c2fa9b969628e65695c11c3e51e673 in mainline added
helper drop_nlink(). This patch allows one to build ocfs2 with kernels
having/not having that change.

Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
---
 Makefile                         |    3 ++-
 configure.in                     |    5 +++++
 kapi-compat/include/drop_nlink.h |   22 ++++++++++++++++++++++
 3 files changed, 29 insertions(+), 1 deletions(-)
 create mode 100644 kapi-compat/include/drop_nlink.h

diff --git a/Makefile b/Makefile
index 2995450..d201b85 100644
--- a/Makefile
+++ b/Makefile
@@ -15,7 +15,8 @@ KAPI_COMPAT_FILES = \
 	kapi-compat/include/sync_mapping_range.h \
 	kapi-compat/include/fpath.h \
 	kapi-compat/include/umh_wait.h \
-	kapi-compat/include/inc_nlink.h
+	kapi-compat/include/inc_nlink.h \
+	kapi-compat/include/drop_nlink.h
 
 PATCH_FILES =
 
diff --git a/configure.in b/configure.in
index 05d71ae..780eb43 100644
--- a/configure.in
+++ b/configure.in
@@ -199,6 +199,11 @@ OCFS2_CHECK_KERNEL([inc_nlink() in fs.h], fs.h,
   , inc_nlink_compat_header="inc_nlink.h", [^static inline void inc_nlink(])
 KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $inc_nlink_compat_header"
 
+drop_nlink_compat_header=""
+OCFS2_CHECK_KERNEL([drop_nlink() in fs.h], fs.h,
+  , drop_nlink_compat_header="drop_nlink.h", [^static inline void drop_nlink(])
+KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $drop_nlink_compat_header"
+
 # using -include has two advantages:
 #  the source doesn't need to know to include compat headers
 #  the compat header file names don't go through the search path
diff --git a/kapi-compat/include/drop_nlink.h b/kapi-compat/include/drop_nlink.h
new file mode 100644
index 0000000..d54973b
--- /dev/null
+++ b/kapi-compat/include/drop_nlink.h
@@ -0,0 +1,22 @@
+#ifndef KAPI_DROP_NLINK_H
+#define KAPI_DROP_NLINK_H
+
+#include <linux/fs.h>
+
+/*
+ * drop_nlink - directly drop an inode's link count
+ * @inode: inode
+ *
+ * This is a low-level filesystem helper to replace any
+ * direct filesystem manipulation of i_nlink.  In cases
+ * where we are attempting to track writes to the
+ * filesystem, a decrement to zero means an imminent
+ * write when the file is truncated and actually unlinked
+ * on the filesystem.
+ */
+static inline void drop_nlink(struct inode *inode)
+{
+	inode->i_nlink--;
+}
+
+#endif
-- 
1.5.2.5

^ permalink raw reply related	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 12/30] ocfs2: Handle missing dtors in kmem_cache_create()
  2008-01-03 11:22 [Ocfs2-devel] OCFS2 1.4 Repository Base (3rd attempt) Sunil Mushran
                   ` (24 preceding siblings ...)
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 11/30] ocfs2: Add helper drop_nlink Sunil Mushran
@ 2008-01-03 11:22 ` Sunil Mushran
  2008-01-08 15:41   ` Mark Fasheh
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 16/30] ocfs2: Handle different prototypes of register_sysctl_table() Sunil Mushran
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 04/30] ocfs2: Handle macro uninitialized_var Sunil Mushran
  27 siblings, 1 reply; 61+ messages in thread
From: Sunil Mushran @ 2008-01-03 11:22 UTC (permalink / raw)
  To: ocfs2-devel

Commit 20c2df83d25c6a95affe6157a4c9cac4cf5ffaac removed the dtor arg
from kmem_cache_create(). This patch allows one to build ocfs2 with
kernels having/not having this change.

Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
---
 Config.make.in             |    1 +
 Makefile                   |    3 ++-
 configure.in               |    6 ++++++
 fs/ocfs2/Makefile          |    4 ++++
 fs/ocfs2/dlm/Makefile      |    4 ++++
 fs/ocfs2/dlm/dlmfs.c       |    2 +-
 fs/ocfs2/dlm/dlmmaster.c   |    2 +-
 fs/ocfs2/super.c           |    2 +-
 fs/ocfs2/uptodate.c        |    2 +-
 kapi-compat/include/slab.h |   10 ++++++++++
 10 files changed, 31 insertions(+), 5 deletions(-)
 create mode 100644 kapi-compat/include/slab.h

diff --git a/Config.make.in b/Config.make.in
index 34db742..d289a16 100644
--- a/Config.make.in
+++ b/Config.make.in
@@ -62,6 +62,7 @@ NO_DELAYED_WORK = @NO_DELAYED_WORK@
 NO_SYNC_MAPPING_RANGE  = @NO_SYNC_MAPPING_RANGE@
 NO_FAULT_IN_VMOPS = @NO_FAULT_IN_VMOPS@
 NO_F_PATH_IN_STRUCT_FILE = @NO_F_PATH_IN_STRUCT_FILE@
+KMEM_CACHE_CREATE_DTOR = @KMEM_CACHE_CREATE_DTOR@
 
 OCFS_DEBUG = @OCFS_DEBUG@
 
diff --git a/Makefile b/Makefile
index d201b85..23af453 100644
--- a/Makefile
+++ b/Makefile
@@ -16,7 +16,8 @@ KAPI_COMPAT_FILES = \
 	kapi-compat/include/fpath.h \
 	kapi-compat/include/umh_wait.h \
 	kapi-compat/include/inc_nlink.h \
-	kapi-compat/include/drop_nlink.h
+	kapi-compat/include/drop_nlink.h \
+	kapi-compat/include/slab.h
 
 PATCH_FILES =
 
diff --git a/configure.in b/configure.in
index 780eb43..11b877f 100644
--- a/configure.in
+++ b/configure.in
@@ -204,6 +204,12 @@ OCFS2_CHECK_KERNEL([drop_nlink() in fs.h], fs.h,
   , drop_nlink_compat_header="drop_nlink.h", [^static inline void drop_nlink(])
 KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $drop_nlink_compat_header"
 
+KMEM_CACHE_CREATE_DTOR=
+OCFS2_CHECK_KERNEL([kmem_cache_create() with dtor arg in slab.h], slab.h,
+  KMEM_CACHE_CREATE_DTOR=yes, , [^.*void (\*)(void \*, kmem_cache_t \*, unsigned long),])
+AC_SUBST(KMEM_CACHE_CREATE_DTOR)
+KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS slab.h"
+
 # using -include has two advantages:
 #  the source doesn't need to know to include compat headers
 #  the compat header file names don't go through the search path
diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
index 34dfbc2..1924d5c 100644
--- a/fs/ocfs2/Makefile
+++ b/fs/ocfs2/Makefile
@@ -41,6 +41,10 @@ ifdef NO_F_PATH_IN_STRUCT_FILE
 EXTRA_CFLAGS += -DNO_F_PATH_IN_STRUCT_FILE
 endif
 
+ifdef KMEM_CACHE_CREATE_DTOR
+EXTRA_CFLAGS += -DKMEM_CACHE_CREATE_DTOR
+endif
+
 #
 # Since SUBDIRS means something to kbuild, define them safely.  Do not
 # include trailing slashes.
diff --git a/fs/ocfs2/dlm/Makefile b/fs/ocfs2/dlm/Makefile
index 7e7abda..f8a5376 100644
--- a/fs/ocfs2/dlm/Makefile
+++ b/fs/ocfs2/dlm/Makefile
@@ -24,6 +24,10 @@ ifdef NO_F_PATH_IN_STRUCT_FILE
 EXTRA_CFLAGS += -DNO_F_PATH_IN_STRUCT_FILE
 endif
 
+ifdef KMEM_CACHE_CREATE_DTOR
+EXTRA_CFLAGS += -DKMEM_CACHE_CREATE_DTOR
+endif
+
 DLM_SOURCES =			\
 	dlmast.c		\
 	dlmconvert.c		\
diff --git a/fs/ocfs2/dlm/dlmfs.c b/fs/ocfs2/dlm/dlmfs.c
index 0284cdb..78704a1 100644
--- a/fs/ocfs2/dlm/dlmfs.c
+++ b/fs/ocfs2/dlm/dlmfs.c
@@ -588,7 +588,7 @@ static int __init init_dlmfs_fs(void)
 
 	dlmfs_print_version();
 
-	dlmfs_inode_cache = kmem_cache_create("dlmfs_inode_cache",
+	dlmfs_inode_cache = kapi_kmem_cache_create("dlmfs_inode_cache",
 				sizeof(struct dlmfs_inode_private),
 				0, (SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT|
 					SLAB_MEM_SPREAD),
diff --git a/fs/ocfs2/dlm/dlmmaster.c b/fs/ocfs2/dlm/dlmmaster.c
index 62e4a7d..a668840 100644
--- a/fs/ocfs2/dlm/dlmmaster.c
+++ b/fs/ocfs2/dlm/dlmmaster.c
@@ -507,7 +507,7 @@ static void dlm_mle_node_up(struct dlm_ctxt *dlm,
 
 int dlm_init_mle_cache(void)
 {
-	dlm_mle_cache = kmem_cache_create("dlm_mle_cache",
+	dlm_mle_cache = kapi_kmem_cache_create("dlm_mle_cache",
 					  sizeof(struct dlm_master_list_entry),
 					  0, SLAB_HWCACHE_ALIGN,
 					  NULL);
diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c
index a8f90a2..f5c424d 100644
--- a/fs/ocfs2/super.c
+++ b/fs/ocfs2/super.c
@@ -1033,7 +1033,7 @@ static void ocfs2_inode_init_once(void *data,
 
 static int ocfs2_initialize_mem_caches(void)
 {
-	ocfs2_inode_cachep = kmem_cache_create("ocfs2_inode_cache",
+	ocfs2_inode_cachep = kapi_kmem_cache_create("ocfs2_inode_cache",
 				       sizeof(struct ocfs2_inode_info),
 				       0,
 				       (SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT|
diff --git a/fs/ocfs2/uptodate.c b/fs/ocfs2/uptodate.c
index 4da8851..6248308 100644
--- a/fs/ocfs2/uptodate.c
+++ b/fs/ocfs2/uptodate.c
@@ -546,7 +546,7 @@ void ocfs2_remove_from_cache(struct inode *inode,
 
 int __init init_ocfs2_uptodate_cache(void)
 {
-	ocfs2_uptodate_cachep = kmem_cache_create("ocfs2_uptodate",
+	ocfs2_uptodate_cachep = kapi_kmem_cache_create("ocfs2_uptodate",
 				  sizeof(struct ocfs2_meta_cache_item),
 				  0, SLAB_HWCACHE_ALIGN, NULL);
 	if (!ocfs2_uptodate_cachep)
diff --git a/kapi-compat/include/slab.h b/kapi-compat/include/slab.h
new file mode 100644
index 0000000..239763f
--- /dev/null
+++ b/kapi-compat/include/slab.h
@@ -0,0 +1,10 @@
+#ifndef KAPI_SLAB_H
+#define KAPI_SLAB_H
+
+#ifdef KMEM_CACHE_CREATE_DTOR
+#define kapi_kmem_cache_create(a, b, c, d, e)	kmem_cache_create(a, b, c, d, e, NULL)
+#else
+#define kapi_kmem_cache_create(a, b, c, d, e)	kmem_cache_create(a, b, c, d, e)
+#endif
+
+#endif
-- 
1.5.2.5

^ permalink raw reply related	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 04/30] ocfs2: Handle macro uninitialized_var
  2008-01-03 11:22 [Ocfs2-devel] OCFS2 1.4 Repository Base (3rd attempt) Sunil Mushran
                   ` (26 preceding siblings ...)
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 16/30] ocfs2: Handle different prototypes of register_sysctl_table() Sunil Mushran
@ 2008-01-03 11:22 ` Sunil Mushran
  2008-01-08 13:16   ` Mark Fasheh
  27 siblings, 1 reply; 61+ messages in thread
From: Sunil Mushran @ 2008-01-03 11:22 UTC (permalink / raw)
  To: ocfs2-devel

Commit 9490991482a2091a828d997adbc088e24c310a4d in mainline introduced
macro uninitialized_var(). This patch allows one to build ocfs2 with
kernels having/not having that change.

Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
---
 Makefile                       |    3 ++-
 configure.in                   |    5 +++++
 kapi-compat/include/compiler.h |   10 ++++++++++
 3 files changed, 17 insertions(+), 1 deletions(-)
 create mode 100644 kapi-compat/include/compiler.h

diff --git a/Makefile b/Makefile
index 4752593..21ff590 100644
--- a/Makefile
+++ b/Makefile
@@ -9,7 +9,8 @@ SUBDIRS = fs vendor
 LINUX_INCLUDE_FILES =
 
 KAPI_COMPAT_FILES = \
-	kapi-compat/include/workqueue.h
+	kapi-compat/include/workqueue.h \
+	kapi-compat/include/compiler.h
 
 PATCH_FILES =
 
diff --git a/configure.in b/configure.in
index 46f0057..70c4041 100644
--- a/configure.in
+++ b/configure.in
@@ -162,6 +162,11 @@ OCFS2_CHECK_KERNEL([struct delayed_work in workqueue.h], workqueue.h,
 AC_SUBST(NO_DELAYED_WORK)
 KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS workqueue.h"
 
+compiler_compat_header=""
+OCFS2_CHECK_KERNEL([uninitialized_var() in compiler-gcc4.h], compiler-gcc4.h,
+  , compiler_compat_header="compiler.h", [uninitialized_var])
+KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $compiler_compat_header"
+
 # using -include has two advantages:
 #  the source doesn't need to know to include compat headers
 #  the compat header file names don't go through the search path
diff --git a/kapi-compat/include/compiler.h b/kapi-compat/include/compiler.h
new file mode 100644
index 0000000..c104ed1
--- /dev/null
+++ b/kapi-compat/include/compiler.h
@@ -0,0 +1,10 @@
+#ifndef KAPI_COMPILER_H
+#define KAPI_COMPILER_H
+
+/*
+ * A trick to suppress uninitialized variable warning without generating any
+ * code
+ */
+#define uninitialized_var(x) x = x
+
+#endif
-- 
1.5.2.5

^ permalink raw reply related	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] OCFS2 1.4 Repository Base (3rd attempt)
@ 2008-01-03 11:22 Sunil Mushran
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 29/30] ocfs2: Handle older prototype of bi_end_io_t Sunil Mushran
                   ` (27 more replies)
  0 siblings, 28 replies; 61+ messages in thread
From: Sunil Mushran @ 2008-01-03 11:22 UTC (permalink / raw)
  To: ocfs2-devel

This has all the changes requested by Joel. If you have been reviewing
the patches in the last drop, note that only 5 patches have changed since
that drop. The list of changed patches follows:

[PATCH 06/30] ocfs2: Include do_sync_mapping_range() from mainline
Remove #ifdef from alloc.c

[PATCH 09/30] ocfs2: Define enum umh_wait
Rename kapi header

[PATCH 13/30] ocfs2: Define FS_RENAME_DOES_D_MOVE
Rename kapi header

[PATCH 18/30] ocfs2: Handle the removal of struct subsystem
Reworked to reduce changes in fs code.

[PATCH 27/30] ocfs2: Handle missing vectorized fileops aio_read() and aio_write()
Changes (from file.c) moved to a kapi header. Lot cleaner.

Sunil

^ permalink raw reply	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 16/30] ocfs2: Handle different prototypes of register_sysctl_table()
  2008-01-03 11:22 [Ocfs2-devel] OCFS2 1.4 Repository Base (3rd attempt) Sunil Mushran
                   ` (25 preceding siblings ...)
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 12/30] ocfs2: Handle missing dtors in kmem_cache_create() Sunil Mushran
@ 2008-01-03 11:22 ` Sunil Mushran
  2008-01-08 15:45   ` Mark Fasheh
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 04/30] ocfs2: Handle macro uninitialized_var Sunil Mushran
  27 siblings, 1 reply; 61+ messages in thread
From: Sunil Mushran @ 2008-01-03 11:22 UTC (permalink / raw)
  To: ocfs2-devel

Commit 0b4d414714f0d2f922d39424b0c5c82ad900a381 in mainline removes the
insert_at_head argument from register_sysctl_table(). This patch allows
building ocfs2 with kernels having/not having this change.

Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
---
 Config.make.in                        |    1 +
 Makefile                              |    3 ++-
 configure.in                          |    6 ++++++
 fs/ocfs2/cluster/Makefile             |    4 ++++
 fs/ocfs2/cluster/nodemanager.c        |    2 +-
 kapi-compat/include/register_sysctl.h |   10 ++++++++++
 6 files changed, 24 insertions(+), 2 deletions(-)
 create mode 100644 kapi-compat/include/register_sysctl.h

diff --git a/Config.make.in b/Config.make.in
index d289a16..2b2a041 100644
--- a/Config.make.in
+++ b/Config.make.in
@@ -63,6 +63,7 @@ NO_SYNC_MAPPING_RANGE  = @NO_SYNC_MAPPING_RANGE@
 NO_FAULT_IN_VMOPS = @NO_FAULT_IN_VMOPS@
 NO_F_PATH_IN_STRUCT_FILE = @NO_F_PATH_IN_STRUCT_FILE@
 KMEM_CACHE_CREATE_DTOR = @KMEM_CACHE_CREATE_DTOR@
+REGISTER_SYSCTL_TWO_ARGS = @REGISTER_SYSCTL_TWO_ARGS@
 
 OCFS_DEBUG = @OCFS_DEBUG@
 
diff --git a/Makefile b/Makefile
index 1553e54..4256eb7 100644
--- a/Makefile
+++ b/Makefile
@@ -20,7 +20,8 @@ KAPI_COMPAT_FILES = \
 	kapi-compat/include/slab.h \
 	kapi-compat/include/fs_rename_does_d_move.h \
 	kapi-compat/include/sysctl.h \
-	kapi-compat/include/configfs.h
+	kapi-compat/include/configfs.h \
+	kapi-compat/include/register_sysctl.h
 
 PATCH_FILES =
 
diff --git a/configure.in b/configure.in
index fb2b8e2..f4d0185 100644
--- a/configure.in
+++ b/configure.in
@@ -225,6 +225,12 @@ OCFS2_CHECK_KERNEL([configfs_depend_item() in configfs.h], configfs.h,
   , configfs_compat_header="configfs.h", [configfs_depend_item()])
 KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $configfs_compat_header"
 
+REGISTER_SYSCTL_TWO_ARGS=
+OCFS2_CHECK_KERNEL([register_sysctl() with two args in sysctl.h], sysctl.h,
+  REGISTER_SYSCTL_TWO_ARGS=yes, , [^.*int insert_at_head);])
+AC_SUBST(REGISTER_SYSCTL_TWO_ARGS)
+KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS register_sysctl.h"
+
 # using -include has two advantages:
 #  the source doesn't need to know to include compat headers
 #  the compat header file names don't go through the search path
diff --git a/fs/ocfs2/cluster/Makefile b/fs/ocfs2/cluster/Makefile
index c40eae0..68b434b 100644
--- a/fs/ocfs2/cluster/Makefile
+++ b/fs/ocfs2/cluster/Makefile
@@ -17,6 +17,10 @@ ifdef NO_DELAYED_WORK
 EXTRA_CFLAGS += -DNO_DELAYED_WORK
 endif
 
+ifdef REGISTER_SYSCTL_TWO_ARGS
+EXTRA_CFLAGS += -DREGISTER_SYSCTL_TWO_ARGS
+endif
+
 SOURCES =			\
 	heartbeat.c		\
 	masklog.c		\
diff --git a/fs/ocfs2/cluster/nodemanager.c b/fs/ocfs2/cluster/nodemanager.c
index af2070d..9fff881 100644
--- a/fs/ocfs2/cluster/nodemanager.c
+++ b/fs/ocfs2/cluster/nodemanager.c
@@ -962,7 +962,7 @@ static int __init init_o2nm(void)
 	o2hb_init();
 	o2net_init();
 
-	ocfs2_table_header = register_sysctl_table(ocfs2_root_table);
+	ocfs2_table_header = kapi_register_sysctl_table(ocfs2_root_table);
 	if (!ocfs2_table_header) {
 		printk(KERN_ERR "nodemanager: unable to register sysctl\n");
 		ret = -ENOMEM; /* or something. */
diff --git a/kapi-compat/include/register_sysctl.h b/kapi-compat/include/register_sysctl.h
new file mode 100644
index 0000000..94e8071
--- /dev/null
+++ b/kapi-compat/include/register_sysctl.h
@@ -0,0 +1,10 @@
+#ifndef KAPI_REGISTER_SYSCTL_H
+#define KAPI_REGISTER_SYSCTL_H
+
+#ifdef REGISTER_SYSCTL_TWO_ARGS
+#define kapi_register_sysctl_table(a)	register_sysctl_table(a, 0)
+#else
+#define kapi_register_sysctl_table(a)	register_sysctl_table(a)
+#endif
+
+#endif
-- 
1.5.2.5

^ permalink raw reply related	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 03/30] ocfs2: Handle workqueue changes
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 03/30] ocfs2: Handle workqueue changes Sunil Mushran
@ 2008-01-08 13:16   ` Mark Fasheh
  0 siblings, 0 replies; 61+ messages in thread
From: Mark Fasheh @ 2008-01-08 13:16 UTC (permalink / raw)
  To: ocfs2-devel

On Thu, Jan 03, 2008 at 11:19:39AM -0800, Sunil Mushran wrote:
> Commit 52bad64d95bd89e08c49ec5a071fa6dcbe5a1a9c in mainline makes
> changes to workqueue.h. This patch allows one to build ocfs2 with
> kernels having/not having that change.
> 
> Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
> Signed-off-by: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>

Though I'd have preferred a more descriptive name than "NO_DELAYED_WORK",
which makes me think that we got rid of the entire delayed work mechanism.
Maybe "NO_DELAYED_WORK_STRUCT"
	--Mark

--
Mark Fasheh
Principal Software Developer, Oracle
mark.fasheh@oracle.com

^ permalink raw reply	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 04/30] ocfs2: Handle macro uninitialized_var
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 04/30] ocfs2: Handle macro uninitialized_var Sunil Mushran
@ 2008-01-08 13:16   ` Mark Fasheh
  0 siblings, 0 replies; 61+ messages in thread
From: Mark Fasheh @ 2008-01-08 13:16 UTC (permalink / raw)
  To: ocfs2-devel

On Thu, Jan 03, 2008 at 11:19:40AM -0800, Sunil Mushran wrote:
> Commit 9490991482a2091a828d997adbc088e24c310a4d in mainline introduced
> macro uninitialized_var(). This patch allows one to build ocfs2 with
> kernels having/not having that change.
> 
> Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
> Signed-off-by: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>

--
Mark Fasheh
Principal Software Developer, Oracle
mark.fasheh@oracle.com

^ permalink raw reply	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 05/30] ocfs2: Handle macro zero_user_page()
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 05/30] ocfs2: Handle macro zero_user_page() Sunil Mushran
@ 2008-01-08 13:18   ` Mark Fasheh
  0 siblings, 0 replies; 61+ messages in thread
From: Mark Fasheh @ 2008-01-08 13:18 UTC (permalink / raw)
  To: ocfs2-devel

On Thu, Jan 03, 2008 at 11:19:41AM -0800, Sunil Mushran wrote:
> Commit 01f2705daf5a36208e69d7cf95db9c330f843af6 in mainline introduced
> macro zero_user_page(). This patch allows one to build ocfs2 with
> kernels having/not having that change.
> 
> Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
> Signed-off-by: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>

--
Mark Fasheh
Principal Software Developer, Oracle
mark.fasheh@oracle.com

^ permalink raw reply	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 06/30] ocfs2: Include do_sync_mapping_range() from mainline
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 06/30] ocfs2: Include do_sync_mapping_range() from mainline Sunil Mushran
@ 2008-01-08 13:20   ` Mark Fasheh
  2008-01-08 13:23     ` Sunil Mushran
  0 siblings, 1 reply; 61+ messages in thread
From: Mark Fasheh @ 2008-01-08 13:20 UTC (permalink / raw)
  To: ocfs2-devel

On Thu, Jan 03, 2008 at 11:19:42AM -0800, Sunil Mushran wrote:
> Commit 5b04aa3a64f854244bc40a6f528176ed50b5c4f6 introduced export symbol
> do_sync_mapping_range(). This patch allows one to build ocfs2 with kernels
> having/not having that change.
> 
> Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
> Signed-off-by: Joel Becker <joel.becker@oracle.com>
> ---
>  Config.make.in                           |    2 +
>  Makefile                                 |    3 +-
>  configure.in                             |    6 ++
>  fs/ocfs2/Makefile                        |    4 +
>  kapi-compat/include/sync_mapping_range.h |  103 ++++++++++++++++++++++++++++++
>  5 files changed, 117 insertions(+), 1 deletions(-)
>  create mode 100644 kapi-compat/include/sync_mapping_range.h
> 
> diff --git a/Config.make.in b/Config.make.in
> index 1dc4d44..67ee363 100644
> --- a/Config.make.in
> +++ b/Config.make.in
> @@ -59,6 +59,8 @@ EXTRA_CFLAGS += @KAPI_COMPAT_CFLAGS@
>  
>  NO_DELAYED_WORK = @NO_DELAYED_WORK@
>  
> +NO_SYNC_MAPPING_RANGE  = @NO_SYNC_MAPPING_RANGE@
> +
>  OCFS_DEBUG = @OCFS_DEBUG@
>  
>  ifneq ($(OCFS_DEBUG),)
> diff --git a/Makefile b/Makefile
> index b7b86db..3ddb1aa 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -11,7 +11,8 @@ LINUX_INCLUDE_FILES =
>  KAPI_COMPAT_FILES = \
>  	kapi-compat/include/workqueue.h \
>  	kapi-compat/include/compiler.h \
> -	kapi-compat/include/highmem.h
> +	kapi-compat/include/highmem.h \
> +	kapi-compat/include/sync_mapping_range.h
>  
>  PATCH_FILES =
>  
> diff --git a/configure.in b/configure.in
> index 0108f99..72698ae 100644
> --- a/configure.in
> +++ b/configure.in
> @@ -172,6 +172,12 @@ OCFS2_CHECK_KERNEL([zero_user_page() in highmem.h], highmem.h,
>    , highmem_compat_header="highmem.h", [zero_user_page])
>  KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $highmem_compat_header"
>  
> +NO_SYNC_MAPPING_RANGE=
> +OCFS2_CHECK_KERNEL([do_sync_mapping_range() in fs.h], fs.h,
> +  , NO_SYNC_MAPPING_RANGE=yes, [do_sync_mapping_range(])
> +KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS sync_mapping_range.h"
> +AC_SUBST(NO_SYNC_MAPPING_RANGE)
> +
>  # using -include has two advantages:
>  #  the source doesn't need to know to include compat headers
>  #  the compat header file names don't go through the search path
> diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
> index 8bc2dff..737c12a 100644
> --- a/fs/ocfs2/Makefile
> +++ b/fs/ocfs2/Makefile
> @@ -29,6 +29,10 @@ ifdef NO_DELAYED_WORK
>  EXTRA_CFLAGS += -DNO_DELAYED_WORK
>  endif
>  
> +ifdef NO_SYNC_MAPPING_RANGE
> +CFLAGS_alloc.o += -DNO_SYNC_MAPPING_RANGE
> +endif
> +
>  #
>  # Since SUBDIRS means something to kbuild, define them safely.  Do not
>  # include trailing slashes.
> diff --git a/kapi-compat/include/sync_mapping_range.h b/kapi-compat/include/sync_mapping_range.h
> new file mode 100644
> index 0000000..d6e1b30
> --- /dev/null
> +++ b/kapi-compat/include/sync_mapping_range.h
> @@ -0,0 +1,103 @@
> +#ifndef KAPI_SYNC_MAPPING_RANGE_H
> +#define KAPI_SYNC_MAPPING_RANGE_H
> +
> +#ifdef NO_SYNC_MAPPING_RANGE
> +
> +#include <linux/fs.h>
> +#include <linux/types.h>
> +#include <linux/slab.h>
> +#include <linux/highmem.h>
> +#include <linux/swap.h>
> +#include <linux/writeback.h>
> +#include <linux/mpage.h>
> +#include <linux/pagemap.h>
> +
> +
> +int do_writepages(struct address_space *mapping, struct writeback_control *wbc)
> +{
> +	int ret;
> +
> +	if (wbc->nr_to_write <= 0)
> +		return 0;
> +	wbc->for_writepages = 1;
> +	if (mapping->a_ops->writepages)
> +		ret = mapping->a_ops->writepages(mapping, wbc);
> +	else
> +		ret = generic_writepages(mapping, wbc);
> +	wbc->for_writepages = 0;
> +	return ret;
> +}
> +
> +/**
> + * __filemap_fdatawrite_range - start writeback on mapping dirty pages in range
> + * @mapping:	address space structure to write
> + * @start:	offset in bytes where the range starts
> + * @end:	offset in bytes where the range ends (inclusive)
> + * @sync_mode:	enable synchronous operation
> + *
> + * Start writeback against all of a mapping's dirty pages that lie
> + * within the byte offsets <start, end> inclusive.
> + *
> + * If sync_mode is WB_SYNC_ALL then this is a "data integrity" operation, as
> + * opposed to a regular memory cleansing writeback.  The difference between
> + * these two operations is that if a dirty page/buffer is encountered, it must
> + * be waited upon, and not just skipped over.
> + */
> +int __filemap_fdatawrite_range(struct address_space *mapping, loff_t start,
> +				loff_t end, int sync_mode)
> +{
> +	int ret;
> +	struct writeback_control wbc = {
> +		.sync_mode = sync_mode,
> +		.nr_to_write = mapping->nrpages * 2,
> +		.range_start = start,
> +		.range_end = end,
> +	};
> +
> +	if (!mapping_cap_writeback_dirty(mapping))
> +		return 0;
> +
> +	ret = do_writepages(mapping, &wbc);
> +	return ret;
> +}
> +
> +/*
> + * `endbyte' is inclusive
> + */
> +static int do_sync_mapping_range(struct address_space *mapping, loff_t offset,
> +				 loff_t endbyte, unsigned int flags)
> +{
> +	int ret;
> +
> +	if (!mapping) {
> +		ret = -EINVAL;
> +		goto out;
> +	}
> +
> +	ret = 0;
> +	if (flags & SYNC_FILE_RANGE_WAIT_BEFORE) {
> +		ret = wait_on_page_writeback_range(mapping,
> +					offset >> PAGE_CACHE_SHIFT,
> +					endbyte >> PAGE_CACHE_SHIFT);
> +		if (ret < 0)
> +			goto out;
> +	}
> +
> +	if (flags & SYNC_FILE_RANGE_WRITE) {
> +		ret = __filemap_fdatawrite_range(mapping, offset, endbyte,
> +						WB_SYNC_NONE);
> +		if (ret < 0)
> +			goto out;
> +	}
> +
> +	if (flags & SYNC_FILE_RANGE_WAIT_AFTER) {
> +		ret = wait_on_page_writeback_range(mapping,
> +					offset >> PAGE_CACHE_SHIFT,
> +					endbyte >> PAGE_CACHE_SHIFT);
> +	}
> +out:
> +	return ret;
> +}

Shouldn't the function definitions be in a C file? It's pretty heavy for a
header....
	--Mark

--
Mark Fasheh
Principal Software Developer, Oracle
mark.fasheh@oracle.com

^ permalink raw reply	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 07/30] ocfs2: Handle missing vmops->fault()
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 07/30] ocfs2: Handle missing vmops->fault() Sunil Mushran
@ 2008-01-08 13:20   ` Mark Fasheh
  0 siblings, 0 replies; 61+ messages in thread
From: Mark Fasheh @ 2008-01-08 13:20 UTC (permalink / raw)
  To: ocfs2-devel

On Thu, Jan 03, 2008 at 11:19:43AM -0800, Sunil Mushran wrote:
> Commit 54cb8821de07f2ffcd28c380ce9b93d5784b40d7 in mainline introduces
> vmops->fault() which is used to replace vmops->populate() and vmops->nopage().
> This patch allows one to build ocfs2 with kernels having/not having this
> change.
> 
> Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
> Signed-off-by: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>

--
Mark Fasheh
Principal Software Developer, Oracle
mark.fasheh@oracle.com

^ permalink raw reply	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 08/30] ocfs2: Handle struct f_path in struct file
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 08/30] ocfs2: Handle struct f_path in struct file Sunil Mushran
@ 2008-01-08 13:22   ` Mark Fasheh
  0 siblings, 0 replies; 61+ messages in thread
From: Mark Fasheh @ 2008-01-08 13:22 UTC (permalink / raw)
  To: ocfs2-devel

On Thu, Jan 03, 2008 at 11:19:44AM -0800, Sunil Mushran wrote:
> Commit 0f7fc9e4d03987fe29f6dd4aa67e4c56eb7ecb05 in mainline added
> struct path in struct file. This patch allows one to build ocfs2 with
> kernels having/not having that change.
> 
> Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
> Signed-off-by: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>

--
Mark Fasheh
Principal Software Developer, Oracle
mark.fasheh@oracle.com

^ permalink raw reply	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 06/30] ocfs2: Include do_sync_mapping_range() from mainline
  2008-01-08 13:20   ` Mark Fasheh
@ 2008-01-08 13:23     ` Sunil Mushran
  2008-01-08 14:49       ` Mark Fasheh
  0 siblings, 1 reply; 61+ messages in thread
From: Sunil Mushran @ 2008-01-08 13:23 UTC (permalink / raw)
  To: ocfs2-devel

FLAGS_alloc.o += -DNO_SYNC_MAPPING_RANGE

It's only included with alloc.c.


Mark Fasheh wrote:
> On Thu, Jan 03, 2008 at 11:19:42AM -0800, Sunil Mushran wrote:
>   
>> Commit 5b04aa3a64f854244bc40a6f528176ed50b5c4f6 introduced export symbol
>> do_sync_mapping_range(). This patch allows one to build ocfs2 with kernels
>> having/not having that change.
>>
>> Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
>> Signed-off-by: Joel Becker <joel.becker@oracle.com>
>> ---
>>  Config.make.in                           |    2 +
>>  Makefile                                 |    3 +-
>>  configure.in                             |    6 ++
>>  fs/ocfs2/Makefile                        |    4 +
>>  kapi-compat/include/sync_mapping_range.h |  103 ++++++++++++++++++++++++++++++
>>  5 files changed, 117 insertions(+), 1 deletions(-)
>>  create mode 100644 kapi-compat/include/sync_mapping_range.h
>>
>> diff --git a/Config.make.in b/Config.make.in
>> index 1dc4d44..67ee363 100644
>> --- a/Config.make.in
>> +++ b/Config.make.in
>> @@ -59,6 +59,8 @@ EXTRA_CFLAGS += @KAPI_COMPAT_CFLAGS@
>>  
>>  NO_DELAYED_WORK = @NO_DELAYED_WORK@
>>  
>> +NO_SYNC_MAPPING_RANGE  = @NO_SYNC_MAPPING_RANGE@
>> +
>>  OCFS_DEBUG = @OCFS_DEBUG@
>>  
>>  ifneq ($(OCFS_DEBUG),)
>> diff --git a/Makefile b/Makefile
>> index b7b86db..3ddb1aa 100644
>> --- a/Makefile
>> +++ b/Makefile
>> @@ -11,7 +11,8 @@ LINUX_INCLUDE_FILES =
>>  KAPI_COMPAT_FILES = \
>>  	kapi-compat/include/workqueue.h \
>>  	kapi-compat/include/compiler.h \
>> -	kapi-compat/include/highmem.h
>> +	kapi-compat/include/highmem.h \
>> +	kapi-compat/include/sync_mapping_range.h
>>  
>>  PATCH_FILES =
>>  
>> diff --git a/configure.in b/configure.in
>> index 0108f99..72698ae 100644
>> --- a/configure.in
>> +++ b/configure.in
>> @@ -172,6 +172,12 @@ OCFS2_CHECK_KERNEL([zero_user_page() in highmem.h], highmem.h,
>>    , highmem_compat_header="highmem.h", [zero_user_page])
>>  KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $highmem_compat_header"
>>  
>> +NO_SYNC_MAPPING_RANGE=
>> +OCFS2_CHECK_KERNEL([do_sync_mapping_range() in fs.h], fs.h,
>> +  , NO_SYNC_MAPPING_RANGE=yes, [do_sync_mapping_range(])
>> +KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS sync_mapping_range.h"
>> +AC_SUBST(NO_SYNC_MAPPING_RANGE)
>> +
>>  # using -include has two advantages:
>>  #  the source doesn't need to know to include compat headers
>>  #  the compat header file names don't go through the search path
>> diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
>> index 8bc2dff..737c12a 100644
>> --- a/fs/ocfs2/Makefile
>> +++ b/fs/ocfs2/Makefile
>> @@ -29,6 +29,10 @@ ifdef NO_DELAYED_WORK
>>  EXTRA_CFLAGS += -DNO_DELAYED_WORK
>>  endif
>>  
>> +ifdef NO_SYNC_MAPPING_RANGE
>> +CFLAGS_alloc.o += -DNO_SYNC_MAPPING_RANGE
>> +endif
>> +
>>  #
>>  # Since SUBDIRS means something to kbuild, define them safely.  Do not
>>  # include trailing slashes.
>> diff --git a/kapi-compat/include/sync_mapping_range.h b/kapi-compat/include/sync_mapping_range.h
>> new file mode 100644
>> index 0000000..d6e1b30
>> --- /dev/null
>> +++ b/kapi-compat/include/sync_mapping_range.h
>> @@ -0,0 +1,103 @@
>> +#ifndef KAPI_SYNC_MAPPING_RANGE_H
>> +#define KAPI_SYNC_MAPPING_RANGE_H
>> +
>> +#ifdef NO_SYNC_MAPPING_RANGE
>> +
>> +#include <linux/fs.h>
>> +#include <linux/types.h>
>> +#include <linux/slab.h>
>> +#include <linux/highmem.h>
>> +#include <linux/swap.h>
>> +#include <linux/writeback.h>
>> +#include <linux/mpage.h>
>> +#include <linux/pagemap.h>
>> +
>> +
>> +int do_writepages(struct address_space *mapping, struct writeback_control *wbc)
>> +{
>> +	int ret;
>> +
>> +	if (wbc->nr_to_write <= 0)
>> +		return 0;
>> +	wbc->for_writepages = 1;
>> +	if (mapping->a_ops->writepages)
>> +		ret = mapping->a_ops->writepages(mapping, wbc);
>> +	else
>> +		ret = generic_writepages(mapping, wbc);
>> +	wbc->for_writepages = 0;
>> +	return ret;
>> +}
>> +
>> +/**
>> + * __filemap_fdatawrite_range - start writeback on mapping dirty pages in range
>> + * @mapping:	address space structure to write
>> + * @start:	offset in bytes where the range starts
>> + * @end:	offset in bytes where the range ends (inclusive)
>> + * @sync_mode:	enable synchronous operation
>> + *
>> + * Start writeback against all of a mapping's dirty pages that lie
>> + * within the byte offsets <start, end> inclusive.
>> + *
>> + * If sync_mode is WB_SYNC_ALL then this is a "data integrity" operation, as
>> + * opposed to a regular memory cleansing writeback.  The difference between
>> + * these two operations is that if a dirty page/buffer is encountered, it must
>> + * be waited upon, and not just skipped over.
>> + */
>> +int __filemap_fdatawrite_range(struct address_space *mapping, loff_t start,
>> +				loff_t end, int sync_mode)
>> +{
>> +	int ret;
>> +	struct writeback_control wbc = {
>> +		.sync_mode = sync_mode,
>> +		.nr_to_write = mapping->nrpages * 2,
>> +		.range_start = start,
>> +		.range_end = end,
>> +	};
>> +
>> +	if (!mapping_cap_writeback_dirty(mapping))
>> +		return 0;
>> +
>> +	ret = do_writepages(mapping, &wbc);
>> +	return ret;
>> +}
>> +
>> +/*
>> + * `endbyte' is inclusive
>> + */
>> +static int do_sync_mapping_range(struct address_space *mapping, loff_t offset,
>> +				 loff_t endbyte, unsigned int flags)
>> +{
>> +	int ret;
>> +
>> +	if (!mapping) {
>> +		ret = -EINVAL;
>> +		goto out;
>> +	}
>> +
>> +	ret = 0;
>> +	if (flags & SYNC_FILE_RANGE_WAIT_BEFORE) {
>> +		ret = wait_on_page_writeback_range(mapping,
>> +					offset >> PAGE_CACHE_SHIFT,
>> +					endbyte >> PAGE_CACHE_SHIFT);
>> +		if (ret < 0)
>> +			goto out;
>> +	}
>> +
>> +	if (flags & SYNC_FILE_RANGE_WRITE) {
>> +		ret = __filemap_fdatawrite_range(mapping, offset, endbyte,
>> +						WB_SYNC_NONE);
>> +		if (ret < 0)
>> +			goto out;
>> +	}
>> +
>> +	if (flags & SYNC_FILE_RANGE_WAIT_AFTER) {
>> +		ret = wait_on_page_writeback_range(mapping,
>> +					offset >> PAGE_CACHE_SHIFT,
>> +					endbyte >> PAGE_CACHE_SHIFT);
>> +	}
>> +out:
>> +	return ret;
>> +}
>>     
>
> Shouldn't the function definitions be in a C file? It's pretty heavy for a
> header....
> 	--Mark
>
> --
> Mark Fasheh
> Principal Software Developer, Oracle
> mark.fasheh@oracle.com
>   

^ permalink raw reply	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 11/30] ocfs2: Add helper drop_nlink
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 11/30] ocfs2: Add helper drop_nlink Sunil Mushran
@ 2008-01-08 13:24   ` Mark Fasheh
  0 siblings, 0 replies; 61+ messages in thread
From: Mark Fasheh @ 2008-01-08 13:24 UTC (permalink / raw)
  To: ocfs2-devel

On Thu, Jan 03, 2008 at 11:19:47AM -0800, Sunil Mushran wrote:
> Commit 9a53c3a783c2fa9b969628e65695c11c3e51e673 in mainline added
> helper drop_nlink(). This patch allows one to build ocfs2 with kernels
> having/not having that change.
> 
> Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
> Signed-off-by: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>

--
Mark Fasheh
Principal Software Developer, Oracle
mark.fasheh@oracle.com

^ permalink raw reply	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 10/30] ocfs2: Add helper inc_nlink
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 10/30] ocfs2: Add helper inc_nlink Sunil Mushran
@ 2008-01-08 13:24   ` Mark Fasheh
  0 siblings, 0 replies; 61+ messages in thread
From: Mark Fasheh @ 2008-01-08 13:24 UTC (permalink / raw)
  To: ocfs2-devel

On Thu, Jan 03, 2008 at 11:19:46AM -0800, Sunil Mushran wrote:
> Commit d8c76e6f45c111c32a4b3e50a2adc9210737b0d8 in mainline introduced
> helper inc_nlink(). This patch allows one to build ocfs2 with kernels
> having/not having that change.
> 
> Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
> Signed-off-by: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>

--
Mark Fasheh
Principal Software Developer, Oracle
mark.fasheh@oracle.com

^ permalink raw reply	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 09/30] ocfs2: Define enum umh_wait
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 09/30] ocfs2: Define enum umh_wait Sunil Mushran
@ 2008-01-08 13:25   ` Mark Fasheh
  0 siblings, 0 replies; 61+ messages in thread
From: Mark Fasheh @ 2008-01-08 13:25 UTC (permalink / raw)
  To: ocfs2-devel

On Thu, Jan 03, 2008 at 11:19:45AM -0800, Sunil Mushran wrote:
> Commit 86313c488a6848b7ec2ba04e74f25f79dd32a0b7 in mainline introduced
> enum umh_wait. This patch allows one to build ocfs2 with kernels having/
> not having that change.
> 
> Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
> Signed-off-by: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>

--
Mark Fasheh
Principal Software Developer, Oracle
mark.fasheh@oracle.com

^ permalink raw reply	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 06/30] ocfs2: Include do_sync_mapping_range() from mainline
  2008-01-08 13:23     ` Sunil Mushran
@ 2008-01-08 14:49       ` Mark Fasheh
  0 siblings, 0 replies; 61+ messages in thread
From: Mark Fasheh @ 2008-01-08 14:49 UTC (permalink / raw)
  To: ocfs2-devel

On Tue, Jan 08, 2008 at 01:21:51PM -0800, Sunil Mushran wrote:
> FLAGS_alloc.o += -DNO_SYNC_MAPPING_RANGE
>
> It's only included with alloc.c.

And if we ever need to call it from another file?
	--Mark

--
Mark Fasheh
Principal Software Developer, Oracle
mark.fasheh@oracle.com

^ permalink raw reply	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 12/30] ocfs2: Handle missing dtors in kmem_cache_create()
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 12/30] ocfs2: Handle missing dtors in kmem_cache_create() Sunil Mushran
@ 2008-01-08 15:41   ` Mark Fasheh
  0 siblings, 0 replies; 61+ messages in thread
From: Mark Fasheh @ 2008-01-08 15:41 UTC (permalink / raw)
  To: ocfs2-devel

On Thu, Jan 03, 2008 at 11:19:48AM -0800, Sunil Mushran wrote:
> Commit 20c2df83d25c6a95affe6157a4c9cac4cf5ffaac removed the dtor arg
> from kmem_cache_create(). This patch allows one to build ocfs2 with
> kernels having/not having this change.
> 
> Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
> Signed-off-by: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>

--
Mark Fasheh
Principal Software Developer, Oracle
mark.fasheh@oracle.com

^ permalink raw reply	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 14/30] ocfs2: Handle enum value FS_OCFS2
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 14/30] ocfs2: Handle enum value FS_OCFS2 Sunil Mushran
@ 2008-01-08 15:43   ` Mark Fasheh
  0 siblings, 0 replies; 61+ messages in thread
From: Mark Fasheh @ 2008-01-08 15:43 UTC (permalink / raw)
  To: ocfs2-devel

On Thu, Jan 03, 2008 at 11:19:50AM -0800, Sunil Mushran wrote:
> Commit 0e03036c97b70b2602f7dedaa3a223ed7563c2c9 in mainline registers
> ocfs2 sysctl (FS_OCFS2) number under CTL_FS. This patch allows one to
> build ocfs2 with kernels having/not having this change.
> 
> Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
> Signed-off-by: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>

--
Mark Fasheh
Principal Software Developer, Oracle
mark.fasheh@oracle.com

^ permalink raw reply	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 16/30] ocfs2: Handle different prototypes of register_sysctl_table()
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 16/30] ocfs2: Handle different prototypes of register_sysctl_table() Sunil Mushran
@ 2008-01-08 15:45   ` Mark Fasheh
  0 siblings, 0 replies; 61+ messages in thread
From: Mark Fasheh @ 2008-01-08 15:45 UTC (permalink / raw)
  To: ocfs2-devel

On Thu, Jan 03, 2008 at 11:19:52AM -0800, Sunil Mushran wrote:
> Commit 0b4d414714f0d2f922d39424b0c5c82ad900a381 in mainline removes the
> insert_at_head argument from register_sysctl_table(). This patch allows
> building ocfs2 with kernels having/not having this change.
> 
> Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
> Signed-off-by: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>

--
Mark Fasheh
Principal Software Developer, Oracle
mark.fasheh@oracle.com

^ permalink raw reply	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 17/30] ocfs2: Handle su_mutex in struct configfs_subsystem
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 17/30] ocfs2: Handle su_mutex in struct configfs_subsystem Sunil Mushran
@ 2008-01-08 15:45   ` Mark Fasheh
  0 siblings, 0 replies; 61+ messages in thread
From: Mark Fasheh @ 2008-01-08 15:45 UTC (permalink / raw)
  To: ocfs2-devel

On Thu, Jan 03, 2008 at 11:19:53AM -0800, Sunil Mushran wrote:
> Commit e6bd07aee739566803425acdbf5cdb29919164e1 in mainline changed a
> semaphore into a mutex in struct configfs_subsystem. This patch allows
> building ocfs2 with kernels having/not having this change.
> 
> Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
> Signed-off-by: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>

--
Mark Fasheh
Principal Software Developer, Oracle
mark.fasheh@oracle.com

^ permalink raw reply	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 15/30] ocfs2: Handles configfs_depend_item() and configfs_undepend_item()
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 15/30] ocfs2: Handles configfs_depend_item() and configfs_undepend_item() Sunil Mushran
@ 2008-01-08 15:45   ` Mark Fasheh
  0 siblings, 0 replies; 61+ messages in thread
From: Mark Fasheh @ 2008-01-08 15:45 UTC (permalink / raw)
  To: ocfs2-devel

On Thu, Jan 03, 2008 at 11:19:51AM -0800, Sunil Mushran wrote:
> Commit 631d1febab8e546e3bb800bdfe2c212b8adf87de in mainline introduces
> two new calls in configfs, configfs_depend_item() and configfs_undepend_item().
> This patch allows one to build ocfs2 with kernels having/not having
> this change.
> 
> Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
> Signed-off-by: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>

--
Mark Fasheh
Principal Software Developer, Oracle
mark.fasheh@oracle.com

^ permalink raw reply	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 20/30] ocfs2: Handle missing iop->fallocate()
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 20/30] ocfs2: Handle missing iop->fallocate() Sunil Mushran
@ 2008-01-08 15:57   ` Mark Fasheh
  0 siblings, 0 replies; 61+ messages in thread
From: Mark Fasheh @ 2008-01-08 15:57 UTC (permalink / raw)
  To: ocfs2-devel

On Thu, Jan 03, 2008 at 11:19:56AM -0800, Sunil Mushran wrote:
> Commit 97ac73506c0ba93f30239bb57b4cfc5d73e68a62 in mainline introduces a
> new iop, fallocate(). This patch allows one to build ocfs2 with kernels
> having/not having this change.
> 
> Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
> Signed-off-by: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>

--
Mark Fasheh
Principal Software Developer, Oracle
mark.fasheh@oracle.com

^ permalink raw reply	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 19/30] ocfs2: Handle missing macro is_owner_or_cap()
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 19/30] ocfs2: Handle missing macro is_owner_or_cap() Sunil Mushran
@ 2008-01-08 15:57   ` Mark Fasheh
  0 siblings, 0 replies; 61+ messages in thread
From: Mark Fasheh @ 2008-01-08 15:57 UTC (permalink / raw)
  To: ocfs2-devel

On Thu, Jan 03, 2008 at 11:19:55AM -0800, Sunil Mushran wrote:
> Commit 3bd858ab1c451725c07a805dcb315215dc85b86e in mainline introduces
> helper macro is_owner_or_cap(). This patch allows one to build ocfs2 with
> kernels having/not having this change.
> 
> Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
> Signed-off-by: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>

--
Mark Fasheh
Principal Software Developer, Oracle
mark.fasheh@oracle.com

^ permalink raw reply	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 21/30] ocfs2: Handle splice.h
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 21/30] ocfs2: Handle splice.h Sunil Mushran
@ 2008-01-08 16:01   ` Mark Fasheh
  0 siblings, 0 replies; 61+ messages in thread
From: Mark Fasheh @ 2008-01-08 16:01 UTC (permalink / raw)
  To: ocfs2-devel

On Thu, Jan 03, 2008 at 11:19:57AM -0800, Sunil Mushran wrote:
> Commit d6b29d7cee064f28ca097e906de7453541351095 in mainline moves the splice
> structures from pipe_fs_i.h to splice.h. This patch allows one to build
> ocfs2 with kernels having/not having this change.
> 
> Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
> Signed-off-by: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>

--
Mark Fasheh
Principal Software Developer, Oracle
mark.fasheh@oracle.com

^ permalink raw reply	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 22/30] ocfs2: Handle missing macro MNT_RELATIME
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 22/30] ocfs2: Handle missing macro MNT_RELATIME Sunil Mushran
@ 2008-01-08 16:03   ` Mark Fasheh
  0 siblings, 0 replies; 61+ messages in thread
From: Mark Fasheh @ 2008-01-08 16:03 UTC (permalink / raw)
  To: ocfs2-devel

On Thu, Jan 03, 2008 at 11:19:58AM -0800, Sunil Mushran wrote:
> Commit 47ae32d6a54955a041cdc30b06d0bb16e75f68d5 in mainline introduced
> macro MNT_RELATIME to limit atime updates to frequency specified in the
> mount option. This patch allows one to build ocfs2 with kernels having/not
> having this change.
> 
> It should be noted that the functionality will not be available on kernels
> not having the macro as the vfs support will be missing.

I bet we can conditionally define our own relatime option in here though -
Ocfs2 doesn't really make use of most of the vfs support, so it's not
necessary.

By the way, relatime is the default on the latest fedora releases, so people
_do_ want this feature.
	--Mark

--
Mark Fasheh
Principal Software Developer, Oracle
mark.fasheh@oracle.com

^ permalink raw reply	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 23/30] ocfs2: Handles missing export should_remove_suid()
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 23/30] ocfs2: Handles missing export should_remove_suid() Sunil Mushran
@ 2008-01-08 16:05   ` Mark Fasheh
  0 siblings, 0 replies; 61+ messages in thread
From: Mark Fasheh @ 2008-01-08 16:05 UTC (permalink / raw)
  To: ocfs2-devel

On Thu, Jan 03, 2008 at 11:19:59AM -0800, Sunil Mushran wrote:
> Commits 01de85e057328ecbef36e108673b1e81059d54c1 and
> d23a147bb6e8d467e8df73b6589888717da3b9ce in mainline added and exported
> symbol should_remove_suid(). This patch allows one to build ocfs2 with
> kernels having/not having these changes.
> 
> Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
> Signed-off-by: Joel Becker <joel.becker@oracle.com>
> ---
>  Config.make.in                           |    1 +
>  Makefile                                 |    3 +-
>  configure.in                             |    6 +++++
>  fs/ocfs2/Makefile                        |    4 +++
>  kapi-compat/include/should_remove_suid.h |   37 ++++++++++++++++++++++++++++++
>  5 files changed, 50 insertions(+), 1 deletions(-)
>  create mode 100644 kapi-compat/include/should_remove_suid.h
> 
> diff --git a/Config.make.in b/Config.make.in
> index a912f40..53792d0 100644
> --- a/Config.make.in
> +++ b/Config.make.in
> @@ -68,6 +68,7 @@ NO_SU_MUTEX_IN_STRUCT_CONFIGFS_SUBSYSTEM = @NO_SU_MUTEX_IN_STRUCT_CONFIGFS_SUBSY
>  STRUCT_SUBSYSTEM_DEFINED = @STRUCT_SUBSYSTEM_DEFINED@
>  NO_FALLOCATE = @NO_FALLOCATE@
>  NO_SPLICE_HEADER = @NO_SPLICE_HEADER@
> +NO_SHOULD_REMOVE_SUID = @NO_SHOULD_REMOVE_SUID@
>  
>  OCFS_DEBUG = @OCFS_DEBUG@
>  
> diff --git a/Makefile b/Makefile
> index ea4b979..0c17fec 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -25,7 +25,8 @@ KAPI_COMPAT_FILES = \
>  	kapi-compat/include/su_mutex.h \
>  	kapi-compat/include/kobject.h \
>  	kapi-compat/include/cap.h \
> -	kapi-compat/include/relatime.h
> +	kapi-compat/include/relatime.h \
> +	kapi-compat/include/should_remove_suid.h
>  
>  PATCH_FILES =
>  
> diff --git a/configure.in b/configure.in
> index a792b2f..cd0c299 100644
> --- a/configure.in
> +++ b/configure.in
> @@ -263,6 +263,12 @@ OCFS2_CHECK_KERNEL([MNT_RELATIME in mount.h], mount.h,
>    , relatime_compat_header="relatime.h", [^#define MNT_RELATIME])
>  KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $relatime_compat_header"
>  
> +NO_SHOULD_REMOVE_SUID=
> +OCFS2_CHECK_KERNEL([should_remove_suid() in fs.h], fs.h,
> +  , NO_SHOULD_REMOVE_SUID=yes, [should_remove_suid()])
> +AC_SUBST(NO_SHOULD_REMOVE_SUID)
> +KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS should_remove_suid.h"
> +
>  # using -include has two advantages:
>  #  the source doesn't need to know to include compat headers
>  #  the compat header file names don't go through the search path
> diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
> index 58be004..cecd610 100644
> --- a/fs/ocfs2/Makefile
> +++ b/fs/ocfs2/Makefile
> @@ -57,6 +57,10 @@ ifdef NO_SPLICE_HEADER
>  EXTRA_CFLAGS += -DNO_SPLICE_HEADER
>  endif
>  
> +ifdef NO_SHOULD_REMOVE_SUID
> +CFLAGS_file.o += -DNO_SHOULD_REMOVE_SUID
> +endif
> +
>  #
>  # Since SUBDIRS means something to kbuild, define them safely.  Do not
>  # include trailing slashes.
> diff --git a/kapi-compat/include/should_remove_suid.h b/kapi-compat/include/should_remove_suid.h
> new file mode 100644
> index 0000000..4c9e598
> --- /dev/null
> +++ b/kapi-compat/include/should_remove_suid.h
> @@ -0,0 +1,37 @@
> +#ifndef KAP_SHOULD_REMOVE_SUID_H
> +#define KAP_SHOULD_REMOVE_SUID_H
> +
> +#ifdef NO_SHOULD_REMOVE_SUID
> +
> +#include <linux/fs.h>
> +
> +/*
> + * The logic we want is
> + *
> + *	if suid or (sgid and xgrp)
> + *		remove privs
> + */
> +int should_remove_suid(struct dentry *dentry)

Why not just make this should be static inline and include it if generally
needed?
	--Mark

--
Mark Fasheh
Principal Software Developer, Oracle
mark.fasheh@oracle.com

^ permalink raw reply	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 25/30] ocfs2: Handle missing const s_op in struct super_block
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 25/30] ocfs2: Handle missing const s_op in struct super_block Sunil Mushran
@ 2008-01-08 16:13   ` Mark Fasheh
  0 siblings, 0 replies; 61+ messages in thread
From: Mark Fasheh @ 2008-01-08 16:13 UTC (permalink / raw)
  To: ocfs2-devel

On Thu, Jan 03, 2008 at 11:20:01AM -0800, Sunil Mushran wrote:
> Commit ee9b6d61a2a43c5952eb43283f8db284a4e70b8a in mainline marks
> struct super_operations as a const in struct super_block. This patch
> allows one to build with kernels having/not having this change.
> 
> Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
> Signed-off-by: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>

--
Mark Fasheh
Principal Software Developer, Oracle
mark.fasheh@oracle.com

^ permalink raw reply	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 26/30] ocfs2: Handle missing const struct inode_operations in struct inode
  2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 26/30] ocfs2: Handle missing const struct inode_operations in struct inode Sunil Mushran
@ 2008-01-08 16:15   ` Mark Fasheh
  0 siblings, 0 replies; 61+ messages in thread
From: Mark Fasheh @ 2008-01-08 16:15 UTC (permalink / raw)
  To: ocfs2-devel

On Thu, Jan 03, 2008 at 11:20:02AM -0800, Sunil Mushran wrote:
> Commit c5ef1c42c51b1b5b4a401a6517bdda30933ddbaf in mainline marks struct
> inode_operations in struct inode as a const. This patch allows one to build
> ocfs2 with kernels having/not having this change.
> 
> Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
> Signed-off-by: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>

--
Mark Fasheh
Principal Software Developer, Oracle
mark.fasheh@oracle.com

^ permalink raw reply	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 27/30] ocfs2: Handle missing vectorized fileops aio_read() and aio_write()
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 27/30] ocfs2: Handle missing vectorized fileops aio_read() and aio_write() Sunil Mushran
@ 2008-01-08 16:17   ` Mark Fasheh
  0 siblings, 0 replies; 61+ messages in thread
From: Mark Fasheh @ 2008-01-08 16:17 UTC (permalink / raw)
  To: ocfs2-devel

On Thu, Jan 03, 2008 at 11:20:03AM -0800, Sunil Mushran wrote:
> Commit 027445c37282bc1ed26add45e573ad2d3e4860a5 in mainline vectorized
> fileops aio_read() and aio_write(). This patch allows one to build ocfs2
> with kernels having/not having this change.
> 
> Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
> Signed-off-by: Joel Becker <joel.becker@oracle.com>
> ---
>  Config.make.in               |    1 +
>  Makefile                     |    3 +-
>  configure.in                 |    6 ++++
>  fs/ocfs2/Makefile            |    4 ++
>  fs/ocfs2/file.c              |    6 ++--
>  kapi-compat/include/aiovec.h |   68 ++++++++++++++++++++++++++++++++++++++++++
>  6 files changed, 84 insertions(+), 4 deletions(-)
>  create mode 100644 kapi-compat/include/aiovec.h
> 
> diff --git a/Config.make.in b/Config.make.in
> index 4b2d1c5..c6deb57 100644
> --- a/Config.make.in
> +++ b/Config.make.in
> @@ -72,6 +72,7 @@ NO_SHOULD_REMOVE_SUID = @NO_SHOULD_REMOVE_SUID@
>  NO_GENERIC_SEGMENT_CHECKS = @NO_GENERIC_SEGMENT_CHECKS@
>  SOP_IS_NOT_CONST = @SOP_IS_NOT_CONST@
>  IOP_IS_NOT_CONST = @IOP_IS_NOT_CONST@
> +NO_VECTORIZED_AIO = @NO_VECTORIZED_AIO@
>  
>  OCFS_DEBUG = @OCFS_DEBUG@
>  
> diff --git a/Makefile b/Makefile
> index 9427ce6..a3a0c9d 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -27,7 +27,8 @@ KAPI_COMPAT_FILES = \
>  	kapi-compat/include/cap.h \
>  	kapi-compat/include/relatime.h \
>  	kapi-compat/include/should_remove_suid.h \
> -	kapi-compat/include/generic_segment_checks.h
> +	kapi-compat/include/generic_segment_checks.h \
> +	kapi-compat/include/aiovec.h
>  
>  PATCH_FILES =
>  
> diff --git a/configure.in b/configure.in
> index a6f4336..8c30910 100644
> --- a/configure.in
> +++ b/configure.in
> @@ -285,6 +285,12 @@ OCFS2_CHECK_KERNEL([i_op declared as const in struct inode in fs.h], fs.h,
>    , IOP_IS_NOT_CONST=yes, [^.*const struct inode_operations.*\*i_op;])
>  AC_SUBST(IOP_IS_NOT_CONST)
>  
> +NO_VECTORIZED_AIO=
> +OCFS2_CHECK_KERNEL([aio_read() in struct file_operations using iovec in fs.h], fs.h,
> +  , NO_VECTORIZED_AIO=yes, [ssize_t (\*aio_read) (struct kiocb \*, const struct iovec \*, unsigned long, loff_t);])
> +AC_SUBST(NO_VECTORIZED_AIO)
> +KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS aiovec.h"
> +
>  # using -include has two advantages:
>  #  the source doesn't need to know to include compat headers
>  #  the compat header file names don't go through the search path
> diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
> index a894c45..1646a9b 100644
> --- a/fs/ocfs2/Makefile
> +++ b/fs/ocfs2/Makefile
> @@ -73,6 +73,10 @@ ifdef IOP_IS_NOT_CONST
>  EXTRA_CFLAGS += -DIOP_IS_NOT_CONST
>  endif
>  
> +ifdef NO_VECTORIZED_AIO
> +CFLAGS_file.o += -DNO_VECTORIZED_AIO
> +endif
> +
>  #
>  # Since SUBDIRS means something to kbuild, define them safely.  Do not
>  # include trailing slashes.
> diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
> index a19322e..62040aa 100644
> --- a/fs/ocfs2/file.c
> +++ b/fs/ocfs2/file.c
> @@ -2017,7 +2017,7 @@ out:
>  	return total ? total : ret;
>  }
>  
> -static ssize_t ocfs2_file_aio_write(struct kiocb *iocb,
> +static ssize_t __ocfs2_file_aio_write(struct kiocb *iocb,
>  				    const struct iovec *iov,
>  				    unsigned long nr_segs,
>  				    loff_t pos)
> @@ -2322,7 +2322,7 @@ bail:
>  	return ret;
>  }
>  
> -static ssize_t ocfs2_file_aio_read(struct kiocb *iocb,
> +static ssize_t __ocfs2_file_aio_read(struct kiocb *iocb,
>  				   const struct iovec *iov,
>  				   unsigned long nr_segs,
>  				   loff_t pos)
> @@ -2376,7 +2376,7 @@ static ssize_t ocfs2_file_aio_read(struct kiocb *iocb,
>  	}
>  	ocfs2_meta_unlock(inode, lock_level);
>  
> -	ret = generic_file_aio_read(iocb, iov, nr_segs, iocb->ki_pos);
> +	ret = kapi_generic_file_aio_read(iocb, iov, nr_segs, iocb->ki_pos);
>  	if (ret == -EINVAL)
>  		mlog(ML_ERROR, "generic_file_aio_read returned -EINVAL\n");
>  
> diff --git a/kapi-compat/include/aiovec.h b/kapi-compat/include/aiovec.h
> new file mode 100644
> index 0000000..e6cb3fb
> --- /dev/null
> +++ b/kapi-compat/include/aiovec.h
> @@ -0,0 +1,68 @@
> +#ifndef KAPI_AIOVEC_H
> +#define KAPI_AIOVEC_H
> +
> +#ifdef NO_VECTORIZED_AIO
> +
> +#include <linux/fs.h>
> +#include <linux/uio.h>
> +
> +static ssize_t kapi_generic_file_aio_read(struct kiocb *iocb,
> +					  const struct iovec *iov,
> +					  unsigned long nr_segs,
> +					  loff_t pos)
> +{
> +	BUG_ON(nr_segs != 1);
> +	return generic_file_aio_read(iocb, iov->iov_base, iov->iov_len, pos);
> +}
> +
> +static ssize_t __ocfs2_file_aio_read(struct kiocb *iocb,
> +				     const struct iovec *iov,
> +				     unsigned long nr_segs,
> +				     loff_t pos);
> +
> +static ssize_t ocfs2_file_aio_read(struct kiocb *iocb,
> +				   char __user *buf,
> +				   size_t buflen,
> +				   loff_t pos)
> +{
> +	struct iovec iov_local = { .iov_base = (void __user *)buf,
> +				   .iov_len  = buflen };
> +	const struct iovec *iov = &iov_local;
> +	unsigned long nr_segs = 1;
> +
> +	return __ocfs2_file_aio_read(iocb, iov, nr_segs, pos);
> +}
> +
> +static ssize_t __ocfs2_file_aio_write(struct kiocb *iocb,
> +				      const struct iovec *iov,
> +				      unsigned long nr_segs,
> +				      loff_t pos);
> +
> +static ssize_t ocfs2_file_aio_write(struct kiocb *iocb,
> +				    const char __user *buf,
> +				    size_t buflen,
> +				    loff_t pos)
> +{
> +	struct iovec iov_local = { .iov_base = (void __user *)buf,
> +				   .iov_len  = buflen };
> +	const struct iovec *iov = &iov_local;
> +	unsigned long nr_segs = 1;
> +
> +	iocb->ki_left = buflen;
> +	return __ocfs2_file_aio_write(iocb, iov, nr_segs, pos);
> +}
> +
> +#else	/* ! NO_VECTORIZED_AIO */
> +
> +#define kapi_generic_file_aio_read(a, b, c, d) \
> +			generic_file_aio_read(a, b, c, d)
> +
> +#define ocfs2_file_aio_read(a, b, c, d) \
> +			__ocfs2_file_aio_read(a, b, c, d)
> +
> +#define ocfs2_file_aio_write(a, b, c, d) \
> +			__ocfs2_file_aio_write(a, b, c, d)

ocfs2_file_aio_read and ocfs2_file_aio_write are pointed to by the
operations struct. Does this still compile and work against a 2.6.24 kernel?
	--Mark

--
Mark Fasheh
Principal Software Developer, Oracle
mark.fasheh@oracle.com

^ permalink raw reply	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 28/30] ocfs2: Handle missing __splice_from_pipe()
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 28/30] ocfs2: Handle missing __splice_from_pipe() Sunil Mushran
@ 2008-01-08 16:19   ` Mark Fasheh
  0 siblings, 0 replies; 61+ messages in thread
From: Mark Fasheh @ 2008-01-08 16:19 UTC (permalink / raw)
  To: ocfs2-devel

On Thu, Jan 03, 2008 at 11:20:04AM -0800, Sunil Mushran wrote:
> Commit c66ab6fa705e1b2887a6d9246b798bdc526839e2 in mainline introduced
> __splice_from_pipe(). This patch allows one to build ocfs2 with kernels
> having/not having this change.
> 
> Note: This patch disables splice io for kernels not providing
> __splice_from_pipe(). We will later add a patch to enable splice
> io with such kernels too.
> 
> Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
> Signed-off-by: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>

--
Mark Fasheh
Principal Software Developer, Oracle
mark.fasheh@oracle.com

^ permalink raw reply	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 29/30] ocfs2: Handle older prototype of bi_end_io_t
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 29/30] ocfs2: Handle older prototype of bi_end_io_t Sunil Mushran
@ 2008-01-08 16:20   ` Mark Fasheh
  0 siblings, 0 replies; 61+ messages in thread
From: Mark Fasheh @ 2008-01-08 16:20 UTC (permalink / raw)
  To: ocfs2-devel

On Thu, Jan 03, 2008 at 11:20:05AM -0800, Sunil Mushran wrote:
> Commit 6712ecf8f648118c3363c142196418f89a510b90 in mainline
> dropped 'size' argument from bi_end_io(). This patch allows
> one to build ocfs2 with kernels having/not having this change.
> 
> Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
> Signed-off-by: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>

--
Mark Fasheh
Principal Software Developer, Oracle
mark.fasheh@oracle.com

^ permalink raw reply	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 30/30] ocfs2: Handle missing exportfs.h
  2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 30/30] ocfs2: Handle missing exportfs.h Sunil Mushran
@ 2008-01-08 16:22   ` Mark Fasheh
  0 siblings, 0 replies; 61+ messages in thread
From: Mark Fasheh @ 2008-01-08 16:22 UTC (permalink / raw)
  To: ocfs2-devel

On Thu, Jan 03, 2008 at 11:20:06AM -0800, Sunil Mushran wrote:
> Commit a569425512253992cc64ebf8b6d00a62f986db3e in mainline
> moved struct export_operation from fs.h to exportfs.h. This
> patch allows one to build ocfs2 with kernels having/not having
> this change.
> 
> Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
> Signed-off-by: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>

--
Mark Fasheh
Principal Software Developer, Oracle
mark.fasheh@oracle.com

^ permalink raw reply	[flat|nested] 61+ messages in thread

* [Ocfs2-devel] [PATCH 06/30] ocfs2: Include do_sync_mapping_range() from mainline
  2008-01-09 18:00 [Ocfs2-devel] OCFS2-1.4 Yet another drop Sunil Mushran
@ 2008-01-09 18:00 ` Sunil Mushran
  0 siblings, 0 replies; 61+ messages in thread
From: Sunil Mushran @ 2008-01-09 18:00 UTC (permalink / raw)
  To: ocfs2-devel

Commit 5b04aa3a64f854244bc40a6f528176ed50b5c4f6 introduced export symbol
do_sync_mapping_range(). This patch allows one to build ocfs2 with kernels
having/not having that change.

Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>
---
 Config.make.in                           |    2 +
 Makefile                                 |    3 +-
 configure.in                             |    6 +
 fs/ocfs2/Makefile                        |    6 +
 fs/ocfs2/compat_sync_mapping_range.c     |  157 ++++++++++++++++++++++++++++++
 kapi-compat/include/sync_mapping_range.h |   18 ++++
 6 files changed, 191 insertions(+), 1 deletions(-)
 create mode 100644 fs/ocfs2/compat_sync_mapping_range.c
 create mode 100644 kapi-compat/include/sync_mapping_range.h

diff --git a/Config.make.in b/Config.make.in
index 37412ba..09f02e1 100644
--- a/Config.make.in
+++ b/Config.make.in
@@ -59,6 +59,8 @@ EXTRA_CFLAGS += @KAPI_COMPAT_CFLAGS@
 
 NO_DELAYED_WORK_STRUCT = @NO_DELAYED_WORK_STRUCT@
 
+NO_SYNC_MAPPING_RANGE  = @NO_SYNC_MAPPING_RANGE@
+
 OCFS_DEBUG = @OCFS_DEBUG@
 
 ifneq ($(OCFS_DEBUG),)
diff --git a/Makefile b/Makefile
index b7b86db..3ddb1aa 100644
--- a/Makefile
+++ b/Makefile
@@ -11,7 +11,8 @@ LINUX_INCLUDE_FILES =
 KAPI_COMPAT_FILES = \
 	kapi-compat/include/workqueue.h \
 	kapi-compat/include/compiler.h \
-	kapi-compat/include/highmem.h
+	kapi-compat/include/highmem.h \
+	kapi-compat/include/sync_mapping_range.h
 
 PATCH_FILES =
 
diff --git a/configure.in b/configure.in
index 3d5ee8e..abe848c 100644
--- a/configure.in
+++ b/configure.in
@@ -172,6 +172,12 @@ OCFS2_CHECK_KERNEL([zero_user_page() in highmem.h], highmem.h,
   , highmem_compat_header="highmem.h", [zero_user_page])
 KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $highmem_compat_header"
 
+NO_SYNC_MAPPING_RANGE=
+OCFS2_CHECK_KERNEL([do_sync_mapping_range() in fs.h], fs.h,
+  , NO_SYNC_MAPPING_RANGE=yes, [do_sync_mapping_range(])
+KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS sync_mapping_range.h"
+AC_SUBST(NO_SYNC_MAPPING_RANGE)
+
 # using -include has two advantages:
 #  the source doesn't need to know to include compat headers
 #  the compat header file names don't go through the search path
diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
index 1dc6847..f27b3a1 100644
--- a/fs/ocfs2/Makefile
+++ b/fs/ocfs2/Makefile
@@ -34,6 +34,12 @@ ifdef NO_DELAYED_WORK_STRUCT
 EXTRA_CFLAGS += -DNO_DELAYED_WORK_STRUCT
 endif
 
+COMPAT_SOURCES += compat_sync_mapping_range.c
+ifdef NO_SYNC_MAPPING_RANGE
+SOURCES += compat_sync_mapping_range.c
+EXTRA_CFLAGS += -DNO_SYNC_MAPPING_RANGE
+endif
+
 #
 # Since SUBDIRS means something to kbuild, define them safely.  Do not
 # include trailing slashes.
diff --git a/fs/ocfs2/compat_sync_mapping_range.c b/fs/ocfs2/compat_sync_mapping_range.c
new file mode 100644
index 0000000..839c6a7
--- /dev/null
+++ b/fs/ocfs2/compat_sync_mapping_range.c
@@ -0,0 +1,157 @@
+/*
+ * compat_sync_mapping_range.c
+ *
+ * This code has been copied from mainline linux kernel git commit
+ * e7b34019606ab1dd06196635e931b0c302799228 to allow ocfs2 to build
+ * against older kernels. For license, refer to fs/sync.c in mainline
+ * linux kernel.
+ *
+ */
+
+#include <linux/fs.h>
+#include <linux/types.h>
+#include <linux/slab.h>
+#include <linux/highmem.h>
+#include <linux/swap.h>
+#include <linux/writeback.h>
+#include <linux/mpage.h>
+#include <linux/pagemap.h>
+#include <linux/pagevec.h>
+
+/**
+ * wait_on_page_writeback_range - wait for writeback to complete
+ * @mapping:	target address_space
+ * @start:	beginning page index
+ * @end:	ending page index
+ *
+ * Wait for writeback to complete against pages indexed by start->end
+ * inclusive
+ */
+int wait_on_page_writeback_range(struct address_space *mapping,
+				pgoff_t start, pgoff_t end)
+{
+	struct pagevec pvec;
+	int nr_pages;
+	int ret = 0;
+	pgoff_t index;
+
+	if (end < start)
+		return 0;
+
+	pagevec_init(&pvec, 0);
+	index = start;
+	while ((index <= end) &&
+			(nr_pages = pagevec_lookup_tag(&pvec, mapping, &index,
+			PAGECACHE_TAG_WRITEBACK,
+			min(end - index, (pgoff_t)PAGEVEC_SIZE-1) + 1)) != 0) {
+		unsigned i;
+
+		for (i = 0; i < nr_pages; i++) {
+			struct page *page = pvec.pages[i];
+
+			/* until radix tree lookup accepts end_index */
+			if (page->index > end)
+				continue;
+
+			wait_on_page_writeback(page);
+			if (PageError(page))
+				ret = -EIO;
+		}
+		pagevec_release(&pvec);
+		cond_resched();
+	}
+
+	/* Check for outstanding write errors */
+	if (test_and_clear_bit(AS_ENOSPC, &mapping->flags))
+		ret = -ENOSPC;
+	if (test_and_clear_bit(AS_EIO, &mapping->flags))
+		ret = -EIO;
+
+	return ret;
+}
+
+int do_writepages(struct address_space *mapping, struct writeback_control *wbc)
+{
+	int ret;
+
+	if (wbc->nr_to_write <= 0)
+		return 0;
+	wbc->for_writepages = 1;
+	if (mapping->a_ops->writepages)
+		ret = mapping->a_ops->writepages(mapping, wbc);
+	else
+		ret = generic_writepages(mapping, wbc);
+	wbc->for_writepages = 0;
+	return ret;
+}
+
+/**
+ * __filemap_fdatawrite_range - start writeback on mapping dirty pages in range
+ * @mapping:	address space structure to write
+ * @start:	offset in bytes where the range starts
+ * @end:	offset in bytes where the range ends (inclusive)
+ * @sync_mode:	enable synchronous operation
+ *
+ * Start writeback against all of a mapping's dirty pages that lie
+ * within the byte offsets <start, end> inclusive.
+ *
+ * If sync_mode is WB_SYNC_ALL then this is a "data integrity" operation, as
+ * opposed to a regular memory cleansing writeback.  The difference between
+ * these two operations is that if a dirty page/buffer is encountered, it must
+ * be waited upon, and not just skipped over.
+ */
+int __filemap_fdatawrite_range(struct address_space *mapping, loff_t start,
+				loff_t end, int sync_mode)
+{
+	int ret;
+	struct writeback_control wbc = {
+		.sync_mode = sync_mode,
+		.nr_to_write = mapping->nrpages * 2,
+		.range_start = start,
+		.range_end = end,
+	};
+
+	if (!mapping_cap_writeback_dirty(mapping))
+		return 0;
+
+	ret = do_writepages(mapping, &wbc);
+	return ret;
+}
+
+/*
+ * `endbyte' is inclusive
+ */
+int do_sync_mapping_range(struct address_space *mapping, loff_t offset,
+			  loff_t endbyte, unsigned int flags)
+{
+	int ret;
+
+	if (!mapping) {
+		ret = -EINVAL;
+		goto out;
+	}
+
+	ret = 0;
+	if (flags & SYNC_FILE_RANGE_WAIT_BEFORE) {
+		ret = wait_on_page_writeback_range(mapping,
+					offset >> PAGE_CACHE_SHIFT,
+					endbyte >> PAGE_CACHE_SHIFT);
+		if (ret < 0)
+			goto out;
+	}
+
+	if (flags & SYNC_FILE_RANGE_WRITE) {
+		ret = __filemap_fdatawrite_range(mapping, offset, endbyte,
+						WB_SYNC_NONE);
+		if (ret < 0)
+			goto out;
+	}
+
+	if (flags & SYNC_FILE_RANGE_WAIT_AFTER) {
+		ret = wait_on_page_writeback_range(mapping,
+					offset >> PAGE_CACHE_SHIFT,
+					endbyte >> PAGE_CACHE_SHIFT);
+	}
+out:
+	return ret;
+}
diff --git a/kapi-compat/include/sync_mapping_range.h b/kapi-compat/include/sync_mapping_range.h
new file mode 100644
index 0000000..1ee6f42
--- /dev/null
+++ b/kapi-compat/include/sync_mapping_range.h
@@ -0,0 +1,18 @@
+#ifndef KAPI_SYNC_MAPPING_RANGE_H
+#define KAPI_SYNC_MAPPING_RANGE_H
+
+#ifdef NO_SYNC_MAPPING_RANGE
+
+#include <linux/fs.h>
+#include <linux/types.h>
+#include <linux/slab.h>
+#include <linux/highmem.h>
+#include <linux/swap.h>
+#include <linux/writeback.h>
+#include <linux/pagemap.h>
+
+int do_sync_mapping_range(struct address_space *mapping, loff_t offset,
+			  loff_t endbyte, unsigned int flags);
+#endif
+
+#endif
-- 
1.5.2.5

^ permalink raw reply related	[flat|nested] 61+ messages in thread

end of thread, other threads:[~2008-01-09 18:00 UTC | newest]

Thread overview: 61+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-01-03 11:22 [Ocfs2-devel] OCFS2 1.4 Repository Base (3rd attempt) Sunil Mushran
2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 29/30] ocfs2: Handle older prototype of bi_end_io_t Sunil Mushran
2008-01-08 16:20   ` Mark Fasheh
2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 22/30] ocfs2: Handle missing macro MNT_RELATIME Sunil Mushran
2008-01-08 16:03   ` Mark Fasheh
2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 03/30] ocfs2: Handle workqueue changes Sunil Mushran
2008-01-08 13:16   ` Mark Fasheh
2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 25/30] ocfs2: Handle missing const s_op in struct super_block Sunil Mushran
2008-01-08 16:13   ` Mark Fasheh
2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 24/30] ocfs2: Handle missing export generic_segment_checks() Sunil Mushran
2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 30/30] ocfs2: Handle missing exportfs.h Sunil Mushran
2008-01-08 16:22   ` Mark Fasheh
2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 18/30] ocfs2: Handle the removal of struct subsystem Sunil Mushran
2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 27/30] ocfs2: Handle missing vectorized fileops aio_read() and aio_write() Sunil Mushran
2008-01-08 16:17   ` Mark Fasheh
2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 14/30] ocfs2: Handle enum value FS_OCFS2 Sunil Mushran
2008-01-08 15:43   ` Mark Fasheh
2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 23/30] ocfs2: Handles missing export should_remove_suid() Sunil Mushran
2008-01-08 16:05   ` Mark Fasheh
2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 28/30] ocfs2: Handle missing __splice_from_pipe() Sunil Mushran
2008-01-08 16:19   ` Mark Fasheh
2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 07/30] ocfs2: Handle missing vmops->fault() Sunil Mushran
2008-01-08 13:20   ` Mark Fasheh
2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 17/30] ocfs2: Handle su_mutex in struct configfs_subsystem Sunil Mushran
2008-01-08 15:45   ` Mark Fasheh
2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 20/30] ocfs2: Handle missing iop->fallocate() Sunil Mushran
2008-01-08 15:57   ` Mark Fasheh
2008-01-03 11:21 ` [Ocfs2-devel] [PATCH 08/30] ocfs2: Handle struct f_path in struct file Sunil Mushran
2008-01-08 13:22   ` Mark Fasheh
2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 09/30] ocfs2: Define enum umh_wait Sunil Mushran
2008-01-08 13:25   ` Mark Fasheh
2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 10/30] ocfs2: Add helper inc_nlink Sunil Mushran
2008-01-08 13:24   ` Mark Fasheh
2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 06/30] ocfs2: Include do_sync_mapping_range() from mainline Sunil Mushran
2008-01-08 13:20   ` Mark Fasheh
2008-01-08 13:23     ` Sunil Mushran
2008-01-08 14:49       ` Mark Fasheh
2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 05/30] ocfs2: Handle macro zero_user_page() Sunil Mushran
2008-01-08 13:18   ` Mark Fasheh
2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 15/30] ocfs2: Handles configfs_depend_item() and configfs_undepend_item() Sunil Mushran
2008-01-08 15:45   ` Mark Fasheh
2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 19/30] ocfs2: Handle missing macro is_owner_or_cap() Sunil Mushran
2008-01-08 15:57   ` Mark Fasheh
2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 13/30] ocfs2: Define FS_RENAME_DOES_D_MOVE Sunil Mushran
2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 21/30] ocfs2: Handle splice.h Sunil Mushran
2008-01-08 16:01   ` Mark Fasheh
2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 26/30] ocfs2: Handle missing const struct inode_operations in struct inode Sunil Mushran
2008-01-08 16:15   ` Mark Fasheh
2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 11/30] ocfs2: Add helper drop_nlink Sunil Mushran
2008-01-08 13:24   ` Mark Fasheh
2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 12/30] ocfs2: Handle missing dtors in kmem_cache_create() Sunil Mushran
2008-01-08 15:41   ` Mark Fasheh
2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 16/30] ocfs2: Handle different prototypes of register_sysctl_table() Sunil Mushran
2008-01-08 15:45   ` Mark Fasheh
2008-01-03 11:22 ` [Ocfs2-devel] [PATCH 04/30] ocfs2: Handle macro uninitialized_var Sunil Mushran
2008-01-08 13:16   ` Mark Fasheh
  -- strict thread matches above, loose matches on Subject: below --
2008-01-09 18:00 [Ocfs2-devel] OCFS2-1.4 Yet another drop Sunil Mushran
2008-01-09 18:00 ` [Ocfs2-devel] [PATCH 06/30] ocfs2: Include do_sync_mapping_range() from mainline Sunil Mushran
2007-12-31 14:25 [Ocfs2-devel] ocfs2-1.4: A new beginning - 2nd attempt Sunil Mushran
2007-12-31 14:25 ` [Ocfs2-devel] [PATCH 06/30] ocfs2: Include do_sync_mapping_range() from mainline Sunil Mushran
2007-12-20 15:30 [Ocfs2-devel] ocfs2 1.4: A new beginning Sunil Mushran
2007-12-20 15:29 ` [Ocfs2-devel] [PATCH 06/30] ocfs2: Include do_sync_mapping_range() from mainline Sunil Mushran
2007-12-21  0:54   ` Joel Becker
2007-12-21  9:39     ` Sunil Mushran

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.