Lines Matching refs:xattr

10 #include <linux/xattr.h>
19 struct ceph_inode_xattr *xattr);
450 struct ceph_inode_xattr *xattr = NULL;
457 xattr = rb_entry(parent, struct ceph_inode_xattr, node);
458 c = strncmp(name, xattr->name, min(name_len, xattr->name_len));
464 if (name_len == xattr->name_len)
466 else if (name_len < xattr->name_len)
471 xattr = NULL;
477 if (xattr && (flags & XATTR_CREATE))
479 else if (!xattr && (flags & XATTR_REPLACE))
488 if (xattr)
489 __remove_xattr(ci, xattr);
496 if (!xattr) {
498 xattr = *newxattr;
499 xattr->name = name;
500 xattr->name_len = name_len;
501 xattr->should_free_name = update_xattr;
508 if (xattr->should_free_val)
509 kfree(xattr->val);
513 name = xattr->name;
515 ci->i_xattrs.names_size -= xattr->name_len;
516 ci->i_xattrs.vals_size -= xattr->val_len;
521 xattr->val = val;
523 xattr->val = "";
525 xattr->val_len = val_len;
526 xattr->dirty = update_xattr;
527 xattr->should_free_val = (val && update_xattr);
530 rb_link_node(&xattr->node, parent, p);
531 rb_insert_color(&xattr->node, &ci->i_xattrs.index);
535 dout("__set_xattr_val added %llx.%llx xattr %p %.*s=%.*s\n",
536 ceph_vinop(&ci->vfs_inode), xattr, name_len, name, val_len, val);
546 struct ceph_inode_xattr *xattr = NULL;
553 xattr = rb_entry(parent, struct ceph_inode_xattr, node);
554 c = strncmp(name, xattr->name, xattr->name_len);
555 if (c == 0 && name_len > xattr->name_len)
563 xattr->val_len, xattr->val);
564 return xattr;
573 static void __free_xattr(struct ceph_inode_xattr *xattr)
575 BUG_ON(!xattr);
577 if (xattr->should_free_name)
578 kfree(xattr->name);
579 if (xattr->should_free_val)
580 kfree(xattr->val);
582 kfree(xattr);
586 struct ceph_inode_xattr *xattr)
588 if (!xattr)
591 rb_erase(&xattr->node, &ci->i_xattrs.index);
593 if (xattr->should_free_name)
594 kfree(xattr->name);
595 if (xattr->should_free_val)
596 kfree(xattr->val);
598 ci->i_xattrs.names_size -= xattr->name_len;
599 ci->i_xattrs.vals_size -= xattr->val_len;
601 kfree(xattr);
610 struct ceph_inode_xattr *xattr = NULL;
616 xattr = rb_entry(p, struct ceph_inode_xattr, node);
617 memcpy(dest, xattr->name, xattr->name_len);
618 dest[xattr->name_len] = '\0';
620 dout("dest=%s %p (%s) (%d/%d)\n", dest, xattr, xattr->name,
621 xattr->name_len, ci->i_xattrs.names_size);
623 dest += xattr->name_len + 1;
633 struct ceph_inode_xattr *xattr = NULL;
640 xattr = rb_entry(p, struct ceph_inode_xattr, node);
644 xattr->name_len, xattr->name);
647 __free_xattr(xattr);
681 /* updated internal xattr rb tree */
749 * 4 bytes for the length, and additional 4 bytes per each xattr name,
774 struct ceph_inode_xattr *xattr = NULL;
789 xattr = rb_entry(p, struct ceph_inode_xattr, node);
791 ceph_encode_32(&dest, xattr->name_len);
792 memcpy(dest, xattr->name, xattr->name_len);
793 dest += xattr->name_len;
794 ceph_encode_32(&dest, xattr->val_len);
795 memcpy(dest, xattr->val, xattr->val_len);
796 dest += xattr->val_len;
837 struct ceph_inode_xattr *xattr;
842 /* let's see if a virtual xattr was requested */
871 /* security module gets xattr while filling trace */
890 xattr = __get_xattr(ci, name);
891 if (!xattr)
895 if (size && size < xattr->val_len)
898 err = xattr->val_len;
902 memcpy(value, xattr->val, xattr->val_len);
938 /* add 1 byte for each xattr due to the null termination */
1008 dout("xattr.ver (before): %lld\n", ci->i_xattrs.version);
1011 dout("xattr.ver (after): %lld\n", ci->i_xattrs.version);
1034 struct ceph_inode_xattr *xattr = NULL;
1054 /* preallocate memory for xattr name, value, index node */
1066 xattr = kmalloc(sizeof(struct ceph_inode_xattr), GFP_NOFS);
1067 if (!xattr)
1115 flags, value ? 1 : -1, &xattr);
1139 /* security module set xattr while filling trace */
1160 kfree(xattr);