Lines Matching refs:xattr
10 #include <linux/xattr.h>
19 struct ceph_inode_xattr *xattr);
575 struct ceph_inode_xattr *xattr = NULL;
582 xattr = rb_entry(parent, struct ceph_inode_xattr, node);
583 c = strncmp(name, xattr->name, min(name_len, xattr->name_len));
589 if (name_len == xattr->name_len)
591 else if (name_len < xattr->name_len)
596 xattr = NULL;
602 if (xattr && (flags & XATTR_CREATE))
604 else if (!xattr && (flags & XATTR_REPLACE))
613 if (xattr)
614 __remove_xattr(ci, xattr);
621 if (!xattr) {
623 xattr = *newxattr;
624 xattr->name = name;
625 xattr->name_len = name_len;
626 xattr->should_free_name = update_xattr;
633 if (xattr->should_free_val)
634 kfree(xattr->val);
638 name = xattr->name;
640 ci->i_xattrs.names_size -= xattr->name_len;
641 ci->i_xattrs.vals_size -= xattr->val_len;
646 xattr->val = val;
648 xattr->val = "";
650 xattr->val_len = val_len;
651 xattr->dirty = update_xattr;
652 xattr->should_free_val = (val && update_xattr);
655 rb_link_node(&xattr->node, parent, p);
656 rb_insert_color(&xattr->node, &ci->i_xattrs.index);
660 dout("%s added %llx.%llx xattr %p %.*s=%.*s%s\n", __func__,
661 ceph_vinop(&ci->netfs.inode), xattr, name_len, name,
673 struct ceph_inode_xattr *xattr = NULL;
680 xattr = rb_entry(parent, struct ceph_inode_xattr, node);
681 c = strncmp(name, xattr->name, xattr->name_len);
682 if (c == 0 && name_len > xattr->name_len)
689 int len = min(xattr->val_len, MAX_XATTR_VAL_PRINT_LEN);
692 xattr->val, xattr->val_len > len ? "..." : "");
693 return xattr;
702 static void __free_xattr(struct ceph_inode_xattr *xattr)
704 BUG_ON(!xattr);
706 if (xattr->should_free_name)
707 kfree(xattr->name);
708 if (xattr->should_free_val)
709 kfree(xattr->val);
711 kfree(xattr);
715 struct ceph_inode_xattr *xattr)
717 if (!xattr)
720 rb_erase(&xattr->node, &ci->i_xattrs.index);
722 if (xattr->should_free_name)
723 kfree(xattr->name);
724 if (xattr->should_free_val)
725 kfree(xattr->val);
727 ci->i_xattrs.names_size -= xattr->name_len;
728 ci->i_xattrs.vals_size -= xattr->val_len;
730 kfree(xattr);
739 struct ceph_inode_xattr *xattr = NULL;
745 xattr = rb_entry(p, struct ceph_inode_xattr, node);
746 memcpy(dest, xattr->name, xattr->name_len);
747 dest[xattr->name_len] = '\0';
749 dout("dest=%s %p (%s) (%d/%d)\n", dest, xattr, xattr->name,
750 xattr->name_len, ci->i_xattrs.names_size);
752 dest += xattr->name_len + 1;
762 struct ceph_inode_xattr *xattr = NULL;
769 xattr = rb_entry(p, struct ceph_inode_xattr, node);
773 xattr->name_len, xattr->name);
776 __free_xattr(xattr);
810 /* updated internal xattr rb tree */
878 * 4 bytes for the length, and additional 4 bytes per each xattr name,
903 struct ceph_inode_xattr *xattr = NULL;
918 xattr = rb_entry(p, struct ceph_inode_xattr, node);
920 ceph_encode_32(&dest, xattr->name_len);
921 memcpy(dest, xattr->name, xattr->name_len);
922 dest += xattr->name_len;
923 ceph_encode_32(&dest, xattr->val_len);
924 memcpy(dest, xattr->val, xattr->val_len);
925 dest += xattr->val_len;
966 struct ceph_inode_xattr *xattr;
974 /* let's see if a virtual xattr was requested */
1011 /* security module gets xattr while filling trace */
1030 xattr = __get_xattr(ci, name);
1031 if (!xattr)
1035 if (size && size < xattr->val_len)
1038 err = xattr->val_len;
1042 memcpy(value, xattr->val, xattr->val_len);
1078 /* add 1 byte for each xattr due to the null termination */
1151 dout("xattr.ver (before): %lld\n", ci->i_xattrs.version);
1154 dout("xattr.ver (after): %lld\n", ci->i_xattrs.version);
1177 struct ceph_inode_xattr *xattr = NULL;
1197 /* preallocate memory for xattr name, value, index node */
1209 xattr = kmalloc(sizeof(struct ceph_inode_xattr), GFP_NOFS);
1210 if (!xattr)
1262 flags, value ? 1 : -1, &xattr);
1286 /* security module set xattr while filling trace */
1307 kfree(xattr);