Enable journal replay for UBIFS
PATCH v3 1/2 Enable journal replay for UBIFS
Hello Heiko
Here the second patch you want. This needs to be applied prior the real bug fix, becouse it solves the warning as you mention as well.
PATCH v3 1/2 Enable journal replay for UBIFS
Hello Anton,
Am 21.01.2015 16:47, schrieb Anton Habegger:
Quoted 5 lines
Hello Heiko
Here the second patch you want. This needs to be applied prior the real bug fix, becouse it solves the warning as you mention as well.
Thanks, I added Albert Aribaud to Cc, as he is the arm custodian, and please add such comments under a "---" line ...
Quoted 7 lines
Quoted 3 lines
From
fd0a1377825638d15bc66b5f07a05beb14fe747cMon Sep 17 00:00:00 2001From: Anton Habegger <[email protected]>
Date: Wed, 21 Jan 2015 16:20:36 +0100
Subject: [PATCH] ubifs: Importatomic_longoperations from Linux
Quoted 8 lines
The following operations are imported from Linux:
-atomic_long_read
-atomic_long_inc
-atomic_long_dec
-atomic_long_subTherefor "
include/asm-generic/atomic-long.h" is imported from Linux 3.15
add please the commit id also here, thanks.
Quoted 96 lines
This commit is a preperation for a subsequent UBIFS commit which needs such
atomic_longoperationsSigned-off-by Anton Habegger <[email protected]>--- fs/ubifs/ubifs.c | 6 + fs/ubifs/ubifs.h | 12 +- include/asm-generic/atomic-long.h | 270 ++++++++++++++++++++++++++++++++++++++ include/linux/compat.h | 1 - 4 files changed, 278 insertions(+), 11 deletions(-)create mode 100644
include/asm-generic/atomic-long.hfs/ubifs/ubifs.c +6
-0@@ -150,6 +150,12 @@ static inline int crypto_comp_decompress(struct crypto_comp *tfm, return 0; } + +/* from shrinker.c */ + +/* Global clean znode counter (for all mounted UBIFS instances) */ +atomic_long_t ubifs_clean_zn_cnt; +#endif /** fs/ubifs/ubifs.h +2
-10@@ -31,6 +31,8 @@#include <linux/backing-dev.h> #include "ubifs-media.h" #else +#include <asm/atomic.h> +#include <asm-generic/atomic-long.h> #include <ubi_uboot.h> #include <linux/ctype.h> @@ -63,16 +65,6 @@ struct page {void iput (struct inode *inode); -/* -* The atomic operations are used for budgeting etc which is not -* needed for the read-only U-Boot implementation: -*/ -#define atomic_long_inc (a) -#define atomic_long_dec (a) -#define atomic_long_sub (a, b) - -typedef unsigned long atomic_long_t ; -/* linux/include/time.h */ #define NSEC_PER_SEC 1000000000L#define get_seconds () 0include/asm-generic/atomic-long.h new file +31
-0@@ -0,0 +1,270 @@ +#ifndef _ASM_GENERIC_ATOMIC_LONG_H +#define _ASM_GENERIC_ATOMIC_LONG_H +/* + * Copyright (C) 2005 Silicon Graphics, Inc. + * Christoph Lameter + * + * Allows to provide arch independent atomic definitions without the need to + * edit all arch specific atomic.h files. + */ + +#include <asm/types.h> + +/* + * Suppport for atomic_long_t + * + * Casts for parameters are avoided for existing atomic functions in order to + * avoid issues with cast-as-lval under gcc 4.x and other limitations that the + * macros of a platform may have. + */ + +#if BITS_PER_LONG == 64 + +typedef atomic64_t atomic_long_t; + +#define ATOMIC_LONG_INIT(i) ATOMIC64_INIT(i) + +static inline long atomic_long_read(atomic_long_t *l) +{ + atomic64_t *v = (atomic64_t *)l; + + return (long)atomic64_read(v);
include/asm-generic/atomic-long.h line 41
Quoted 10 lines
include/asm-generic/atomic-long.h new file +10
-0+} + +#ifndef __UBOOT__ +static inline void atomic_long_set (atomic_long_t *l,long i) +{ +atomic64_t *v = (atomic64_t *)l; + +atomic64_set (v, i); +} +#endif
Do we really need to ifdef out the most functions? Could you compile without this "#ifndef __UBOOT__" and copmpare the resulting binarysize?
Thanks!
bye,
Heiko
Quoted 242 lines
include/asm-generic/atomic-long.h new file +229
-0+ +static inline void atomic_long_inc (atomic_long_t *l) +{ +atomic64_t *v = (atomic64_t *)l; + +atomic64_inc (v); +} + +static inline void atomic_long_dec (atomic_long_t *l) +{ +atomic64_t *v = (atomic64_t *)l; + +atomic64_dec (v); +} + +#ifndef __UBOOT__ +static inline void atomic_long_add (long i,atomic_long_t *l) +{ +atomic64_t *v = (atomic64_t *)l; + +atomic64_add (i, v); +} +#endif + +static inline void atomic_long_sub (long i,atomic_long_t *l) +{ +atomic64_t *v = (atomic64_t *)l; + +atomic64_sub (i, v); +} + +#ifndef __UBOOT__ +static inline int atomic_long_sub_and_test (long i,atomic_long_t *l) +{ +atomic64_t *v = (atomic64_t *)l; + +return atomic64_sub_and_test (i, v); +} + +static inline int atomic_long_dec_and_test (atomic_long_t *l) +{ +atomic64_t *v = (atomic64_t *)l; + +return atomic64_dec_and_test (v); +} + +static inline int atomic_long_inc_and_test (atomic_long_t *l) +{ +atomic64_t *v = (atomic64_t *)l; + +return atomic64_inc_and_test (v); +} + +static inline int atomic_long_add_negative (long i,atomic_long_t *l) +{ +atomic64_t *v = (atomic64_t *)l; + +return atomic64_add_negative (i, v); +} + +static inline long atomic_long_add_return (long i,atomic_long_t *l) +{ +atomic64_t *v = (atomic64_t *)l; + +return (long )atomic64_add_return (i, v); +} + +static inline long atomic_long_sub_return (long i,atomic_long_t *l) +{ +atomic64_t *v = (atomic64_t *)l; + +return (long )atomic64_sub_return (i, v); +} + +static inline long atomic_long_inc_return (atomic_long_t *l) +{ +atomic64_t *v = (atomic64_t *)l; + +return (long )atomic64_inc_return (v); +} + +static inline long atomic_long_dec_return (atomic_long_t *l) +{ +atomic64_t *v = (atomic64_t *)l; + +return (long )atomic64_dec_return (v); +} + +static inline long atomic_long_add_unless (atomic_long_t *l,long a,long u) +{ +atomic64_t *v = (atomic64_t *)l; + +return (long )atomic64_add_unless (v, a, u); +} + +#define atomic_long_inc_not_zero (l) atomic64_inc_not_zero((atomic64_t *)(l)) + +#define atomic_long_cmpxchg (l, old, new) \ + (atomic64_cmpxchg((atomic64_t *)(l), (old), (new))) +#define atomic_long_xchg (v, new) \ + (atomic64_xchg((atomic64_t *)(v), (new))) +#endif /* __UBOOT__ */ + +#else /* BITS_PER_LONG == 64 */ + +typedef atomic_t atomic_long_t ; + +#define ATOMIC_LONG_INIT (i) ATOMIC_INIT(i) +static inline long atomic_long_read (atomic_long_t *l) +{ +atomic_t *v = (atomic_t *)l; + +return (long )atomic_read (v); +} + +#ifndef __UBOOT__ +static inline void atomic_long_set (atomic_long_t *l,long i) +{ +atomic_t *v = (atomic_t *)l; + +atomic_set (v, i); +} +#endif + +static inline void atomic_long_inc (atomic_long_t *l) +{ +atomic_t *v = (atomic_t *)l; + +atomic_inc (v); +} + +static inline void atomic_long_dec (atomic_long_t *l) +{ +atomic_t *v = (atomic_t *)l; + +atomic_dec (v); +} + +#ifndef __UBOOT__ +static inline void atomic_long_add (long i,atomic_long_t *l) +{ +atomic_t *v = (atomic_t *)l; + +atomic_add (i, v); +} +#endif + +static inline void atomic_long_sub (long i,atomic_long_t *l) +{ +atomic_t *v = (atomic_t *)l; + +atomic_sub (i, v); +} + +#ifndef __UBOOT__ +static inline int atomic_long_sub_and_test (long i,atomic_long_t *l) +{ +atomic_t *v = (atomic_t *)l; + +return atomic_sub_and_test (i, v); +} + +static inline int atomic_long_dec_and_test (atomic_long_t *l) +{ +atomic_t *v = (atomic_t *)l; + +return atomic_dec_and_test (v); +} + +static inline int atomic_long_inc_and_test (atomic_long_t *l) +{ +atomic_t *v = (atomic_t *)l; + +return atomic_inc_and_test (v); +} + +static inline int atomic_long_add_negative (long i,atomic_long_t *l) +{ +atomic_t *v = (atomic_t *)l; + +return atomic_add_negative (i, v); +} + +static inline long atomic_long_add_return (long i,atomic_long_t *l) +{ +atomic_t *v = (atomic_t *)l; + +return (long )atomic_add_return (i, v); +} + +static inline long atomic_long_sub_return (long i,atomic_long_t *l) +{ +atomic_t *v = (atomic_t *)l; + +return (long )atomic_sub_return (i, v); +} + +static inline long atomic_long_inc_return (atomic_long_t *l) +{ +atomic_t *v = (atomic_t *)l; + +return (long )atomic_inc_return (v); +} + +static inline long atomic_long_dec_return (atomic_long_t *l) +{ +atomic_t *v = (atomic_t *)l; + +return (long )atomic_dec_return (v); +} + +static inline long atomic_long_add_unless (atomic_long_t *l,long a,long u) +{ +atomic_t *v = (atomic_t *)l; + +return (long )atomic_add_unless (v, a, u); +} + +#define atomic_long_inc_not_zero (l) atomic_inc_not_zero((atomic_t *)(l)) + +#define atomic_long_cmpxchg (l, old, new) \ + (atomic_cmpxchg((atomic_t *)(l), (old), (new))) +#define atomic_long_xchg (v, new) \ + (atomic_xchg((atomic_t *)(v), (new))) +#endif /* __UBOOT__ */ + +#endif /* BITS_PER_LONG == 64 */ + +#endif /* _ASM_GENERIC_ATOMIC_LONG_H */ include/linux/compat.h +0
-1@@ -262,7 +262,6 @@ typedef struct {/* from include/linux/types.h */ -typedef int atomic_t ;/** * struct callback_head - callback structure for use with RCU and task_work * @next: next update requests in a list
Signature · 2 lines
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
PATCH v3 1/2 Enable journal replay for UBIFS
Hello Heiko
Quoted 28 lines · Heiko Schocher
Hello Anton,
Am 21.01.2015 16:47, schrieb Anton Habegger:
Quoted 6 lines
Hello Heiko
Here the second patch you want. This needs to be applied prior the real bug fix, becouse it solves the warning as you mention as well.
Thanks, I added Albert Aribaud to Cc, as he is the arm custodian, and please add such comments under a "---" line ...
Quoted 15 lines
Quoted 4 lines
From
fd0a1377825638d15bc66b5f07a05beb14fe747cMon Sep 17 00:00:00 2001From: Anton Habegger <[email protected]>
Date: Wed, 21 Jan 2015 16:20:36 +0100
Subject: [PATCH] ubifs: Importatomic_longoperations from LinuxThe following operations are imported from Linux:
-atomic_long_read
-atomic_long_inc
-atomic_long_dec
-atomic_long_sub
Quoted 5 lines
Quoted 2 lines
Therefor "
include/asm-generic/atomic-long.h" is imported from Linux 3.15add please the commit id also here, thanks.
OK, I will do it in the next version.
Quoted 111 lines
Quoted 111 lines
This commit is a preperation for a subsequent UBIFS commit which needs such
atomic_longoperationsSigned-off-by Anton Habegger <[email protected]>--- fs/ubifs/ubifs.c | 6 + fs/ubifs/ubifs.h | 12 +- include/asm-generic/atomic-long.h | 270 ++++++++++++++++++++++++++++++++++++++ include/linux/compat.h | 1 - 4 files changed, 278 insertions(+), 11 deletions(-)create mode 100644
include/asm-generic/atomic-long.hfs/ubifs/ubifs.c +6
-0@@ -150,6 +150,12 @@ static inline int crypto_comp_decompress(structcrypto_comp *tfm, return 0; } + +/* from shrinker.c */ + +/* Global clean znode counter (for all mounted UBIFS instances) */ +atomic_long_t ubifs_clean_zn_cnt; +#endif /**
fs/ubifs/ubifs.h +2
-10@@ -31,6 +31,8 @@#include <linux/backing-dev.h> #include "ubifs-media.h" #else +#include <asm/atomic.h> +#include <asm-generic/atomic-long.h> #include <ubi_uboot.h> #include <linux/ctype.h> @@ -63,16 +65,6 @@ struct page {void iput (struct inode *inode); -/* -* The atomic operations are used for budgeting etc which is not -* needed for the read-only U-Boot implementation: -*/ -#define atomic_long_inc (a) -#define atomic_long_dec (a) -#define atomic_long_sub (a, b) - -typedef unsigned long atomic_long_t ; -/* linux/include/time.h */ #define NSEC_PER_SEC 1000000000L#define get_seconds () 0include/asm-generic/atomic-long.h new file +7
-0@@ -0,0 +1,270 @@ +#ifndef _ASM_GENERIC_ATOMIC_LONG_H +#define _ASM_GENERIC_ATOMIC_LONG_H +/* +* Copyright (C) 2005 Silicon Graphics, Inc. +* Christoph Lameter +* +* Allows to provide arch independent atomic definitions without the need to
+ * edit all arch specificatomic.hfiles.
+ */include/asm-generic/atomic-long.h new file +7
-0+ +#include <asm/types.h> + +/* +* Suppport for atomic_long_t +* +* Casts for parameters are avoided for existing atomic functions in order to
+ * avoid issues with cast-as-lval under gcc 4.x and other limitations that the
+ * macros of a platform may have.
+ */include/asm-generic/atomic-long.h new file +19
-0+ +#if BITS_PER_LONG == 64 + +typedef atomic64_t atomic_long_t; + +#define ATOMIC_LONG_INIT(i) ATOMIC64_INIT(i) + +static inline long atomic_long_read(atomic_long_t *l) +{ + atomic64_t *v = (atomic64_t *)l; + + return (long)atomic64_read(v); +} + +#ifndef __UBOOT__ +static inline void atomic_long_set(atomic_long_t *l, long i) +{ + atomic64_t *v = (atomic64_t *)l; +
Quoted 8 lines
include/asm-generic/atomic-long.h
Quoted 3 lines
include/asm-generic/atomic-long.h new file +3
-0+ atomic64_set(v, i); +} +#endif Do we really need to ifdef out the most functions? Could you compile without this "#ifndef
__UBOOT__" and copmpare the resulting binarysize?
I got implicit declarations:
In file included from fs/ubifs/ubifs.h:35,
from fs/ubifs/gc.c:60:
include/asm-generic/atomic-long.h: In function 'atomic_long_inc_and_test':include/asm-generic/atomic-long.h:203: warning: implicit declaration of function 'atomic_inc_and_test' include/asm-generic/atomic-long.h: In function 'atomic_long_add_negative':include/asm-generic/atomic-long.h:210: warning: implicit declaration of function 'atomic_add_negative' include/asm-generic/atomic-long.h: In function 'atomic_long_add_unless':include/asm-generic/atomic-long.h:245: warning: implicit declaration of function 'atomic_add_unless'
I would need to import include/asm-generic/atomic.h as well. If I do then a bunch of other definitions are missing. My feeling is, it getting much harder to adapt include/asm-generic/atomic.h instead of include/asm-generic/atomic-long.h
Should I do it anyway?
Thank you
BR
Anton
Quoted 257 lines
Thanks!
bye,
HeikoQuoted 243 lines
include/asm-generic/atomic-long.h new file +89
-0+ +static inline void atomic_long_inc (atomic_long_t *l) +{ +atomic64_t *v = (atomic64_t *)l; + +atomic64_inc (v); +} + +static inline void atomic_long_dec (atomic_long_t *l) +{ +atomic64_t *v = (atomic64_t *)l; + +atomic64_dec (v); +} + +#ifndef __UBOOT__ +static inline void atomic_long_add (long i,atomic_long_t *l) +{ +atomic64_t *v = (atomic64_t *)l; + +atomic64_add (i, v); +} +#endif + +static inline void atomic_long_sub (long i,atomic_long_t *l) +{ +atomic64_t *v = (atomic64_t *)l; + +atomic64_sub (i, v); +} + +#ifndef __UBOOT__ +static inline int atomic_long_sub_and_test (long i,atomic_long_t *l) +{ +atomic64_t *v = (atomic64_t *)l; + +return atomic64_sub_and_test (i, v); +} + +static inline int atomic_long_dec_and_test (atomic_long_t *l) +{ +atomic64_t *v = (atomic64_t *)l; + +return atomic64_dec_and_test (v); +} + +static inline int atomic_long_inc_and_test (atomic_long_t *l) +{ +atomic64_t *v = (atomic64_t *)l; + +return atomic64_inc_and_test (v); +} + +static inline int atomic_long_add_negative (long i,atomic_long_t *l) +{ +atomic64_t *v = (atomic64_t *)l; + +return atomic64_add_negative (i, v); +} + +static inline long atomic_long_add_return (long i,atomic_long_t *l) +{ +atomic64_t *v = (atomic64_t *)l; + +return (long )atomic64_add_return (i, v); +} + +static inline long atomic_long_sub_return (long i,atomic_long_t *l) +{ +atomic64_t *v = (atomic64_t *)l; + +return (long )atomic64_sub_return (i, v); +} + +static inline long atomic_long_inc_return (atomic_long_t *l) +{ +atomic64_t *v = (atomic64_t *)l; + +return (long )atomic64_inc_return (v); +} + +static inline long atomic_long_dec_return (atomic_long_t *l) +{ +atomic64_t *v = (atomic64_t *)l; + +return (long )atomic64_dec_return (v); +} + +static inline long atomic_long_add_unless(atomic_long_t *l, long a, longu)
include/asm-generic/atomic-long.h new file +7
-0+{ +atomic64_t *v = (atomic64_t *)l; + +return (long )atomic64_add_unless (v, a, u); +} + +#define atomic_long_inc_not_zero (l) atomic64_inc_not_zero((atomic64_t*)(l))
include/asm-generic/atomic-long.h new file +116
-0+ +#define atomic_long_cmpxchg (l, old, new) \ + (atomic64_cmpxchg((atomic64_t *)(l), (old), (new))) +#define atomic_long_xchg (v, new) \ + (atomic64_xchg((atomic64_t *)(v), (new))) +#endif /* __UBOOT__ */ + +#else /* BITS_PER_LONG == 64 */ + +typedef atomic_t atomic_long_t ; + +#define ATOMIC_LONG_INIT (i) ATOMIC_INIT(i) +static inline long atomic_long_read (atomic_long_t *l) +{ +atomic_t *v = (atomic_t *)l; + +return (long )atomic_read (v); +} + +#ifndef __UBOOT__ +static inline void atomic_long_set (atomic_long_t *l,long i) +{ +atomic_t *v = (atomic_t *)l; + +atomic_set (v, i); +} +#endif + +static inline void atomic_long_inc (atomic_long_t *l) +{ +atomic_t *v = (atomic_t *)l; + +atomic_inc (v); +} + +static inline void atomic_long_dec (atomic_long_t *l) +{ +atomic_t *v = (atomic_t *)l; + +atomic_dec (v); +} + +#ifndef __UBOOT__ +static inline void atomic_long_add (long i,atomic_long_t *l) +{ +atomic_t *v = (atomic_t *)l; + +atomic_add (i, v); +} +#endif + +static inline void atomic_long_sub (long i,atomic_long_t *l) +{ +atomic_t *v = (atomic_t *)l; + +atomic_sub (i, v); +} + +#ifndef __UBOOT__ +static inline int atomic_long_sub_and_test (long i,atomic_long_t *l) +{ +atomic_t *v = (atomic_t *)l; + +return atomic_sub_and_test (i, v); +} + +static inline int atomic_long_dec_and_test (atomic_long_t *l) +{ +atomic_t *v = (atomic_t *)l; + +return atomic_dec_and_test (v); +} + +static inline int atomic_long_inc_and_test (atomic_long_t *l) +{ +atomic_t *v = (atomic_t *)l; + +return atomic_inc_and_test (v); +} + +static inline int atomic_long_add_negative (long i,atomic_long_t *l) +{ +atomic_t *v = (atomic_t *)l; + +return atomic_add_negative (i, v); +} + +static inline long atomic_long_add_return (long i,atomic_long_t *l) +{ +atomic_t *v = (atomic_t *)l; + +return (long )atomic_add_return (i, v); +} + +static inline long atomic_long_sub_return (long i,atomic_long_t *l) +{ +atomic_t *v = (atomic_t *)l; + +return (long )atomic_sub_return (i, v); +} + +static inline long atomic_long_inc_return (atomic_long_t *l) +{ +atomic_t *v = (atomic_t *)l; + +return (long )atomic_inc_return (v); +} + +static inline long atomic_long_dec_return (atomic_long_t *l) +{ +atomic_t *v = (atomic_t *)l; + +return (long )atomic_dec_return (v); +} + +static inline long atomic_long_add_unless(atomic_long_t *l, long a, longu)
include/asm-generic/atomic-long.h new file +17
-0+{ +atomic_t *v = (atomic_t *)l; + +return (long )atomic_add_unless (v, a, u); +} + +#define atomic_long_inc_not_zero (l) atomic_inc_not_zero((atomic_t *)(l)) + +#define atomic_long_cmpxchg (l, old, new) \ + (atomic_cmpxchg((atomic_t *)(l), (old), (new))) +#define atomic_long_xchg (v, new) \ + (atomic_xchg((atomic_t *)(v), (new))) +#endif /* __UBOOT__ */ + +#endif /* BITS_PER_LONG == 64 */ + +#endif /* _ASM_GENERIC_ATOMIC_LONG_H */ include/linux/compat.h +0
-1@@ -262,7 +262,6 @@ typedef struct {/* from include/linux/types.h */ -typedef int atomic_t ;/** * struct callback_head - callback structure for use with RCU and Quoted 3 lines
task_work
* @next: next update requests in a list--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany