Message ID | 20230228125531.165361-1-xiubli@redhat.com |
---|---|
State | New |
Headers | show |
Series | ceph: do not print the whole xattr value if it's too long | expand |
On Tue, 2023-02-28 at 20:55 +0800, xiubli@redhat.com wrote: > From: Xiubo Li <xiubli@redhat.com> > > If the xattr's value size is long enough the kernel will warn and > then will fail the xfstests test case. > > Just print part of the value string if it's too long. > > Cc: stable@vger.kernel.org > URL: https://tracker.ceph.com/issues/58404 > Signed-off-by: Xiubo Li <xiubli@redhat.com> > --- > fs/ceph/xattr.c | 13 +++++++++---- > 1 file changed, 9 insertions(+), 4 deletions(-) > > diff --git a/fs/ceph/xattr.c b/fs/ceph/xattr.c > index b10d459c2326..6638bb0ec10f 100644 > --- a/fs/ceph/xattr.c > +++ b/fs/ceph/xattr.c > @@ -561,6 +561,7 @@ static struct ceph_vxattr *ceph_match_vxattr(struct inode *inode, > return NULL; > } > > +#define XATTR_MAX_VAL 256 > static int __set_xattr(struct ceph_inode_info *ci, > const char *name, int name_len, > const char *val, int val_len, > @@ -654,8 +655,10 @@ static int __set_xattr(struct ceph_inode_info *ci, > dout("__set_xattr_val p=%p\n", p); > } > > - dout("__set_xattr_val added %llx.%llx xattr %p %.*s=%.*s\n", > - ceph_vinop(&ci->netfs.inode), xattr, name_len, name, val_len, val); > + dout("__set_xattr_val added %llx.%llx xattr %p %.*s=%.*s%s\n", > + ceph_vinop(&ci->netfs.inode), xattr, name_len, name, > + val_len > XATTR_MAX_VAL ? XATTR_MAX_VAL : val_len, val, min(val_len, XATTR_MAX_VAL), val,... > + val_len > XATTR_MAX_VAL ? "..." : ""); > > return 0; > } > @@ -681,8 +684,10 @@ static struct ceph_inode_xattr *__get_xattr(struct ceph_inode_info *ci, > else if (c > 0) > p = &(*p)->rb_right; > else { > - dout("__get_xattr %s: found %.*s\n", name, > - xattr->val_len, xattr->val); > + int len = xattr->val_len; > + dout("__get_xattr %s: found %.*s%s\n", name, > + len > XATTR_MAX_VAL ? XATTR_MAX_VAL : len, min(len, XATTR_MAX_VAL) > + xattr->val, len > XATTR_MAX_VAL ? "..." : ""); > return xattr; > } > }
On 28/02/2023 21:29, Jeff Layton wrote: > On Tue, 2023-02-28 at 20:55 +0800, xiubli@redhat.com wrote: >> From: Xiubo Li <xiubli@redhat.com> >> >> If the xattr's value size is long enough the kernel will warn and >> then will fail the xfstests test case. >> >> Just print part of the value string if it's too long. >> >> Cc: stable@vger.kernel.org >> URL: https://tracker.ceph.com/issues/58404 >> Signed-off-by: Xiubo Li <xiubli@redhat.com> >> --- >> fs/ceph/xattr.c | 13 +++++++++---- >> 1 file changed, 9 insertions(+), 4 deletions(-) >> >> diff --git a/fs/ceph/xattr.c b/fs/ceph/xattr.c >> index b10d459c2326..6638bb0ec10f 100644 >> --- a/fs/ceph/xattr.c >> +++ b/fs/ceph/xattr.c >> @@ -561,6 +561,7 @@ static struct ceph_vxattr *ceph_match_vxattr(struct inode *inode, >> return NULL; >> } >> >> +#define XATTR_MAX_VAL 256 >> static int __set_xattr(struct ceph_inode_info *ci, >> const char *name, int name_len, >> const char *val, int val_len, >> @@ -654,8 +655,10 @@ static int __set_xattr(struct ceph_inode_info *ci, >> dout("__set_xattr_val p=%p\n", p); >> } >> >> - dout("__set_xattr_val added %llx.%llx xattr %p %.*s=%.*s\n", >> - ceph_vinop(&ci->netfs.inode), xattr, name_len, name, val_len, val); >> + dout("__set_xattr_val added %llx.%llx xattr %p %.*s=%.*s%s\n", >> + ceph_vinop(&ci->netfs.inode), xattr, name_len, name, >> + val_len > XATTR_MAX_VAL ? XATTR_MAX_VAL : val_len, val, > min(val_len, XATTR_MAX_VAL), val,... > >> + val_len > XATTR_MAX_VAL ? "..." : ""); >> >> return 0; >> } >> @@ -681,8 +684,10 @@ static struct ceph_inode_xattr *__get_xattr(struct ceph_inode_info *ci, >> else if (c > 0) >> p = &(*p)->rb_right; >> else { >> - dout("__get_xattr %s: found %.*s\n", name, >> - xattr->val_len, xattr->val); >> + int len = xattr->val_len; >> + dout("__get_xattr %s: found %.*s%s\n", name, >> + len > XATTR_MAX_VAL ? XATTR_MAX_VAL : len, > min(len, XATTR_MAX_VAL) Cool. I will revise this. Thanks Jeff. > >> + xattr->val, len > XATTR_MAX_VAL ? "..." : ""); >> return xattr; >> } >> }
diff --git a/fs/ceph/xattr.c b/fs/ceph/xattr.c index b10d459c2326..6638bb0ec10f 100644 --- a/fs/ceph/xattr.c +++ b/fs/ceph/xattr.c @@ -561,6 +561,7 @@ static struct ceph_vxattr *ceph_match_vxattr(struct inode *inode, return NULL; } +#define XATTR_MAX_VAL 256 static int __set_xattr(struct ceph_inode_info *ci, const char *name, int name_len, const char *val, int val_len, @@ -654,8 +655,10 @@ static int __set_xattr(struct ceph_inode_info *ci, dout("__set_xattr_val p=%p\n", p); } - dout("__set_xattr_val added %llx.%llx xattr %p %.*s=%.*s\n", - ceph_vinop(&ci->netfs.inode), xattr, name_len, name, val_len, val); + dout("__set_xattr_val added %llx.%llx xattr %p %.*s=%.*s%s\n", + ceph_vinop(&ci->netfs.inode), xattr, name_len, name, + val_len > XATTR_MAX_VAL ? XATTR_MAX_VAL : val_len, val, + val_len > XATTR_MAX_VAL ? "..." : ""); return 0; } @@ -681,8 +684,10 @@ static struct ceph_inode_xattr *__get_xattr(struct ceph_inode_info *ci, else if (c > 0) p = &(*p)->rb_right; else { - dout("__get_xattr %s: found %.*s\n", name, - xattr->val_len, xattr->val); + int len = xattr->val_len; + dout("__get_xattr %s: found %.*s%s\n", name, + len > XATTR_MAX_VAL ? XATTR_MAX_VAL : len, + xattr->val, len > XATTR_MAX_VAL ? "..." : ""); return xattr; } }