Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

->getxattr(): pass dentry and inode as separate arguments

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

Al Viro ce23e640 b296821a

+94 -85
+6
Documentation/filesystems/porting
··· 525 525 set_delayed_call() where it used to set *cookie. 526 526 ->put_link() is gone - just give the destructor to set_delayed_call() 527 527 in ->get_link(). 528 + -- 529 + [mandatory] 530 + ->getxattr() and xattr_handler.get() get dentry and inode passed separately. 531 + dentry might be yet to be attached to inode, so do _not_ use its ->d_inode 532 + in the instances. Rationale: !@#!@# security_d_instantiate() needs to be 533 + called before we attach dentry to inode.
+2 -2
drivers/staging/lustre/lustre/llite/llite_internal.h
··· 1042 1042 /* llite/xattr.c */ 1043 1043 int ll_setxattr(struct dentry *dentry, const char *name, 1044 1044 const void *value, size_t size, int flags); 1045 - ssize_t ll_getxattr(struct dentry *dentry, const char *name, 1046 - void *buffer, size_t size); 1045 + ssize_t ll_getxattr(struct dentry *dentry, struct inode *inode, 1046 + const char *name, void *buffer, size_t size); 1047 1047 ssize_t ll_listxattr(struct dentry *dentry, char *buffer, size_t size); 1048 1048 int ll_removexattr(struct dentry *dentry, const char *name); 1049 1049
+2 -4
drivers/staging/lustre/lustre/llite/xattr.c
··· 451 451 return rc; 452 452 } 453 453 454 - ssize_t ll_getxattr(struct dentry *dentry, const char *name, 455 - void *buffer, size_t size) 454 + ssize_t ll_getxattr(struct dentry *dentry, struct inode *inode, 455 + const char *name, void *buffer, size_t size) 456 456 { 457 - struct inode *inode = d_inode(dentry); 458 - 459 457 LASSERT(inode); 460 458 LASSERT(name); 461 459
+2 -2
fs/bad_inode.c
··· 106 106 return -EIO; 107 107 } 108 108 109 - static ssize_t bad_inode_getxattr(struct dentry *dentry, const char *name, 110 - void *buffer, size_t size) 109 + static ssize_t bad_inode_getxattr(struct dentry *dentry, struct inode *inode, 110 + const char *name, void *buffer, size_t size) 111 111 { 112 112 return -EIO; 113 113 }
+1 -1
fs/ceph/super.h
··· 795 795 int __ceph_setxattr(struct dentry *, const char *, const void *, size_t, int); 796 796 ssize_t __ceph_getxattr(struct inode *, const char *, void *, size_t); 797 797 int __ceph_removexattr(struct dentry *, const char *); 798 - extern ssize_t ceph_getxattr(struct dentry *, const char *, void *, size_t); 798 + extern ssize_t ceph_getxattr(struct dentry *, struct inode *, const char *, void *, size_t); 799 799 extern ssize_t ceph_listxattr(struct dentry *, char *, size_t); 800 800 extern int ceph_removexattr(struct dentry *, const char *); 801 801 extern void __ceph_build_xattrs_blob(struct ceph_inode_info *ci);
+4 -4
fs/ceph/xattr.c
··· 804 804 return err; 805 805 } 806 806 807 - ssize_t ceph_getxattr(struct dentry *dentry, const char *name, void *value, 808 - size_t size) 807 + ssize_t ceph_getxattr(struct dentry *dentry, struct inode *inode, 808 + const char *name, void *value, size_t size) 809 809 { 810 810 if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN)) 811 - return generic_getxattr(dentry, name, value, size); 811 + return generic_getxattr(dentry, inode, name, value, size); 812 812 813 - return __ceph_getxattr(d_inode(dentry), name, value, size); 813 + return __ceph_getxattr(inode, name, value, size); 814 814 } 815 815 816 816 ssize_t ceph_listxattr(struct dentry *dentry, char *names, size_t size)
+1 -1
fs/cifs/cifsfs.h
··· 123 123 extern int cifs_removexattr(struct dentry *, const char *); 124 124 extern int cifs_setxattr(struct dentry *, const char *, const void *, 125 125 size_t, int); 126 - extern ssize_t cifs_getxattr(struct dentry *, const char *, void *, size_t); 126 + extern ssize_t cifs_getxattr(struct dentry *, struct inode *, const char *, void *, size_t); 127 127 extern ssize_t cifs_listxattr(struct dentry *, char *, size_t); 128 128 extern long cifs_ioctl(struct file *filep, unsigned int cmd, unsigned long arg); 129 129 #ifdef CONFIG_CIFS_NFSD_EXPORT
+3 -3
fs/cifs/xattr.c
··· 213 213 return rc; 214 214 } 215 215 216 - ssize_t cifs_getxattr(struct dentry *direntry, const char *ea_name, 217 - void *ea_value, size_t buf_size) 216 + ssize_t cifs_getxattr(struct dentry *direntry, struct inode *inode, 217 + const char *ea_name, void *ea_value, size_t buf_size) 218 218 { 219 219 ssize_t rc = -EOPNOTSUPP; 220 220 #ifdef CONFIG_CIFS_XATTR ··· 296 296 goto get_ea_exit; /* rc already EOPNOTSUPP */ 297 297 298 298 pacl = pTcon->ses->server->ops->get_acl(cifs_sb, 299 - d_inode(direntry), full_path, &acllen); 299 + inode, full_path, &acllen); 300 300 if (IS_ERR(pacl)) { 301 301 rc = PTR_ERR(pacl); 302 302 cifs_dbg(VFS, "%s: error %zd getting sec desc\n",
+4 -1
fs/ecryptfs/crypto.c
··· 1369 1369 ssize_t size; 1370 1370 int rc = 0; 1371 1371 1372 - size = ecryptfs_getxattr_lower(lower_dentry, ECRYPTFS_XATTR_NAME, 1372 + size = ecryptfs_getxattr_lower(lower_dentry, 1373 + ecryptfs_inode_to_lower(ecryptfs_inode), 1374 + ECRYPTFS_XATTR_NAME, 1373 1375 page_virt, ECRYPTFS_DEFAULT_EXTENT_SIZE); 1374 1376 if (size < 0) { 1375 1377 if (unlikely(ecryptfs_verbosity > 0)) ··· 1393 1391 int rc; 1394 1392 1395 1393 rc = ecryptfs_getxattr_lower(ecryptfs_dentry_to_lower(dentry), 1394 + ecryptfs_inode_to_lower(inode), 1396 1395 ECRYPTFS_XATTR_NAME, file_size, 1397 1396 ECRYPTFS_SIZE_AND_MARKER_BYTES); 1398 1397 if (rc < ECRYPTFS_SIZE_AND_MARKER_BYTES)
+2 -2
fs/ecryptfs/ecryptfs_kernel.h
··· 607 607 unsigned char *src, struct dentry *ecryptfs_dentry); 608 608 int ecryptfs_truncate(struct dentry *dentry, loff_t new_length); 609 609 ssize_t 610 - ecryptfs_getxattr_lower(struct dentry *lower_dentry, const char *name, 611 - void *value, size_t size); 610 + ecryptfs_getxattr_lower(struct dentry *lower_dentry, struct inode *lower_inode, 611 + const char *name, void *value, size_t size); 612 612 int 613 613 ecryptfs_setxattr(struct dentry *dentry, const char *name, const void *value, 614 614 size_t size, int flags);
+12 -11
fs/ecryptfs/inode.c
··· 1033 1033 } 1034 1034 1035 1035 ssize_t 1036 - ecryptfs_getxattr_lower(struct dentry *lower_dentry, const char *name, 1037 - void *value, size_t size) 1036 + ecryptfs_getxattr_lower(struct dentry *lower_dentry, struct inode *lower_inode, 1037 + const char *name, void *value, size_t size) 1038 1038 { 1039 1039 int rc = 0; 1040 1040 1041 - if (!d_inode(lower_dentry)->i_op->getxattr) { 1041 + if (!lower_inode->i_op->getxattr) { 1042 1042 rc = -EOPNOTSUPP; 1043 1043 goto out; 1044 1044 } 1045 - inode_lock(d_inode(lower_dentry)); 1046 - rc = d_inode(lower_dentry)->i_op->getxattr(lower_dentry, name, value, 1047 - size); 1048 - inode_unlock(d_inode(lower_dentry)); 1045 + inode_lock(lower_inode); 1046 + rc = lower_inode->i_op->getxattr(lower_dentry, lower_inode, 1047 + name, value, size); 1048 + inode_unlock(lower_inode); 1049 1049 out: 1050 1050 return rc; 1051 1051 } 1052 1052 1053 1053 static ssize_t 1054 - ecryptfs_getxattr(struct dentry *dentry, const char *name, void *value, 1055 - size_t size) 1054 + ecryptfs_getxattr(struct dentry *dentry, struct inode *inode, 1055 + const char *name, void *value, size_t size) 1056 1056 { 1057 - return ecryptfs_getxattr_lower(ecryptfs_dentry_to_lower(dentry), name, 1058 - value, size); 1057 + return ecryptfs_getxattr_lower(ecryptfs_dentry_to_lower(dentry), 1058 + ecryptfs_inode_to_lower(inode), 1059 + name, value, size); 1059 1060 } 1060 1061 1061 1062 static ssize_t
+2 -1
fs/ecryptfs/mmap.c
··· 436 436 goto out; 437 437 } 438 438 inode_lock(lower_inode); 439 - size = lower_inode->i_op->getxattr(lower_dentry, ECRYPTFS_XATTR_NAME, 439 + size = lower_inode->i_op->getxattr(lower_dentry, lower_inode, 440 + ECRYPTFS_XATTR_NAME, 440 441 xattr_virt, PAGE_CACHE_SIZE); 441 442 if (size < 0) 442 443 size = 8;
+2 -3
fs/fuse/dir.c
··· 1759 1759 return err; 1760 1760 } 1761 1761 1762 - static ssize_t fuse_getxattr(struct dentry *entry, const char *name, 1763 - void *value, size_t size) 1762 + static ssize_t fuse_getxattr(struct dentry *entry, struct inode *inode, 1763 + const char *name, void *value, size_t size) 1764 1764 { 1765 - struct inode *inode = d_inode(entry); 1766 1765 struct fuse_conn *fc = get_fuse_conn(inode); 1767 1766 FUSE_ARGS(args); 1768 1767 struct fuse_getxattr_in inarg;
+4 -5
fs/gfs2/inode.c
··· 1968 1968 return ret; 1969 1969 } 1970 1970 1971 - static ssize_t gfs2_getxattr(struct dentry *dentry, const char *name, 1972 - void *data, size_t size) 1971 + static ssize_t gfs2_getxattr(struct dentry *dentry, struct inode *inode, 1972 + const char *name, void *data, size_t size) 1973 1973 { 1974 - struct inode *inode = d_inode(dentry); 1975 1974 struct gfs2_inode *ip = GFS2_I(inode); 1976 1975 struct gfs2_holder gh; 1977 1976 int ret; 1978 1977 1979 1978 /* For selinux during lookup */ 1980 1979 if (gfs2_glock_is_locked_by_me(ip->i_gl)) 1981 - return generic_getxattr(dentry, name, data, size); 1980 + return generic_getxattr(dentry, inode, name, data, size); 1982 1981 1983 1982 gfs2_holder_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY, &gh); 1984 1983 ret = gfs2_glock_nq(&gh); 1985 1984 if (ret == 0) { 1986 - ret = generic_getxattr(dentry, name, data, size); 1985 + ret = generic_getxattr(dentry, inode, name, data, size); 1987 1986 gfs2_glock_dq(&gh); 1988 1987 } 1989 1988 gfs2_holder_uninit(&gh);
+2 -3
fs/hfs/attr.c
··· 56 56 return res; 57 57 } 58 58 59 - ssize_t hfs_getxattr(struct dentry *dentry, const char *name, 60 - void *value, size_t size) 59 + ssize_t hfs_getxattr(struct dentry *unused, struct inode *inode, 60 + const char *name, void *value, size_t size) 61 61 { 62 - struct inode *inode = d_inode(dentry); 63 62 struct hfs_find_data fd; 64 63 hfs_cat_rec rec; 65 64 struct hfs_cat_file *file;
+2 -2
fs/hfs/hfs_fs.h
··· 213 213 /* attr.c */ 214 214 extern int hfs_setxattr(struct dentry *dentry, const char *name, 215 215 const void *value, size_t size, int flags); 216 - extern ssize_t hfs_getxattr(struct dentry *dentry, const char *name, 217 - void *value, size_t size); 216 + extern ssize_t hfs_getxattr(struct dentry *dentry, struct inode *inode, 217 + const char *name, void *value, size_t size); 218 218 extern ssize_t hfs_listxattr(struct dentry *dentry, char *buffer, size_t size); 219 219 220 220 /* mdb.c */
+1 -1
fs/jfs/jfs_xattr.h
··· 57 57 extern int jfs_setxattr(struct dentry *, const char *, const void *, size_t, 58 58 int); 59 59 extern ssize_t __jfs_getxattr(struct inode *, const char *, void *, size_t); 60 - extern ssize_t jfs_getxattr(struct dentry *, const char *, void *, size_t); 60 + extern ssize_t jfs_getxattr(struct dentry *, struct inode *, const char *, void *, size_t); 61 61 extern ssize_t jfs_listxattr(struct dentry *, char *, size_t); 62 62 extern int jfs_removexattr(struct dentry *, const char *); 63 63
+4 -4
fs/jfs/xattr.c
··· 933 933 return size; 934 934 } 935 935 936 - ssize_t jfs_getxattr(struct dentry *dentry, const char *name, void *data, 937 - size_t buf_size) 936 + ssize_t jfs_getxattr(struct dentry *dentry, struct inode *inode, 937 + const char *name, void *data, size_t buf_size) 938 938 { 939 939 int err; 940 940 ··· 944 944 * for it via sb->s_xattr. 945 945 */ 946 946 if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN)) 947 - return generic_getxattr(dentry, name, data, buf_size); 947 + return generic_getxattr(dentry, inode, name, data, buf_size); 948 948 949 949 if (strncmp(name, XATTR_OS2_PREFIX, XATTR_OS2_PREFIX_LEN) == 0) { 950 950 /* ··· 959 959 return -EOPNOTSUPP; 960 960 } 961 961 962 - err = __jfs_getxattr(d_inode(dentry), name, data, buf_size); 962 + err = __jfs_getxattr(inode, name, data, buf_size); 963 963 964 964 return err; 965 965 }
+3 -3
fs/kernfs/inode.c
··· 208 208 return simple_xattr_set(&attrs->xattrs, name, NULL, 0, XATTR_REPLACE); 209 209 } 210 210 211 - ssize_t kernfs_iop_getxattr(struct dentry *dentry, const char *name, void *buf, 212 - size_t size) 211 + ssize_t kernfs_iop_getxattr(struct dentry *unused, struct inode *inode, 212 + const char *name, void *buf, size_t size) 213 213 { 214 - struct kernfs_node *kn = dentry->d_fsdata; 214 + struct kernfs_node *kn = inode->i_private; 215 215 struct kernfs_iattrs *attrs; 216 216 217 217 attrs = kernfs_iattrs(kn);
+2 -2
fs/kernfs/kernfs-internal.h
··· 84 84 int kernfs_iop_setxattr(struct dentry *dentry, const char *name, const void *value, 85 85 size_t size, int flags); 86 86 int kernfs_iop_removexattr(struct dentry *dentry, const char *name); 87 - ssize_t kernfs_iop_getxattr(struct dentry *dentry, const char *name, void *buf, 88 - size_t size); 87 + ssize_t kernfs_iop_getxattr(struct dentry *dentry, struct inode *inode, 88 + const char *name, void *buf, size_t size); 89 89 ssize_t kernfs_iop_listxattr(struct dentry *dentry, char *buf, size_t size); 90 90 91 91 /*
+2 -2
fs/libfs.c
··· 1127 1127 return -EOPNOTSUPP; 1128 1128 } 1129 1129 1130 - static ssize_t empty_dir_getxattr(struct dentry *dentry, const char *name, 1131 - void *value, size_t size) 1130 + static ssize_t empty_dir_getxattr(struct dentry *dentry, struct inode *inode, 1131 + const char *name, void *value, size_t size) 1132 1132 { 1133 1133 return -EOPNOTSUPP; 1134 1134 }
+2 -2
fs/overlayfs/inode.c
··· 246 246 return false; 247 247 } 248 248 249 - ssize_t ovl_getxattr(struct dentry *dentry, const char *name, 250 - void *value, size_t size) 249 + ssize_t ovl_getxattr(struct dentry *dentry, struct inode *inode, 250 + const char *name, void *value, size_t size) 251 251 { 252 252 struct path realpath; 253 253 enum ovl_path_type type = ovl_path_real(dentry, &realpath);
+2 -2
fs/overlayfs/overlayfs.h
··· 173 173 int ovl_permission(struct inode *inode, int mask); 174 174 int ovl_setxattr(struct dentry *dentry, const char *name, 175 175 const void *value, size_t size, int flags); 176 - ssize_t ovl_getxattr(struct dentry *dentry, const char *name, 177 - void *value, size_t size); 176 + ssize_t ovl_getxattr(struct dentry *dentry, struct inode *inode, 177 + const char *name, void *value, size_t size); 178 178 ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size); 179 179 int ovl_removexattr(struct dentry *dentry, const char *name); 180 180 struct inode *ovl_d_select_inode(struct dentry *dentry, unsigned file_flags);
+1 -1
fs/overlayfs/super.c
··· 274 274 if (!S_ISDIR(inode->i_mode) || !inode->i_op->getxattr) 275 275 return false; 276 276 277 - res = inode->i_op->getxattr(dentry, OVL_XATTR_OPAQUE, &val, 1); 277 + res = inode->i_op->getxattr(dentry, inode, OVL_XATTR_OPAQUE, &val, 1); 278 278 if (res == 1 && val == 'y') 279 279 return true; 280 280
+2 -2
fs/ubifs/ubifs.h
··· 1734 1734 /* xattr.c */ 1735 1735 int ubifs_setxattr(struct dentry *dentry, const char *name, 1736 1736 const void *value, size_t size, int flags); 1737 - ssize_t ubifs_getxattr(struct dentry *dentry, const char *name, void *buf, 1738 - size_t size); 1737 + ssize_t ubifs_getxattr(struct dentry *dentry, struct inode *host, 1738 + const char *name, void *buf, size_t size); 1739 1739 ssize_t ubifs_listxattr(struct dentry *dentry, char *buffer, size_t size); 1740 1740 int ubifs_removexattr(struct dentry *dentry, const char *name); 1741 1741 int ubifs_init_security(struct inode *dentry, struct inode *inode,
+3 -3
fs/ubifs/xattr.c
··· 372 372 return setxattr(d_inode(dentry), name, value, size, flags); 373 373 } 374 374 375 - ssize_t ubifs_getxattr(struct dentry *dentry, const char *name, void *buf, 376 - size_t size) 375 + ssize_t ubifs_getxattr(struct dentry *dentry, struct inode *host, 376 + const char *name, void *buf, size_t size) 377 377 { 378 - struct inode *inode, *host = d_inode(dentry); 378 + struct inode *inode; 379 379 struct ubifs_info *c = host->i_sb->s_fs_info; 380 380 struct qstr nm = QSTR_INIT(name, strlen(name)); 381 381 struct ubifs_inode *ui;
+6 -5
fs/xattr.c
··· 192 192 if (!inode->i_op->getxattr) 193 193 return -EOPNOTSUPP; 194 194 195 - error = inode->i_op->getxattr(dentry, name, NULL, 0); 195 + error = inode->i_op->getxattr(dentry, inode, name, NULL, 0); 196 196 if (error < 0) 197 197 return error; 198 198 ··· 203 203 memset(value, 0, error + 1); 204 204 } 205 205 206 - error = inode->i_op->getxattr(dentry, name, value, error); 206 + error = inode->i_op->getxattr(dentry, inode, name, value, error); 207 207 *xattr_value = value; 208 208 return error; 209 209 } ··· 236 236 } 237 237 nolsm: 238 238 if (inode->i_op->getxattr) 239 - error = inode->i_op->getxattr(dentry, name, value, size); 239 + error = inode->i_op->getxattr(dentry, inode, name, value, size); 240 240 else 241 241 error = -EOPNOTSUPP; 242 242 ··· 691 691 * Find the handler for the prefix and dispatch its get() operation. 692 692 */ 693 693 ssize_t 694 - generic_getxattr(struct dentry *dentry, const char *name, void *buffer, size_t size) 694 + generic_getxattr(struct dentry *dentry, struct inode *inode, 695 + const char *name, void *buffer, size_t size) 695 696 { 696 697 const struct xattr_handler *handler; 697 698 698 699 handler = xattr_resolve_name(dentry->d_sb->s_xattr, &name); 699 700 if (IS_ERR(handler)) 700 701 return PTR_ERR(handler); 701 - return handler->get(handler, dentry, d_inode(dentry), 702 + return handler->get(handler, dentry, inode, 702 703 name, buffer, size); 703 704 } 704 705
+2 -1
include/linux/fs.h
··· 1702 1702 int (*setattr) (struct dentry *, struct iattr *); 1703 1703 int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *); 1704 1704 int (*setxattr) (struct dentry *, const char *,const void *,size_t,int); 1705 - ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t); 1705 + ssize_t (*getxattr) (struct dentry *, struct inode *, 1706 + const char *, void *, size_t); 1706 1707 ssize_t (*listxattr) (struct dentry *, char *, size_t); 1707 1708 int (*removexattr) (struct dentry *, const char *); 1708 1709 int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start,
+1 -1
include/linux/xattr.h
··· 52 52 int vfs_setxattr(struct dentry *, const char *, const void *, size_t, int); 53 53 int vfs_removexattr(struct dentry *, const char *); 54 54 55 - ssize_t generic_getxattr(struct dentry *dentry, const char *name, void *buffer, size_t size); 55 + ssize_t generic_getxattr(struct dentry *dentry, struct inode *inode, const char *name, void *buffer, size_t size); 56 56 ssize_t generic_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size); 57 57 int generic_setxattr(struct dentry *dentry, const char *name, const void *value, size_t size, int flags); 58 58 int generic_removexattr(struct dentry *dentry, const char *name);
+1 -1
net/socket.c
··· 466 466 #define XATTR_SOCKPROTONAME_SUFFIX "sockprotoname" 467 467 #define XATTR_NAME_SOCKPROTONAME (XATTR_SYSTEM_PREFIX XATTR_SOCKPROTONAME_SUFFIX) 468 468 #define XATTR_NAME_SOCKPROTONAME_LEN (sizeof(XATTR_NAME_SOCKPROTONAME)-1) 469 - static ssize_t sockfs_getxattr(struct dentry *dentry, 469 + static ssize_t sockfs_getxattr(struct dentry *dentry, struct inode *inode, 470 470 const char *name, void *value, size_t size) 471 471 { 472 472 const char *proto_name;
+3 -3
security/commoncap.c
··· 313 313 if (!inode->i_op->getxattr) 314 314 return 0; 315 315 316 - error = inode->i_op->getxattr(dentry, XATTR_NAME_CAPS, NULL, 0); 316 + error = inode->i_op->getxattr(dentry, inode, XATTR_NAME_CAPS, NULL, 0); 317 317 if (error <= 0) 318 318 return 0; 319 319 return 1; ··· 397 397 if (!inode || !inode->i_op->getxattr) 398 398 return -ENODATA; 399 399 400 - size = inode->i_op->getxattr((struct dentry *)dentry, XATTR_NAME_CAPS, &caps, 401 - XATTR_CAPS_SZ); 400 + size = inode->i_op->getxattr((struct dentry *)dentry, inode, 401 + XATTR_NAME_CAPS, &caps, XATTR_CAPS_SZ); 402 402 if (size == -ENODATA || size == -EOPNOTSUPP) 403 403 /* no data, that's ok */ 404 404 return -ENODATA;
+1 -1
security/integrity/evm/evm_main.c
··· 82 82 return -EOPNOTSUPP; 83 83 84 84 for (xattr = evm_config_xattrnames; *xattr != NULL; xattr++) { 85 - error = inode->i_op->getxattr(dentry, *xattr, NULL, 0); 85 + error = inode->i_op->getxattr(dentry, inode, *xattr, NULL, 0); 86 86 if (error < 0) { 87 87 if (error == -ENODATA) 88 88 continue;
+5 -4
security/selinux/hooks.c
··· 506 506 rc = -EOPNOTSUPP; 507 507 goto out; 508 508 } 509 - rc = root_inode->i_op->getxattr(root, XATTR_NAME_SELINUX, NULL, 0); 509 + rc = root_inode->i_op->getxattr(root, root_inode, 510 + XATTR_NAME_SELINUX, NULL, 0); 510 511 if (rc < 0 && rc != -ENODATA) { 511 512 if (rc == -EOPNOTSUPP) 512 513 printk(KERN_WARNING "SELinux: (dev %s, type " ··· 1413 1412 goto out_unlock; 1414 1413 } 1415 1414 context[len] = '\0'; 1416 - rc = inode->i_op->getxattr(dentry, XATTR_NAME_SELINUX, 1415 + rc = inode->i_op->getxattr(dentry, inode, XATTR_NAME_SELINUX, 1417 1416 context, len); 1418 1417 if (rc == -ERANGE) { 1419 1418 kfree(context); 1420 1419 1421 1420 /* Need a larger buffer. Query for the right size. */ 1422 - rc = inode->i_op->getxattr(dentry, XATTR_NAME_SELINUX, 1421 + rc = inode->i_op->getxattr(dentry, inode, XATTR_NAME_SELINUX, 1423 1422 NULL, 0); 1424 1423 if (rc < 0) { 1425 1424 dput(dentry); ··· 1433 1432 goto out_unlock; 1434 1433 } 1435 1434 context[len] = '\0'; 1436 - rc = inode->i_op->getxattr(dentry, 1435 + rc = inode->i_op->getxattr(dentry, inode, 1437 1436 XATTR_NAME_SELINUX, 1438 1437 context, len); 1439 1438 }
+2 -2
security/smack/smack_lsm.c
··· 272 272 if (buffer == NULL) 273 273 return ERR_PTR(-ENOMEM); 274 274 275 - rc = ip->i_op->getxattr(dp, name, buffer, SMK_LONGLABEL); 275 + rc = ip->i_op->getxattr(dp, ip, name, buffer, SMK_LONGLABEL); 276 276 if (rc < 0) 277 277 skp = ERR_PTR(rc); 278 278 else if (rc == 0) ··· 3519 3519 TRANS_TRUE, TRANS_TRUE_SIZE, 3520 3520 0); 3521 3521 } else { 3522 - rc = inode->i_op->getxattr(dp, 3522 + rc = inode->i_op->getxattr(dp, inode, 3523 3523 XATTR_NAME_SMACKTRANSMUTE, trattr, 3524 3524 TRANS_TRUE_SIZE); 3525 3525 if (rc >= 0 && strncmp(trattr, TRANS_TRUE,