return -EPERM;
#ifdef CONFIG_JFS_POSIX_ACL
- return jfs_permission_have_sem(inode, MAY_WRITE);
+ return jfs_permission(inode, MAY_WRITE, NULL);
#else
return permission(inode, MAY_WRITE, NULL);
#endif
namelen -= XATTR_OS2_PREFIX_LEN;
}
+ down_write(&JFS_IP(inode)->xattr_sem);
+
xattr_size = ea_get(inode, &ea_buf, 0);
if (xattr_size < 0) {
rc = xattr_size;
release:
ea_release(inode, &ea_buf);
out:
+ up_write(&JFS_IP(inode)->xattr_sem);
+
if (os2name)
kfree(os2name);
#ifdef CONFIG_JFS_POSIX_ACL
if(strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN) == 0)
return 0;
- else
- return jfs_permission_have_sem(inode, MAY_READ);
+ return jfs_permission(inode, MAY_READ, NULL);
#else
return permission(inode, MAY_READ, NULL);
#endif
namelen -= XATTR_OS2_PREFIX_LEN;
}
+ down_read(&JFS_IP(inode)->xattr_sem);
+
xattr_size = ea_get(inode, &ea_buf, 0);
+
if (xattr_size < 0) {
size = xattr_size;
goto out;
release:
ea_release(inode, &ea_buf);
out:
+ up_read(&JFS_IP(inode)->xattr_sem);
+
if (os2name)
kfree(os2name);
{
int err;
- down(&dentry->d_inode->i_sem);
err = __jfs_getxattr(dentry->d_inode, name, data, buf_size);
- up(&dentry->d_inode->i_sem);
return err;
}
-static ssize_t __jfs_listxattr(struct dentry * dentry, char *data,
- size_t buf_size)
+ssize_t jfs_listxattr(struct dentry * dentry, char *data, size_t buf_size)
{
struct inode *inode = dentry->d_inode;
char *buffer;
struct jfs_ea *ea;
struct ea_buffer ea_buf;
+ down_read(&JFS_IP(inode)->xattr_sem);
+
xattr_size = ea_get(inode, &ea_buf, 0);
if (xattr_size < 0) {
size = xattr_size;
release:
ea_release(inode, &ea_buf);
out:
+ up_read(&JFS_IP(inode)->xattr_sem);
return size;
}
-ssize_t jfs_listxattr(struct dentry * dentry, char *data, size_t buf_size)
-{
- int err;
-
- down(&dentry->d_inode->i_sem);
- err = __jfs_listxattr(dentry, data, buf_size);
- up(&dentry->d_inode->i_sem);
-
- return err;
-}
-
int jfs_removexattr(struct dentry *dentry, const char *name)
{
return __jfs_setxattr(dentry->d_inode, name, 0, 0, XATTR_REPLACE);