Commit 178ea735 authored by Al Viro's avatar Al Viro

kill check_acl callback of generic_permission()

its value depends only on inode and does not change; we might as
well store it in ->i_op->check_acl and be done with that.
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 07b8ce1e
...@@ -350,7 +350,7 @@ int afs_permission(struct inode *inode, int mask, unsigned int flags) ...@@ -350,7 +350,7 @@ int afs_permission(struct inode *inode, int mask, unsigned int flags)
} }
key_put(key); key_put(key);
ret = generic_permission(inode, mask, flags, NULL); ret = generic_permission(inode, mask, flags);
_leave(" = %d", ret); _leave(" = %d", ret);
return ret; return ret;
......
...@@ -7339,7 +7339,7 @@ static int btrfs_permission(struct inode *inode, int mask, unsigned int flags) ...@@ -7339,7 +7339,7 @@ static int btrfs_permission(struct inode *inode, int mask, unsigned int flags)
return -EROFS; return -EROFS;
if ((BTRFS_I(inode)->flags & BTRFS_INODE_READONLY) && (mask & MAY_WRITE)) if ((BTRFS_I(inode)->flags & BTRFS_INODE_READONLY) && (mask & MAY_WRITE))
return -EACCES; return -EACCES;
return generic_permission(inode, mask, flags, btrfs_check_acl); return generic_permission(inode, mask, flags);
} }
static const struct inode_operations btrfs_dir_inode_operations = { static const struct inode_operations btrfs_dir_inode_operations = {
...@@ -7359,10 +7359,12 @@ static const struct inode_operations btrfs_dir_inode_operations = { ...@@ -7359,10 +7359,12 @@ static const struct inode_operations btrfs_dir_inode_operations = {
.listxattr = btrfs_listxattr, .listxattr = btrfs_listxattr,
.removexattr = btrfs_removexattr, .removexattr = btrfs_removexattr,
.permission = btrfs_permission, .permission = btrfs_permission,
.check_acl = btrfs_check_acl,
}; };
static const struct inode_operations btrfs_dir_ro_inode_operations = { static const struct inode_operations btrfs_dir_ro_inode_operations = {
.lookup = btrfs_lookup, .lookup = btrfs_lookup,
.permission = btrfs_permission, .permission = btrfs_permission,
.check_acl = btrfs_check_acl,
}; };
static const struct file_operations btrfs_dir_file_operations = { static const struct file_operations btrfs_dir_file_operations = {
...@@ -7431,6 +7433,7 @@ static const struct inode_operations btrfs_file_inode_operations = { ...@@ -7431,6 +7433,7 @@ static const struct inode_operations btrfs_file_inode_operations = {
.removexattr = btrfs_removexattr, .removexattr = btrfs_removexattr,
.permission = btrfs_permission, .permission = btrfs_permission,
.fiemap = btrfs_fiemap, .fiemap = btrfs_fiemap,
.check_acl = btrfs_check_acl,
}; };
static const struct inode_operations btrfs_special_inode_operations = { static const struct inode_operations btrfs_special_inode_operations = {
.getattr = btrfs_getattr, .getattr = btrfs_getattr,
...@@ -7440,6 +7443,7 @@ static const struct inode_operations btrfs_special_inode_operations = { ...@@ -7440,6 +7443,7 @@ static const struct inode_operations btrfs_special_inode_operations = {
.getxattr = btrfs_getxattr, .getxattr = btrfs_getxattr,
.listxattr = btrfs_listxattr, .listxattr = btrfs_listxattr,
.removexattr = btrfs_removexattr, .removexattr = btrfs_removexattr,
.check_acl = btrfs_check_acl,
}; };
static const struct inode_operations btrfs_symlink_inode_operations = { static const struct inode_operations btrfs_symlink_inode_operations = {
.readlink = generic_readlink, .readlink = generic_readlink,
...@@ -7451,6 +7455,7 @@ static const struct inode_operations btrfs_symlink_inode_operations = { ...@@ -7451,6 +7455,7 @@ static const struct inode_operations btrfs_symlink_inode_operations = {
.getxattr = btrfs_getxattr, .getxattr = btrfs_getxattr,
.listxattr = btrfs_listxattr, .listxattr = btrfs_listxattr,
.removexattr = btrfs_removexattr, .removexattr = btrfs_removexattr,
.check_acl = btrfs_check_acl,
}; };
const struct dentry_operations btrfs_dentry_operations = { const struct dentry_operations btrfs_dentry_operations = {
......
...@@ -1805,7 +1805,7 @@ int ceph_permission(struct inode *inode, int mask, unsigned int flags) ...@@ -1805,7 +1805,7 @@ int ceph_permission(struct inode *inode, int mask, unsigned int flags)
err = ceph_do_getattr(inode, CEPH_CAP_AUTH_SHARED); err = ceph_do_getattr(inode, CEPH_CAP_AUTH_SHARED);
if (!err) if (!err)
err = generic_permission(inode, mask, flags, NULL); err = generic_permission(inode, mask, flags);
return err; return err;
} }
......
...@@ -239,7 +239,7 @@ static int cifs_permission(struct inode *inode, int mask, unsigned int flags) ...@@ -239,7 +239,7 @@ static int cifs_permission(struct inode *inode, int mask, unsigned int flags)
on the client (above and beyond ACL on servers) for on the client (above and beyond ACL on servers) for
servers which do not support setting and viewing mode bits, servers which do not support setting and viewing mode bits,
so allowing client to check permissions is useful */ so allowing client to check permissions is useful */
return generic_permission(inode, mask, flags, NULL); return generic_permission(inode, mask, flags);
} }
static struct kmem_cache *cifs_inode_cachep; static struct kmem_cache *cifs_inode_cachep;
......
...@@ -1018,7 +1018,7 @@ static int fuse_permission(struct inode *inode, int mask, unsigned int flags) ...@@ -1018,7 +1018,7 @@ static int fuse_permission(struct inode *inode, int mask, unsigned int flags)
} }
if (fc->flags & FUSE_DEFAULT_PERMISSIONS) { if (fc->flags & FUSE_DEFAULT_PERMISSIONS) {
err = generic_permission(inode, mask, flags, NULL); err = generic_permission(inode, mask, flags);
/* If permission is denied, try to refresh file /* If permission is denied, try to refresh file
attributes. This is also needed, because the root attributes. This is also needed, because the root
...@@ -1027,7 +1027,7 @@ static int fuse_permission(struct inode *inode, int mask, unsigned int flags) ...@@ -1027,7 +1027,7 @@ static int fuse_permission(struct inode *inode, int mask, unsigned int flags)
err = fuse_perm_getattr(inode, flags); err = fuse_perm_getattr(inode, flags);
if (!err) if (!err)
err = generic_permission(inode, mask, err = generic_permission(inode, mask,
flags, NULL); flags);
} }
/* Note: the opposite of the above test does not /* Note: the opposite of the above test does not
......
...@@ -1564,7 +1564,7 @@ int gfs2_permission(struct inode *inode, int mask, unsigned int flags) ...@@ -1564,7 +1564,7 @@ int gfs2_permission(struct inode *inode, int mask, unsigned int flags)
if ((mask & MAY_WRITE) && IS_IMMUTABLE(inode)) if ((mask & MAY_WRITE) && IS_IMMUTABLE(inode))
error = -EACCES; error = -EACCES;
else else
error = generic_permission(inode, mask, flags, gfs2_check_acl); error = generic_permission(inode, mask, flags);
if (unlock) if (unlock)
gfs2_glock_dq_uninit(&i_gh); gfs2_glock_dq_uninit(&i_gh);
...@@ -1854,6 +1854,7 @@ const struct inode_operations gfs2_file_iops = { ...@@ -1854,6 +1854,7 @@ const struct inode_operations gfs2_file_iops = {
.listxattr = gfs2_listxattr, .listxattr = gfs2_listxattr,
.removexattr = gfs2_removexattr, .removexattr = gfs2_removexattr,
.fiemap = gfs2_fiemap, .fiemap = gfs2_fiemap,
.check_acl = gfs2_check_acl,
}; };
const struct inode_operations gfs2_dir_iops = { const struct inode_operations gfs2_dir_iops = {
...@@ -1874,6 +1875,7 @@ const struct inode_operations gfs2_dir_iops = { ...@@ -1874,6 +1875,7 @@ const struct inode_operations gfs2_dir_iops = {
.listxattr = gfs2_listxattr, .listxattr = gfs2_listxattr,
.removexattr = gfs2_removexattr, .removexattr = gfs2_removexattr,
.fiemap = gfs2_fiemap, .fiemap = gfs2_fiemap,
.check_acl = gfs2_check_acl,
}; };
const struct inode_operations gfs2_symlink_iops = { const struct inode_operations gfs2_symlink_iops = {
...@@ -1888,5 +1890,6 @@ const struct inode_operations gfs2_symlink_iops = { ...@@ -1888,5 +1890,6 @@ const struct inode_operations gfs2_symlink_iops = {
.listxattr = gfs2_listxattr, .listxattr = gfs2_listxattr,
.removexattr = gfs2_removexattr, .removexattr = gfs2_removexattr,
.fiemap = gfs2_fiemap, .fiemap = gfs2_fiemap,
.check_acl = gfs2_check_acl,
}; };
...@@ -770,7 +770,7 @@ int hostfs_permission(struct inode *ino, int desired, unsigned int flags) ...@@ -770,7 +770,7 @@ int hostfs_permission(struct inode *ino, int desired, unsigned int flags)
err = access_file(name, r, w, x); err = access_file(name, r, w, x);
__putname(name); __putname(name);
if (!err) if (!err)
err = generic_permission(ino, desired, flags, NULL); err = generic_permission(ino, desired, flags);
return err; return err;
} }
......
...@@ -398,7 +398,7 @@ static int hpfs_unlink(struct inode *dir, struct dentry *dentry) ...@@ -398,7 +398,7 @@ static int hpfs_unlink(struct inode *dir, struct dentry *dentry)
hpfs_unlock(dir->i_sb); hpfs_unlock(dir->i_sb);
return -ENOSPC; return -ENOSPC;
} }
if (generic_permission(inode, MAY_WRITE, 0, NULL) || if (generic_permission(inode, MAY_WRITE, 0) ||
!S_ISREG(inode->i_mode) || !S_ISREG(inode->i_mode) ||
get_write_access(inode)) { get_write_access(inode)) {
d_rehash(dentry); d_rehash(dentry);
......
...@@ -176,9 +176,9 @@ EXPORT_SYMBOL(putname); ...@@ -176,9 +176,9 @@ EXPORT_SYMBOL(putname);
/* /*
* This does basic POSIX ACL permission checking * This does basic POSIX ACL permission checking
*/ */
static int acl_permission_check(struct inode *inode, int mask, unsigned int flags, static int acl_permission_check(struct inode *inode, int mask, unsigned int flags)
int (*check_acl)(struct inode *inode, int mask, unsigned int flags))
{ {
int (*check_acl)(struct inode *inode, int mask, unsigned int flags);
unsigned int mode = inode->i_mode; unsigned int mode = inode->i_mode;
mask &= MAY_READ | MAY_WRITE | MAY_EXEC; mask &= MAY_READ | MAY_WRITE | MAY_EXEC;
...@@ -189,6 +189,7 @@ static int acl_permission_check(struct inode *inode, int mask, unsigned int flag ...@@ -189,6 +189,7 @@ static int acl_permission_check(struct inode *inode, int mask, unsigned int flag
if (current_fsuid() == inode->i_uid) if (current_fsuid() == inode->i_uid)
mode >>= 6; mode >>= 6;
else { else {
check_acl = inode->i_op->check_acl;
if (IS_POSIXACL(inode) && (mode & S_IRWXG) && check_acl) { if (IS_POSIXACL(inode) && (mode & S_IRWXG) && check_acl) {
int error = check_acl(inode, mask, flags); int error = check_acl(inode, mask, flags);
if (error != -EAGAIN) if (error != -EAGAIN)
...@@ -212,7 +213,6 @@ static int acl_permission_check(struct inode *inode, int mask, unsigned int flag ...@@ -212,7 +213,6 @@ static int acl_permission_check(struct inode *inode, int mask, unsigned int flag
* generic_permission - check for access rights on a Posix-like filesystem * generic_permission - check for access rights on a Posix-like filesystem
* @inode: inode to check access rights for * @inode: inode to check access rights for
* @mask: right to check for (%MAY_READ, %MAY_WRITE, %MAY_EXEC) * @mask: right to check for (%MAY_READ, %MAY_WRITE, %MAY_EXEC)
* @check_acl: optional callback to check for Posix ACLs
* @flags: IPERM_FLAG_ flags. * @flags: IPERM_FLAG_ flags.
* *
* Used to check for read/write/execute permissions on a file. * Used to check for read/write/execute permissions on a file.
...@@ -224,15 +224,14 @@ static int acl_permission_check(struct inode *inode, int mask, unsigned int flag ...@@ -224,15 +224,14 @@ static int acl_permission_check(struct inode *inode, int mask, unsigned int flag
* request cannot be satisfied (eg. requires blocking or too much complexity). * request cannot be satisfied (eg. requires blocking or too much complexity).
* It would then be called again in ref-walk mode. * It would then be called again in ref-walk mode.
*/ */
int generic_permission(struct inode *inode, int mask, unsigned int flags, int generic_permission(struct inode *inode, int mask, unsigned int flags)
int (*check_acl)(struct inode *inode, int mask, unsigned int flags))
{ {
int ret; int ret;
/* /*
* Do the basic POSIX ACL permission checks. * Do the basic POSIX ACL permission checks.
*/ */
ret = acl_permission_check(inode, mask, flags, check_acl); ret = acl_permission_check(inode, mask, flags);
if (ret != -EACCES) if (ret != -EACCES)
return ret; return ret;
...@@ -290,8 +289,7 @@ int inode_permission(struct inode *inode, int mask) ...@@ -290,8 +289,7 @@ int inode_permission(struct inode *inode, int mask)
if (inode->i_op->permission) if (inode->i_op->permission)
retval = inode->i_op->permission(inode, mask, 0); retval = inode->i_op->permission(inode, mask, 0);
else else
retval = generic_permission(inode, mask, 0, retval = generic_permission(inode, mask, 0);
inode->i_op->check_acl);
if (retval) if (retval)
return retval; return retval;
...@@ -326,8 +324,7 @@ static inline int exec_permission(struct inode *inode, unsigned int flags) ...@@ -326,8 +324,7 @@ static inline int exec_permission(struct inode *inode, unsigned int flags)
if (likely(!ret)) if (likely(!ret))
goto ok; goto ok;
} else { } else {
ret = acl_permission_check(inode, MAY_EXEC, flags, ret = acl_permission_check(inode, MAY_EXEC, flags);
inode->i_op->check_acl);
if (likely(!ret)) if (likely(!ret))
goto ok; goto ok;
if (ret != -EACCES) if (ret != -EACCES)
......
...@@ -2328,7 +2328,7 @@ int nfs_permission(struct inode *inode, int mask, unsigned int flags) ...@@ -2328,7 +2328,7 @@ int nfs_permission(struct inode *inode, int mask, unsigned int flags)
out_notsup: out_notsup:
res = nfs_revalidate_inode(NFS_SERVER(inode), inode); res = nfs_revalidate_inode(NFS_SERVER(inode), inode);
if (res == 0) if (res == 0)
res = generic_permission(inode, mask, flags, NULL); res = generic_permission(inode, mask, flags);
goto out; goto out;
} }
......
...@@ -806,7 +806,7 @@ int nilfs_permission(struct inode *inode, int mask, unsigned int flags) ...@@ -806,7 +806,7 @@ int nilfs_permission(struct inode *inode, int mask, unsigned int flags)
root->cno != NILFS_CPTREE_CURRENT_CNO) root->cno != NILFS_CPTREE_CURRENT_CNO)
return -EROFS; /* snapshot is not writable */ return -EROFS; /* snapshot is not writable */
return generic_permission(inode, mask, flags, NULL); return generic_permission(inode, mask, flags);
} }
int nilfs_load_inode_block(struct inode *inode, struct buffer_head **pbh) int nilfs_load_inode_block(struct inode *inode, struct buffer_head **pbh)
......
...@@ -1293,7 +1293,7 @@ int ocfs2_permission(struct inode *inode, int mask, unsigned int flags) ...@@ -1293,7 +1293,7 @@ int ocfs2_permission(struct inode *inode, int mask, unsigned int flags)
goto out; goto out;
} }
ret = generic_permission(inode, mask, flags, ocfs2_check_acl); ret = generic_permission(inode, mask, flags);
ocfs2_inode_unlock(inode, 0); ocfs2_inode_unlock(inode, 0);
out: out:
...@@ -2593,12 +2593,14 @@ const struct inode_operations ocfs2_file_iops = { ...@@ -2593,12 +2593,14 @@ const struct inode_operations ocfs2_file_iops = {
.listxattr = ocfs2_listxattr, .listxattr = ocfs2_listxattr,
.removexattr = generic_removexattr, .removexattr = generic_removexattr,
.fiemap = ocfs2_fiemap, .fiemap = ocfs2_fiemap,
.check_acl = ocfs2_check_acl,
}; };
const struct inode_operations ocfs2_special_file_iops = { const struct inode_operations ocfs2_special_file_iops = {
.setattr = ocfs2_setattr, .setattr = ocfs2_setattr,
.getattr = ocfs2_getattr, .getattr = ocfs2_getattr,
.permission = ocfs2_permission, .permission = ocfs2_permission,
.check_acl = ocfs2_check_acl,
}; };
/* /*
......
...@@ -2498,4 +2498,5 @@ const struct inode_operations ocfs2_dir_iops = { ...@@ -2498,4 +2498,5 @@ const struct inode_operations ocfs2_dir_iops = {
.listxattr = ocfs2_listxattr, .listxattr = ocfs2_listxattr,
.removexattr = generic_removexattr, .removexattr = generic_removexattr,
.fiemap = ocfs2_fiemap, .fiemap = ocfs2_fiemap,
.check_acl = ocfs2_check_acl,
}; };
...@@ -2169,7 +2169,7 @@ static const struct file_operations proc_fd_operations = { ...@@ -2169,7 +2169,7 @@ static const struct file_operations proc_fd_operations = {
*/ */
static int proc_fd_permission(struct inode *inode, int mask, unsigned int flags) static int proc_fd_permission(struct inode *inode, int mask, unsigned int flags)
{ {
int rv = generic_permission(inode, mask, flags, NULL); int rv = generic_permission(inode, mask, flags);
if (rv == 0) if (rv == 0)
return 0; return 0;
if (task_pid(current) == proc_pid(inode)) if (task_pid(current) == proc_pid(inode))
......
...@@ -312,4 +312,5 @@ const struct inode_operations reiserfs_file_inode_operations = { ...@@ -312,4 +312,5 @@ const struct inode_operations reiserfs_file_inode_operations = {
.listxattr = reiserfs_listxattr, .listxattr = reiserfs_listxattr,
.removexattr = reiserfs_removexattr, .removexattr = reiserfs_removexattr,
.permission = reiserfs_permission, .permission = reiserfs_permission,
.check_acl = reiserfs_check_acl,
}; };
...@@ -1529,6 +1529,7 @@ const struct inode_operations reiserfs_dir_inode_operations = { ...@@ -1529,6 +1529,7 @@ const struct inode_operations reiserfs_dir_inode_operations = {
.listxattr = reiserfs_listxattr, .listxattr = reiserfs_listxattr,
.removexattr = reiserfs_removexattr, .removexattr = reiserfs_removexattr,
.permission = reiserfs_permission, .permission = reiserfs_permission,
.check_acl = reiserfs_check_acl,
}; };
/* /*
...@@ -1545,6 +1546,7 @@ const struct inode_operations reiserfs_symlink_inode_operations = { ...@@ -1545,6 +1546,7 @@ const struct inode_operations reiserfs_symlink_inode_operations = {
.listxattr = reiserfs_listxattr, .listxattr = reiserfs_listxattr,
.removexattr = reiserfs_removexattr, .removexattr = reiserfs_removexattr,
.permission = reiserfs_permission, .permission = reiserfs_permission,
.check_acl = reiserfs_check_acl,
}; };
...@@ -1558,5 +1560,5 @@ const struct inode_operations reiserfs_special_inode_operations = { ...@@ -1558,5 +1560,5 @@ const struct inode_operations reiserfs_special_inode_operations = {
.listxattr = reiserfs_listxattr, .listxattr = reiserfs_listxattr,
.removexattr = reiserfs_removexattr, .removexattr = reiserfs_removexattr,
.permission = reiserfs_permission, .permission = reiserfs_permission,
.check_acl = reiserfs_check_acl,
}; };
...@@ -868,11 +868,17 @@ ssize_t reiserfs_listxattr(struct dentry * dentry, char *buffer, size_t size) ...@@ -868,11 +868,17 @@ ssize_t reiserfs_listxattr(struct dentry * dentry, char *buffer, size_t size)
return err; return err;
} }
static int reiserfs_check_acl(struct inode *inode, int mask, unsigned int flags) int reiserfs_check_acl(struct inode *inode, int mask, unsigned int flags)
{ {
struct posix_acl *acl; struct posix_acl *acl;
int error = -EAGAIN; /* do regular unix permission checks by default */ int error = -EAGAIN; /* do regular unix permission checks by default */
/*
* Stat data v1 doesn't support ACLs.
*/
if (get_inode_sd_version(inode) == STAT_DATA_V1)
return -EAGAIN;
if (flags & IPERM_FLAG_RCU) if (flags & IPERM_FLAG_RCU)
return -ECHILD; return -ECHILD;
...@@ -961,15 +967,7 @@ int reiserfs_permission(struct inode *inode, int mask, unsigned int flags) ...@@ -961,15 +967,7 @@ int reiserfs_permission(struct inode *inode, int mask, unsigned int flags)
if (IS_PRIVATE(inode)) if (IS_PRIVATE(inode))
return 0; return 0;
#ifdef CONFIG_REISERFS_FS_XATTR return generic_permission(inode, mask, flags);
/*
* Stat data v1 doesn't support ACLs.
*/
if (get_inode_sd_version(inode) != STAT_DATA_V1)
return generic_permission(inode, mask, flags,
reiserfs_check_acl);
#endif
return generic_permission(inode, mask, flags, NULL);
} }
static int xattr_hide_revalidate(struct dentry *dentry, struct nameidata *nd) static int xattr_hide_revalidate(struct dentry *dentry, struct nameidata *nd)
......
...@@ -362,5 +362,5 @@ int sysfs_permission(struct inode *inode, int mask, unsigned int flags) ...@@ -362,5 +362,5 @@ int sysfs_permission(struct inode *inode, int mask, unsigned int flags)
sysfs_refresh_inode(sd, inode); sysfs_refresh_inode(sd, inode);
mutex_unlock(&sysfs_mutex); mutex_unlock(&sysfs_mutex);
return generic_permission(inode, mask, flags, NULL); return generic_permission(inode, mask, flags);
} }
...@@ -2187,8 +2187,7 @@ extern sector_t bmap(struct inode *, sector_t); ...@@ -2187,8 +2187,7 @@ extern sector_t bmap(struct inode *, sector_t);
#endif #endif
extern int notify_change(struct dentry *, struct iattr *); extern int notify_change(struct dentry *, struct iattr *);
extern int inode_permission(struct inode *, int); extern int inode_permission(struct inode *, int);
extern int generic_permission(struct inode *, int, unsigned int, extern int generic_permission(struct inode *, int, unsigned int);
int (*check_acl)(struct inode *, int, unsigned int));
static inline bool execute_ok(struct inode *inode) static inline bool execute_ok(struct inode *inode)
{ {
......
...@@ -45,6 +45,7 @@ int reiserfs_permission(struct inode *inode, int mask, unsigned int flags); ...@@ -45,6 +45,7 @@ int reiserfs_permission(struct inode *inode, int mask, unsigned int flags);
#ifdef CONFIG_REISERFS_FS_XATTR #ifdef CONFIG_REISERFS_FS_XATTR
#define has_xattr_dir(inode) (REISERFS_I(inode)->i_flags & i_has_xattr_dir) #define has_xattr_dir(inode) (REISERFS_I(inode)->i_flags & i_has_xattr_dir)
int reiserfs_check_acl(struct inode *inode, int mask, unsigned int flags);
ssize_t reiserfs_getxattr(struct dentry *dentry, const char *name, ssize_t reiserfs_getxattr(struct dentry *dentry, const char *name,
void *buffer, size_t size); void *buffer, size_t size);
int reiserfs_setxattr(struct dentry *dentry, const char *name, int reiserfs_setxattr(struct dentry *dentry, const char *name,
...@@ -122,6 +123,7 @@ static inline void reiserfs_init_xattr_rwsem(struct inode *inode) ...@@ -122,6 +123,7 @@ static inline void reiserfs_init_xattr_rwsem(struct inode *inode)
#define reiserfs_setxattr NULL #define reiserfs_setxattr NULL
#define reiserfs_listxattr NULL #define reiserfs_listxattr NULL
#define reiserfs_removexattr NULL #define reiserfs_removexattr NULL
#define reiserfs_check_acl NULL
static inline void reiserfs_init_xattr_rwsem(struct inode *inode) static inline void reiserfs_init_xattr_rwsem(struct inode *inode)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment