diff mbox

[V4,02/22] ext4: export inline xattr functions.

Message ID 1329721316-4955-2-git-send-email-tm@tao.ma
State Superseded, archived
Headers show

Commit Message

Tao Ma Feb. 20, 2012, 7:01 a.m. UTC
From: Tao Ma <boyu.mt@taobao.com>

Inline data needs some inline xattr functions, so export them
from fs/ext4/xattr.c so that inline.c can uses them.

Signed-off-by: Tao Ma <boyu.mt@taobao.com>
---
 fs/ext4/xattr.c |   63 ++++++++++++++++++++++++++----------------------------
 fs/ext4/xattr.h |   57 +++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 87 insertions(+), 33 deletions(-)

Comments

Andreas Dilger Feb. 21, 2012, 10:45 p.m. UTC | #1
On 2012-02-20, at 12:01 AM, Tao Ma wrote:
> From: Tao Ma <boyu.mt@taobao.com>
> 
> Inline data needs some inline xattr functions, so export them
> from fs/ext4/xattr.c so that inline.c can uses them.
> 
> Signed-off-by: Tao Ma <boyu.mt@taobao.com>
> ---
> fs/ext4/xattr.c |   63 ++++++++++++++++++++++++++----------------------------
> fs/ext4/xattr.h |   57 +++++++++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 87 insertions(+), 33 deletions(-)
> 
> diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c
> index 93a00d8..07eeaf3 100644
> --- a/fs/ext4/xattr.c
> +++ b/fs/ext4/xattr.c
> @@ -61,11 +61,6 @@
> #include "xattr.h"
> #include "acl.h"
> 
> -#define BHDR(bh) ((struct ext4_xattr_header *)((bh)->b_data))
> -#define ENTRY(ptr) ((struct ext4_xattr_entry *)(ptr))
> -#define BFIRST(bh) ENTRY(BHDR(bh)+1)
> -#define IS_LAST_ENTRY(entry) (*(__u32 *)(entry) == 0)
> -
> #ifdef EXT4_XATTR_DEBUG
> # define ea_idebug(inode, f...) do { \
> 		printk(KERN_DEBUG "inode %s:%lu: ", \
> @@ -255,7 +250,7 @@ cleanup:
> 	return error;
> }
> 
> -static int
> +int
> ext4_xattr_ibody_get(struct inode *inode, int name_index, const char *name,
> 		     void *buffer, size_t buffer_size)
> {
> @@ -522,21 +517,6 @@ static size_t ext4_xattr_free_space(struct ext4_xattr_entry *last,
> 	return (*min_offs - ((void *)last - base) - sizeof(__u32));
> }
> 
> -struct ext4_xattr_info {
> -	int name_index;
> -	const char *name;
> -	const void *value;
> -	size_t value_len;
> -};
> -
> -struct ext4_xattr_search {
> -	struct ext4_xattr_entry *first;
> -	void *base;
> -	void *end;
> -	struct ext4_xattr_entry *here;
> -	int not_found;
> -};
> -
> static int
> ext4_xattr_set_entry(struct ext4_xattr_info *i, struct ext4_xattr_search *s)
> {
> @@ -890,14 +870,8 @@ bad_block:
> #undef header
> }
> 
> -struct ext4_xattr_ibody_find {
> -	struct ext4_xattr_search s;
> -	struct ext4_iloc iloc;
> -};
> -
> -static int
> -ext4_xattr_ibody_find(struct inode *inode, struct ext4_xattr_info *i,
> -		      struct ext4_xattr_ibody_find *is)
> +int ext4_xattr_ibody_find(struct inode *inode, struct ext4_xattr_info *i,
> +			  struct ext4_xattr_ibody_find *is)
> {
> 	struct ext4_xattr_ibody_header *header;
> 	struct ext4_inode *raw_inode;
> @@ -925,10 +899,33 @@ ext4_xattr_ibody_find(struct inode *inode, struct ext4_xattr_info *i,
> 	return 0;
> }
> 
> -static int
> -ext4_xattr_ibody_set(handle_t *handle, struct inode *inode,
> -		     struct ext4_xattr_info *i,
> -		     struct ext4_xattr_ibody_find *is)
> +int ext4_xattr_ibody_inline_set(handle_t *handle, struct inode *inode,
> +				struct ext4_xattr_info *i,
> +				struct ext4_xattr_ibody_find *is)
> +{

The addition of this function should be moved into [PATCH 03/22], since
there are otherwise no users of this function in this patch.

> +	struct ext4_xattr_ibody_header *header;
> +	struct ext4_xattr_search *s = &is->s;
> +	int error;
> +
> +	if (EXT4_I(inode)->i_extra_isize == 0)
> +		return -ENOSPC;
> +	error = ext4_xattr_set_entry(i, s);
> +	if (error)
> +		return error;
> +	header = IHDR(inode, ext4_raw_inode(&is->iloc));
> +	if (!IS_LAST_ENTRY(s->first)) {
> +		header->h_magic = cpu_to_le32(EXT4_XATTR_MAGIC);
> +		ext4_set_inode_state(inode, EXT4_STATE_XATTR);
> +	} else {
> +		header->h_magic = cpu_to_le32(0);
> +		ext4_clear_inode_state(inode, EXT4_STATE_XATTR);
> +	}
> +	return 0;
> +}
> +
> +int ext4_xattr_ibody_set(handle_t *handle, struct inode *inode,
> +			 struct ext4_xattr_info *i,
> +			 struct ext4_xattr_ibody_find *is)
> {
> 	struct ext4_xattr_ibody_header *header;
> 	struct ext4_xattr_search *s = &is->s;
> diff --git a/fs/ext4/xattr.h b/fs/ext4/xattr.h
> index 25b7387..2879761 100644
> --- a/fs/ext4/xattr.h
> +++ b/fs/ext4/xattr.h
> @@ -63,6 +63,32 @@ struct ext4_xattr_entry {
> 		EXT4_I(inode)->i_extra_isize))
> #define IFIRST(hdr) ((struct ext4_xattr_entry *)((hdr)+1))
> 
> +#define BHDR(bh) ((struct ext4_xattr_header *)((bh)->b_data))
> +#define ENTRY(ptr) ((struct ext4_xattr_entry *)(ptr))
> +#define BFIRST(bh) ENTRY(BHDR(bh)+1)
> +#define IS_LAST_ENTRY(entry) (*(__u32 *)(entry) == 0)
> +
> +
> +struct ext4_xattr_info {
> +	int name_index;
> +	const char *name;
> +	const void *value;
> +	size_t value_len;
> +};
> +
> +struct ext4_xattr_search {
> +	struct ext4_xattr_entry *first;
> +	void *base;
> +	void *end;
> +	struct ext4_xattr_entry *here;
> +	int not_found;
> +};
> +
> +struct ext4_xattr_ibody_find {
> +	struct ext4_xattr_search s;
> +	struct ext4_iloc iloc;
> +};
> +
> # ifdef CONFIG_EXT4_FS_XATTR
> 
> extern const struct xattr_handler ext4_xattr_user_handler;
> @@ -88,6 +114,15 @@ extern void ext4_exit_xattr(void);
> 
> extern const struct xattr_handler *ext4_xattr_handlers[];
> 
> +extern int ext4_xattr_ibody_find(struct inode *inode, struct ext4_xattr_info *i,
> +				 struct ext4_xattr_ibody_find *is);
> +extern int ext4_xattr_ibody_inline_set(handle_t *handle, struct inode *inode,
> +				       struct ext4_xattr_info *i,
> +				       struct ext4_xattr_ibody_find *is);
> +extern int ext4_xattr_ibody_get(struct inode *inode, int name_index,
> +				const char *name,
> +				void *buffer, size_t buffer_size);
> +
> # else  /* CONFIG_EXT4_FS_XATTR */
> 
> static inline int
> @@ -141,6 +176,28 @@ ext4_expand_extra_isize_ea(struct inode *inode, int new_extra_isize,
> 
> #define ext4_xattr_handlers	NULL
> 
> +static inline int
> +ext4_xattr_ibody_find(struct inode *inode, struct ext4_xattr_info *i,
> +		      struct ext4_xattr_ibody_find *is)
> +{
> +	return -EOPNOTSUPP;
> +}
> +
> +static inline int
> +ext4_xattr_ibody_set(handle_t *handle, struct inode *inode,
> +		     struct ext4_xattr_info *i,
> +		     struct ext4_xattr_ibody_find *is)
> +{
> +	return -EOPNOTSUPP;
> +}
> +
> +extern int ext4_xattr_ibody_get(struct inode *inode, int name_index,
> +				const char *name,
> +				void *buffer, size_t buffer_size)
> +{
> +	return -EOPNOTSUPP;
> +}
> +
> # endif  /* CONFIG_EXT4_FS_XATTR */
> 
> #ifdef CONFIG_EXT4_FS_SECURITY
> -- 
> 1.7.0.4
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html


Cheers, Andreas





--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c
index 93a00d8..07eeaf3 100644
--- a/fs/ext4/xattr.c
+++ b/fs/ext4/xattr.c
@@ -61,11 +61,6 @@ 
 #include "xattr.h"
 #include "acl.h"
 
-#define BHDR(bh) ((struct ext4_xattr_header *)((bh)->b_data))
-#define ENTRY(ptr) ((struct ext4_xattr_entry *)(ptr))
-#define BFIRST(bh) ENTRY(BHDR(bh)+1)
-#define IS_LAST_ENTRY(entry) (*(__u32 *)(entry) == 0)
-
 #ifdef EXT4_XATTR_DEBUG
 # define ea_idebug(inode, f...) do { \
 		printk(KERN_DEBUG "inode %s:%lu: ", \
@@ -255,7 +250,7 @@  cleanup:
 	return error;
 }
 
-static int
+int
 ext4_xattr_ibody_get(struct inode *inode, int name_index, const char *name,
 		     void *buffer, size_t buffer_size)
 {
@@ -522,21 +517,6 @@  static size_t ext4_xattr_free_space(struct ext4_xattr_entry *last,
 	return (*min_offs - ((void *)last - base) - sizeof(__u32));
 }
 
-struct ext4_xattr_info {
-	int name_index;
-	const char *name;
-	const void *value;
-	size_t value_len;
-};
-
-struct ext4_xattr_search {
-	struct ext4_xattr_entry *first;
-	void *base;
-	void *end;
-	struct ext4_xattr_entry *here;
-	int not_found;
-};
-
 static int
 ext4_xattr_set_entry(struct ext4_xattr_info *i, struct ext4_xattr_search *s)
 {
@@ -890,14 +870,8 @@  bad_block:
 #undef header
 }
 
-struct ext4_xattr_ibody_find {
-	struct ext4_xattr_search s;
-	struct ext4_iloc iloc;
-};
-
-static int
-ext4_xattr_ibody_find(struct inode *inode, struct ext4_xattr_info *i,
-		      struct ext4_xattr_ibody_find *is)
+int ext4_xattr_ibody_find(struct inode *inode, struct ext4_xattr_info *i,
+			  struct ext4_xattr_ibody_find *is)
 {
 	struct ext4_xattr_ibody_header *header;
 	struct ext4_inode *raw_inode;
@@ -925,10 +899,33 @@  ext4_xattr_ibody_find(struct inode *inode, struct ext4_xattr_info *i,
 	return 0;
 }
 
-static int
-ext4_xattr_ibody_set(handle_t *handle, struct inode *inode,
-		     struct ext4_xattr_info *i,
-		     struct ext4_xattr_ibody_find *is)
+int ext4_xattr_ibody_inline_set(handle_t *handle, struct inode *inode,
+				struct ext4_xattr_info *i,
+				struct ext4_xattr_ibody_find *is)
+{
+	struct ext4_xattr_ibody_header *header;
+	struct ext4_xattr_search *s = &is->s;
+	int error;
+
+	if (EXT4_I(inode)->i_extra_isize == 0)
+		return -ENOSPC;
+	error = ext4_xattr_set_entry(i, s);
+	if (error)
+		return error;
+	header = IHDR(inode, ext4_raw_inode(&is->iloc));
+	if (!IS_LAST_ENTRY(s->first)) {
+		header->h_magic = cpu_to_le32(EXT4_XATTR_MAGIC);
+		ext4_set_inode_state(inode, EXT4_STATE_XATTR);
+	} else {
+		header->h_magic = cpu_to_le32(0);
+		ext4_clear_inode_state(inode, EXT4_STATE_XATTR);
+	}
+	return 0;
+}
+
+int ext4_xattr_ibody_set(handle_t *handle, struct inode *inode,
+			 struct ext4_xattr_info *i,
+			 struct ext4_xattr_ibody_find *is)
 {
 	struct ext4_xattr_ibody_header *header;
 	struct ext4_xattr_search *s = &is->s;
diff --git a/fs/ext4/xattr.h b/fs/ext4/xattr.h
index 25b7387..2879761 100644
--- a/fs/ext4/xattr.h
+++ b/fs/ext4/xattr.h
@@ -63,6 +63,32 @@  struct ext4_xattr_entry {
 		EXT4_I(inode)->i_extra_isize))
 #define IFIRST(hdr) ((struct ext4_xattr_entry *)((hdr)+1))
 
+#define BHDR(bh) ((struct ext4_xattr_header *)((bh)->b_data))
+#define ENTRY(ptr) ((struct ext4_xattr_entry *)(ptr))
+#define BFIRST(bh) ENTRY(BHDR(bh)+1)
+#define IS_LAST_ENTRY(entry) (*(__u32 *)(entry) == 0)
+
+
+struct ext4_xattr_info {
+	int name_index;
+	const char *name;
+	const void *value;
+	size_t value_len;
+};
+
+struct ext4_xattr_search {
+	struct ext4_xattr_entry *first;
+	void *base;
+	void *end;
+	struct ext4_xattr_entry *here;
+	int not_found;
+};
+
+struct ext4_xattr_ibody_find {
+	struct ext4_xattr_search s;
+	struct ext4_iloc iloc;
+};
+
 # ifdef CONFIG_EXT4_FS_XATTR
 
 extern const struct xattr_handler ext4_xattr_user_handler;
@@ -88,6 +114,15 @@  extern void ext4_exit_xattr(void);
 
 extern const struct xattr_handler *ext4_xattr_handlers[];
 
+extern int ext4_xattr_ibody_find(struct inode *inode, struct ext4_xattr_info *i,
+				 struct ext4_xattr_ibody_find *is);
+extern int ext4_xattr_ibody_inline_set(handle_t *handle, struct inode *inode,
+				       struct ext4_xattr_info *i,
+				       struct ext4_xattr_ibody_find *is);
+extern int ext4_xattr_ibody_get(struct inode *inode, int name_index,
+				const char *name,
+				void *buffer, size_t buffer_size);
+
 # else  /* CONFIG_EXT4_FS_XATTR */
 
 static inline int
@@ -141,6 +176,28 @@  ext4_expand_extra_isize_ea(struct inode *inode, int new_extra_isize,
 
 #define ext4_xattr_handlers	NULL
 
+static inline int
+ext4_xattr_ibody_find(struct inode *inode, struct ext4_xattr_info *i,
+		      struct ext4_xattr_ibody_find *is)
+{
+	return -EOPNOTSUPP;
+}
+
+static inline int
+ext4_xattr_ibody_set(handle_t *handle, struct inode *inode,
+		     struct ext4_xattr_info *i,
+		     struct ext4_xattr_ibody_find *is)
+{
+	return -EOPNOTSUPP;
+}
+
+extern int ext4_xattr_ibody_get(struct inode *inode, int name_index,
+				const char *name,
+				void *buffer, size_t buffer_size)
+{
+	return -EOPNOTSUPP;
+}
+
 # endif  /* CONFIG_EXT4_FS_XATTR */
 
 #ifdef CONFIG_EXT4_FS_SECURITY