All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] ceph: pass inode rather than table to ceph_match_vxattr()
@ 2012-02-29  3:13 Alex Elder
  2012-02-29  4:33 ` Yehuda Sadeh Weinraub
  2012-03-02 19:27 ` Sage Weil
  0 siblings, 2 replies; 3+ messages in thread
From: Alex Elder @ 2012-02-29  3:13 UTC (permalink / raw)
  To: ceph-devel

All callers of ceph_match_vxattr() determine what to pass as the
first argument by calling ceph_inode_vxattrs(inode).  Just do that
inside ceph_match_vxattr() itself, changing it to take an inode
rather than the vxattr pointer as its first argument.

Also ensure the function works correctly for an empty table (i.e.,
containing only a terminating null entry).

Signed-off-by: Alex Elder <elder@dreamhost.com>
---
  fs/ceph/xattr.c |   42 +++++++++++++++++++-----------------------
  1 files changed, 19 insertions(+), 23 deletions(-)

diff --git a/fs/ceph/xattr.c b/fs/ceph/xattr.c
index b98b91d..bec9c30 100644
--- a/fs/ceph/xattr.c
+++ b/fs/ceph/xattr.c
@@ -126,14 +126,18 @@ static struct ceph_vxattr_cb 
*ceph_inode_vxattrs(struct inode *inode)
  	return NULL;
  }

-static struct ceph_vxattr_cb *ceph_match_vxattr(struct ceph_vxattr_cb 
*vxattr,
+static struct ceph_vxattr_cb *ceph_match_vxattr(struct inode *inode,
  						const char *name)
  {
-	do {
-		if (strcmp(vxattr->name, name) == 0)
-			return vxattr;
-		vxattr++;
-	} while (vxattr->name);
+	struct ceph_vxattr_cb *vxattr = ceph_inode_vxattrs(inode);
+
+	if (vxattr)
+		while (vxattr->name) {
+			if (!strcmp(vxattr->name, name))
+				return vxattr;
+			vxattr++;
+		}
+
  	return NULL;
  }

@@ -502,7 +506,6 @@ ssize_t ceph_getxattr(struct dentry *dentry, const 
char *name, void *value,
  {
  	struct inode *inode = dentry->d_inode;
  	struct ceph_inode_info *ci = ceph_inode(inode);
-	struct ceph_vxattr_cb *vxattrs = ceph_inode_vxattrs(inode);
  	int err;
  	struct ceph_inode_xattr *xattr;
  	struct ceph_vxattr_cb *vxattr = NULL;
@@ -511,8 +514,7 @@ ssize_t ceph_getxattr(struct dentry *dentry, const 
char *name, void *value,
  		return -ENODATA;

  	/* let's see if a virtual xattr was requested */
-	if (vxattrs)
-		vxattr = ceph_match_vxattr(vxattrs, name);
+	vxattr = ceph_match_vxattr(inode, name);

  	spin_lock(&ci->i_ceph_lock);
  	dout("getxattr %p ver=%lld index_ver=%lld\n", inode,
@@ -698,8 +700,8 @@ int ceph_setxattr(struct dentry *dentry, const char 
*name,
  		  const void *value, size_t size, int flags)
  {
  	struct inode *inode = dentry->d_inode;
+	struct ceph_vxattr_cb *vxattr;
  	struct ceph_inode_info *ci = ceph_inode(inode);
-	struct ceph_vxattr_cb *vxattrs = ceph_inode_vxattrs(inode);
  	int err;
  	int name_len = strlen(name);
  	int val_len = size;
@@ -716,12 +718,9 @@ int ceph_setxattr(struct dentry *dentry, const char 
*name,
  	if (!ceph_is_valid_xattr(name))
  		return -EOPNOTSUPP;

-	if (vxattrs) {
-		struct ceph_vxattr_cb *vxattr =
-			ceph_match_vxattr(vxattrs, name);
-		if (vxattr && vxattr->readonly)
-			return -EOPNOTSUPP;
-	}
+	vxattr = ceph_match_vxattr(inode, name);
+	if (vxattr && vxattr->readonly)
+		return -EOPNOTSUPP;

  	/* preallocate memory for xattr name, value, index node */
  	err = -ENOMEM;
@@ -814,8 +813,8 @@ static int ceph_send_removexattr(struct dentry 
*dentry, const char *name)
  int ceph_removexattr(struct dentry *dentry, const char *name)
  {
  	struct inode *inode = dentry->d_inode;
+	struct ceph_vxattr_cb *vxattr;
  	struct ceph_inode_info *ci = ceph_inode(inode);
-	struct ceph_vxattr_cb *vxattrs = ceph_inode_vxattrs(inode);
  	int issued;
  	int err;
  	int dirty;
@@ -826,12 +825,9 @@ int ceph_removexattr(struct dentry *dentry, const 
char *name)
  	if (!ceph_is_valid_xattr(name))
  		return -EOPNOTSUPP;

-	if (vxattrs) {
-		struct ceph_vxattr_cb *vxattr =
-			ceph_match_vxattr(vxattrs, name);
-		if (vxattr && vxattr->readonly)
-			return -EOPNOTSUPP;
-	}
+	vxattr = ceph_match_vxattr(inode, name);
+	if (vxattr && vxattr->readonly)
+		return -EOPNOTSUPP;

  	spin_lock(&ci->i_ceph_lock);
  	__build_xattrs(inode);
-- 
1.7.5.4


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

* Re: [PATCH] ceph: pass inode rather than table to ceph_match_vxattr()
  2012-02-29  3:13 [PATCH] ceph: pass inode rather than table to ceph_match_vxattr() Alex Elder
@ 2012-02-29  4:33 ` Yehuda Sadeh Weinraub
  2012-03-02 19:27 ` Sage Weil
  1 sibling, 0 replies; 3+ messages in thread
From: Yehuda Sadeh Weinraub @ 2012-02-29  4:33 UTC (permalink / raw)
  To: Alex Elder; +Cc: ceph-devel

On Tue, Feb 28, 2012 at 7:13 PM, Alex Elder <elder@dreamhost.com> wrote:
>
> All callers of ceph_match_vxattr() determine what to pass as the
> first argument by calling ceph_inode_vxattrs(inode).  Just do that
> inside ceph_match_vxattr() itself, changing it to take an inode
> rather than the vxattr pointer as its first argument.
>
> Also ensure the function works correctly for an empty table (i.e.,
> containing only a terminating null entry).
>
> Signed-off-by: Alex Elder <elder@dreamhost.com>
> ---
>  fs/ceph/xattr.c |   42 +++++++++++++++++++-----------------------
>  1 files changed, 19 insertions(+), 23 deletions(-)
>
> diff --git a/fs/ceph/xattr.c b/fs/ceph/xattr.c
> index b98b91d..bec9c30 100644
> --- a/fs/ceph/xattr.c
> +++ b/fs/ceph/xattr.c
> @@ -126,14 +126,18 @@ static struct ceph_vxattr_cb
> *ceph_inode_vxattrs(struct inode *inode)
>        return NULL;
>  }
>
> -static struct ceph_vxattr_cb *ceph_match_vxattr(struct ceph_vxattr_cb
> *vxattr,
> +static struct ceph_vxattr_cb *ceph_match_vxattr(struct inode *inode,
>                                                const char *name)
>  {
> -       do {
> -               if (strcmp(vxattr->name, name) == 0)
> -                       return vxattr;
> -               vxattr++;
> -       } while (vxattr->name);
> +       struct ceph_vxattr_cb *vxattr = ceph_inode_vxattrs(inode);
> +
> +       if (vxattr)

if (vxattr) {

> +               while (vxattr->name) {
> +                       if (!strcmp(vxattr->name, name))
> +                               return vxattr;
> +                       vxattr++;
> +               }
> +

}

>        return NULL;
>  }
>
> @@ -502,7 +506,6 @@ ssize_t ceph_getxattr(struct dentry *dentry, const
> char *name, void *value,
>  {
>        struct inode *inode = dentry->d_inode;
>        struct ceph_inode_info *ci = ceph_inode(inode);
> -       struct ceph_vxattr_cb *vxattrs = ceph_inode_vxattrs(inode);
>        int err;
>        struct ceph_inode_xattr *xattr;
>        struct ceph_vxattr_cb *vxattr = NULL;
> @@ -511,8 +514,7 @@ ssize_t ceph_getxattr(struct dentry *dentry, const
> char *name, void *value,
>                return -ENODATA;
>
>        /* let's see if a virtual xattr was requested */
> -       if (vxattrs)
> -               vxattr = ceph_match_vxattr(vxattrs, name);
> +       vxattr = ceph_match_vxattr(inode, name);
>
>        spin_lock(&ci->i_ceph_lock);
>        dout("getxattr %p ver=%lld index_ver=%lld\n", inode,
> @@ -698,8 +700,8 @@ int ceph_setxattr(struct dentry *dentry, const char
> *name,
>                  const void *value, size_t size, int flags)
>  {
>        struct inode *inode = dentry->d_inode;
> +       struct ceph_vxattr_cb *vxattr;
>        struct ceph_inode_info *ci = ceph_inode(inode);
> -       struct ceph_vxattr_cb *vxattrs = ceph_inode_vxattrs(inode);
>        int err;
>        int name_len = strlen(name);
>        int val_len = size;
> @@ -716,12 +718,9 @@ int ceph_setxattr(struct dentry *dentry, const char
> *name,
>        if (!ceph_is_valid_xattr(name))
>                return -EOPNOTSUPP;
>
> -       if (vxattrs) {
> -               struct ceph_vxattr_cb *vxattr =
> -                       ceph_match_vxattr(vxattrs, name);
> -               if (vxattr && vxattr->readonly)
> -                       return -EOPNOTSUPP;
> -       }
> +       vxattr = ceph_match_vxattr(inode, name);
> +       if (vxattr && vxattr->readonly)
> +               return -EOPNOTSUPP;
>
>        /* preallocate memory for xattr name, value, index node */
>        err = -ENOMEM;
> @@ -814,8 +813,8 @@ static int ceph_send_removexattr(struct dentry
> *dentry, const char *name)
>  int ceph_removexattr(struct dentry *dentry, const char *name)
>  {
>        struct inode *inode = dentry->d_inode;
> +       struct ceph_vxattr_cb *vxattr;
>        struct ceph_inode_info *ci = ceph_inode(inode);
> -       struct ceph_vxattr_cb *vxattrs = ceph_inode_vxattrs(inode);
>        int issued;
>        int err;
>        int dirty;
> @@ -826,12 +825,9 @@ int ceph_removexattr(struct dentry *dentry, const
> char *name)
>        if (!ceph_is_valid_xattr(name))
>                return -EOPNOTSUPP;
>
> -       if (vxattrs) {
> -               struct ceph_vxattr_cb *vxattr =
> -                       ceph_match_vxattr(vxattrs, name);
> -               if (vxattr && vxattr->readonly)
> -                       return -EOPNOTSUPP;
> -       }
> +       vxattr = ceph_match_vxattr(inode, name);
> +       if (vxattr && vxattr->readonly)
> +               return -EOPNOTSUPP;
>
>        spin_lock(&ci->i_ceph_lock);
>        __build_xattrs(inode);
> --
> 1.7.5.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* Re: [PATCH] ceph: pass inode rather than table to ceph_match_vxattr()
  2012-02-29  3:13 [PATCH] ceph: pass inode rather than table to ceph_match_vxattr() Alex Elder
  2012-02-29  4:33 ` Yehuda Sadeh Weinraub
@ 2012-03-02 19:27 ` Sage Weil
  1 sibling, 0 replies; 3+ messages in thread
From: Sage Weil @ 2012-03-02 19:27 UTC (permalink / raw)
  To: Alex Elder; +Cc: ceph-devel

Reviewed-by: Sage Weil <sage@newdream.net>


On Tue, 28 Feb 2012, Alex Elder wrote:

> All callers of ceph_match_vxattr() determine what to pass as the
> first argument by calling ceph_inode_vxattrs(inode).  Just do that
> inside ceph_match_vxattr() itself, changing it to take an inode
> rather than the vxattr pointer as its first argument.
> 
> Also ensure the function works correctly for an empty table (i.e.,
> containing only a terminating null entry).
> 
> Signed-off-by: Alex Elder <elder@dreamhost.com>
> ---
>  fs/ceph/xattr.c |   42 +++++++++++++++++++-----------------------
>  1 files changed, 19 insertions(+), 23 deletions(-)
> 
> diff --git a/fs/ceph/xattr.c b/fs/ceph/xattr.c
> index b98b91d..bec9c30 100644
> --- a/fs/ceph/xattr.c
> +++ b/fs/ceph/xattr.c
> @@ -126,14 +126,18 @@ static struct ceph_vxattr_cb *ceph_inode_vxattrs(struct
> inode *inode)
>  	return NULL;
>  }
> 
> -static struct ceph_vxattr_cb *ceph_match_vxattr(struct ceph_vxattr_cb
> *vxattr,
> +static struct ceph_vxattr_cb *ceph_match_vxattr(struct inode *inode,
>  						const char *name)
>  {
> -	do {
> -		if (strcmp(vxattr->name, name) == 0)
> -			return vxattr;
> -		vxattr++;
> -	} while (vxattr->name);
> +	struct ceph_vxattr_cb *vxattr = ceph_inode_vxattrs(inode);
> +
> +	if (vxattr)
> +		while (vxattr->name) {
> +			if (!strcmp(vxattr->name, name))
> +				return vxattr;
> +			vxattr++;
> +		}
> +
>  	return NULL;
>  }
> 
> @@ -502,7 +506,6 @@ ssize_t ceph_getxattr(struct dentry *dentry, const char
> *name, void *value,
>  {
>  	struct inode *inode = dentry->d_inode;
>  	struct ceph_inode_info *ci = ceph_inode(inode);
> -	struct ceph_vxattr_cb *vxattrs = ceph_inode_vxattrs(inode);
>  	int err;
>  	struct ceph_inode_xattr *xattr;
>  	struct ceph_vxattr_cb *vxattr = NULL;
> @@ -511,8 +514,7 @@ ssize_t ceph_getxattr(struct dentry *dentry, const char
> *name, void *value,
>  		return -ENODATA;
> 
>  	/* let's see if a virtual xattr was requested */
> -	if (vxattrs)
> -		vxattr = ceph_match_vxattr(vxattrs, name);
> +	vxattr = ceph_match_vxattr(inode, name);
> 
>  	spin_lock(&ci->i_ceph_lock);
>  	dout("getxattr %p ver=%lld index_ver=%lld\n", inode,
> @@ -698,8 +700,8 @@ int ceph_setxattr(struct dentry *dentry, const char *name,
>  		  const void *value, size_t size, int flags)
>  {
>  	struct inode *inode = dentry->d_inode;
> +	struct ceph_vxattr_cb *vxattr;
>  	struct ceph_inode_info *ci = ceph_inode(inode);
> -	struct ceph_vxattr_cb *vxattrs = ceph_inode_vxattrs(inode);
>  	int err;
>  	int name_len = strlen(name);
>  	int val_len = size;
> @@ -716,12 +718,9 @@ int ceph_setxattr(struct dentry *dentry, const char
> *name,
>  	if (!ceph_is_valid_xattr(name))
>  		return -EOPNOTSUPP;
> 
> -	if (vxattrs) {
> -		struct ceph_vxattr_cb *vxattr =
> -			ceph_match_vxattr(vxattrs, name);
> -		if (vxattr && vxattr->readonly)
> -			return -EOPNOTSUPP;
> -	}
> +	vxattr = ceph_match_vxattr(inode, name);
> +	if (vxattr && vxattr->readonly)
> +		return -EOPNOTSUPP;
> 
>  	/* preallocate memory for xattr name, value, index node */
>  	err = -ENOMEM;
> @@ -814,8 +813,8 @@ static int ceph_send_removexattr(struct dentry *dentry,
> const char *name)
>  int ceph_removexattr(struct dentry *dentry, const char *name)
>  {
>  	struct inode *inode = dentry->d_inode;
> +	struct ceph_vxattr_cb *vxattr;
>  	struct ceph_inode_info *ci = ceph_inode(inode);
> -	struct ceph_vxattr_cb *vxattrs = ceph_inode_vxattrs(inode);
>  	int issued;
>  	int err;
>  	int dirty;
> @@ -826,12 +825,9 @@ int ceph_removexattr(struct dentry *dentry, const char
> *name)
>  	if (!ceph_is_valid_xattr(name))
>  		return -EOPNOTSUPP;
> 
> -	if (vxattrs) {
> -		struct ceph_vxattr_cb *vxattr =
> -			ceph_match_vxattr(vxattrs, name);
> -		if (vxattr && vxattr->readonly)
> -			return -EOPNOTSUPP;
> -	}
> +	vxattr = ceph_match_vxattr(inode, name);
> +	if (vxattr && vxattr->readonly)
> +		return -EOPNOTSUPP;
> 
>  	spin_lock(&ci->i_ceph_lock);
>  	__build_xattrs(inode);
> -- 
> 1.7.5.4
> 
> --
> To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
> 

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

end of thread, other threads:[~2012-03-02 19:27 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-02-29  3:13 [PATCH] ceph: pass inode rather than table to ceph_match_vxattr() Alex Elder
2012-02-29  4:33 ` Yehuda Sadeh Weinraub
2012-03-02 19:27 ` Sage Weil

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.