Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
a63365ea
Commit
a63365ea
authored
Jul 31, 2003
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
http://jfs.bkbits.net/linux-2.5
into home.osdl.org:/home/torvalds/v2.5/linux
parents
71670f86
2be39ae7
Changes
10
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
34 additions
and
46 deletions
+34
-46
fs/jfs/acl.c
fs/jfs/acl.c
+2
-14
fs/jfs/inode.c
fs/jfs/inode.c
+1
-1
fs/jfs/jfs_acl.h
fs/jfs/jfs_acl.h
+0
-1
fs/jfs/jfs_dtree.c
fs/jfs/jfs_dtree.c
+1
-1
fs/jfs/jfs_incore.h
fs/jfs/jfs_incore.h
+2
-0
fs/jfs/jfs_logmgr.c
fs/jfs/jfs_logmgr.c
+1
-1
fs/jfs/jfs_txnmgr.c
fs/jfs/jfs_txnmgr.c
+4
-5
fs/jfs/namei.c
fs/jfs/namei.c
+5
-5
fs/jfs/super.c
fs/jfs/super.c
+3
-0
fs/jfs/xattr.c
fs/jfs/xattr.c
+15
-18
No files found.
fs/jfs/acl.c
View file @
a63365ea
...
@@ -123,11 +123,11 @@ int jfs_set_acl(struct inode *inode, int type, struct posix_acl *acl)
...
@@ -123,11 +123,11 @@ int jfs_set_acl(struct inode *inode, int type, struct posix_acl *acl)
}
}
/*
/*
*
__
jfs_permission()
* jfs_permission()
*
*
* modified vfs_permission to check posix acl
* modified vfs_permission to check posix acl
*/
*/
static
int
__jfs_permission
(
struct
inode
*
inode
,
int
mask
,
int
have_sem
)
int
jfs_permission
(
struct
inode
*
inode
,
int
mask
,
struct
nameidata
*
nd
)
{
{
umode_t
mode
=
inode
->
i_mode
;
umode_t
mode
=
inode
->
i_mode
;
struct
jfs_inode_info
*
ji
=
JFS_IP
(
inode
);
struct
jfs_inode_info
*
ji
=
JFS_IP
(
inode
);
...
@@ -161,11 +161,7 @@ static int __jfs_permission(struct inode * inode, int mask, int have_sem)
...
@@ -161,11 +161,7 @@ static int __jfs_permission(struct inode * inode, int mask, int have_sem)
if
(
ji
->
i_acl
==
JFS_ACL_NOT_CACHED
)
{
if
(
ji
->
i_acl
==
JFS_ACL_NOT_CACHED
)
{
struct
posix_acl
*
acl
;
struct
posix_acl
*
acl
;
if
(
!
have_sem
)
down
(
&
inode
->
i_sem
);
acl
=
jfs_get_acl
(
inode
,
ACL_TYPE_ACCESS
);
acl
=
jfs_get_acl
(
inode
,
ACL_TYPE_ACCESS
);
if
(
!
have_sem
)
up
(
&
inode
->
i_sem
);
if
(
IS_ERR
(
acl
))
if
(
IS_ERR
(
acl
))
return
PTR_ERR
(
acl
);
return
PTR_ERR
(
acl
);
...
@@ -208,14 +204,6 @@ static int __jfs_permission(struct inode * inode, int mask, int have_sem)
...
@@ -208,14 +204,6 @@ static int __jfs_permission(struct inode * inode, int mask, int have_sem)
return
-
EACCES
;
return
-
EACCES
;
}
}
int
jfs_permission
(
struct
inode
*
inode
,
int
mask
,
struct
nameidata
*
nd
)
{
return
__jfs_permission
(
inode
,
mask
,
0
);
}
int
jfs_permission_have_sem
(
struct
inode
*
inode
,
int
mask
)
{
return
__jfs_permission
(
inode
,
mask
,
1
);
}
int
jfs_init_acl
(
struct
inode
*
inode
,
struct
inode
*
dir
)
int
jfs_init_acl
(
struct
inode
*
inode
,
struct
inode
*
dir
)
{
{
...
...
fs/jfs/inode.c
View file @
a63365ea
...
@@ -105,7 +105,7 @@ int jfs_commit_inode(struct inode *inode, int wait)
...
@@ -105,7 +105,7 @@ int jfs_commit_inode(struct inode *inode, int wait)
rc
=
txCommit
(
tid
,
1
,
&
inode
,
wait
?
COMMIT_SYNC
:
0
);
rc
=
txCommit
(
tid
,
1
,
&
inode
,
wait
?
COMMIT_SYNC
:
0
);
txEnd
(
tid
);
txEnd
(
tid
);
up
(
&
JFS_IP
(
inode
)
->
commit_sem
);
up
(
&
JFS_IP
(
inode
)
->
commit_sem
);
return
-
rc
;
return
rc
;
}
}
void
jfs_write_inode
(
struct
inode
*
inode
,
int
wait
)
void
jfs_write_inode
(
struct
inode
*
inode
,
int
wait
)
...
...
fs/jfs/jfs_acl.h
View file @
a63365ea
...
@@ -24,7 +24,6 @@
...
@@ -24,7 +24,6 @@
struct
posix_acl
*
jfs_get_acl
(
struct
inode
*
,
int
);
struct
posix_acl
*
jfs_get_acl
(
struct
inode
*
,
int
);
int
jfs_set_acl
(
struct
inode
*
,
int
,
struct
posix_acl
*
);
int
jfs_set_acl
(
struct
inode
*
,
int
,
struct
posix_acl
*
);
int
jfs_permission_have_sem
(
struct
inode
*
,
int
);
int
jfs_permission
(
struct
inode
*
,
int
,
struct
nameidata
*
);
int
jfs_permission
(
struct
inode
*
,
int
,
struct
nameidata
*
);
int
jfs_init_acl
(
struct
inode
*
,
struct
inode
*
);
int
jfs_init_acl
(
struct
inode
*
,
struct
inode
*
);
int
jfs_setattr
(
struct
dentry
*
,
struct
iattr
*
);
int
jfs_setattr
(
struct
dentry
*
,
struct
iattr
*
);
...
...
fs/jfs/jfs_dtree.c
View file @
a63365ea
...
@@ -1328,7 +1328,7 @@ static int dtSplitPage(tid_t tid, struct inode *ip, struct dtsplit * split,
...
@@ -1328,7 +1328,7 @@ static int dtSplitPage(tid_t tid, struct inode *ip, struct dtsplit * split,
rbn
=
addressPXD
(
pxd
);
rbn
=
addressPXD
(
pxd
);
rmp
=
get_metapage
(
ip
,
rbn
,
PSIZE
,
1
);
rmp
=
get_metapage
(
ip
,
rbn
,
PSIZE
,
1
);
if
(
rmp
==
NULL
)
if
(
rmp
==
NULL
)
return
EIO
;
return
-
EIO
;
jfs_info
(
"dtSplitPage: ip:0x%p smp:0x%p rmp:0x%p"
,
ip
,
smp
,
rmp
);
jfs_info
(
"dtSplitPage: ip:0x%p smp:0x%p rmp:0x%p"
,
ip
,
smp
,
rmp
);
...
...
fs/jfs/jfs_incore.h
View file @
a63365ea
...
@@ -67,6 +67,8 @@ struct jfs_inode_info {
...
@@ -67,6 +67,8 @@ struct jfs_inode_info {
* inode is blocked in txBegin or TxBeginAnon
* inode is blocked in txBegin or TxBeginAnon
*/
*/
struct
semaphore
commit_sem
;
struct
semaphore
commit_sem
;
/* xattr_sem allows us to access the xattrs without taking i_sem */
struct
rw_semaphore
xattr_sem
;
lid_t
xtlid
;
/* lid of xtree lock on directory */
lid_t
xtlid
;
/* lid of xtree lock on directory */
#ifdef CONFIG_JFS_POSIX_ACL
#ifdef CONFIG_JFS_POSIX_ACL
struct
posix_acl
*
i_acl
;
struct
posix_acl
*
i_acl
;
...
...
fs/jfs/jfs_logmgr.c
View file @
a63365ea
...
@@ -1615,7 +1615,7 @@ static int lmLogFileSystem(struct jfs_log * log, char *uuid, int activate)
...
@@ -1615,7 +1615,7 @@ static int lmLogFileSystem(struct jfs_log * log, char *uuid, int activate)
if
(
i
==
MAX_ACTIVE
)
{
if
(
i
==
MAX_ACTIVE
)
{
jfs_warn
(
"Too many file systems sharing journal!"
);
jfs_warn
(
"Too many file systems sharing journal!"
);
lbmFree
(
bpsuper
);
lbmFree
(
bpsuper
);
return
EMFILE
;
/* Is there a better rc? */
return
-
EMFILE
;
/* Is there a better rc? */
}
}
}
else
{
}
else
{
for
(
i
=
0
;
i
<
MAX_ACTIVE
;
i
++
)
for
(
i
=
0
;
i
<
MAX_ACTIVE
;
i
++
)
...
...
fs/jfs/jfs_txnmgr.c
View file @
a63365ea
...
@@ -178,7 +178,7 @@ void inlineLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
...
@@ -178,7 +178,7 @@ void inlineLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
struct
tlock
*
tlck
);
struct
tlock
*
tlck
);
void
mapLog
(
struct
jfs_log
*
log
,
struct
tblock
*
tblk
,
struct
lrd
*
lrd
,
void
mapLog
(
struct
jfs_log
*
log
,
struct
tblock
*
tblk
,
struct
lrd
*
lrd
,
struct
tlock
*
tlck
);
struct
tlock
*
tlck
);
void
txAbortCommit
(
struct
commit
*
cd
,
int
exval
);
static
void
txAbortCommit
(
struct
commit
*
cd
);
static
void
txAllocPMap
(
struct
inode
*
ip
,
struct
maplock
*
maplock
,
static
void
txAllocPMap
(
struct
inode
*
ip
,
struct
maplock
*
maplock
,
struct
tblock
*
tblk
);
struct
tblock
*
tblk
);
void
txForce
(
struct
tblock
*
tblk
);
void
txForce
(
struct
tblock
*
tblk
);
...
@@ -1113,7 +1113,7 @@ int txCommit(tid_t tid, /* transaction identifier */
...
@@ -1113,7 +1113,7 @@ int txCommit(tid_t tid, /* transaction identifier */
jfs_info
(
"txCommit, tid = %d, flag = %d"
,
tid
,
flag
);
jfs_info
(
"txCommit, tid = %d, flag = %d"
,
tid
,
flag
);
/* is read-only file system ? */
/* is read-only file system ? */
if
(
isReadOnly
(
iplist
[
0
]))
{
if
(
isReadOnly
(
iplist
[
0
]))
{
rc
=
EROFS
;
rc
=
-
EROFS
;
goto
TheEnd
;
goto
TheEnd
;
}
}
...
@@ -1317,7 +1317,7 @@ int txCommit(tid_t tid, /* transaction identifier */
...
@@ -1317,7 +1317,7 @@ int txCommit(tid_t tid, /* transaction identifier */
out:
out:
if
(
rc
!=
0
)
if
(
rc
!=
0
)
txAbortCommit
(
&
cd
,
rc
);
txAbortCommit
(
&
cd
);
TheEnd:
TheEnd:
jfs_info
(
"txCommit: tid = %d, returning %d"
,
tid
,
rc
);
jfs_info
(
"txCommit: tid = %d, returning %d"
,
tid
,
rc
);
...
@@ -2672,14 +2672,13 @@ void txAbort(tid_t tid, int dirty)
...
@@ -2672,14 +2672,13 @@ void txAbort(tid_t tid, int dirty)
* log age of page-frames in memory for which caller has
* log age of page-frames in memory for which caller has
* are reset to 0 (to avoid logwarap).
* are reset to 0 (to avoid logwarap).
*/
*/
void
txAbortCommit
(
struct
commit
*
cd
,
int
exval
)
static
void
txAbortCommit
(
struct
commit
*
cd
)
{
{
struct
tblock
*
tblk
;
struct
tblock
*
tblk
;
tid_t
tid
;
tid_t
tid
;
lid_t
lid
,
next
;
lid_t
lid
,
next
;
struct
metapage
*
mp
;
struct
metapage
*
mp
;
assert
(
exval
==
EIO
||
exval
==
ENOMEM
);
jfs_warn
(
"txAbortCommit: cd:0x%p"
,
cd
);
jfs_warn
(
"txAbortCommit: cd:0x%p"
,
cd
);
/*
/*
...
...
fs/jfs/namei.c
View file @
a63365ea
...
@@ -120,7 +120,7 @@ int jfs_create(struct inode *dip, struct dentry *dentry, int mode,
...
@@ -120,7 +120,7 @@ int jfs_create(struct inode *dip, struct dentry *dentry, int mode,
ino
=
ip
->
i_ino
;
ino
=
ip
->
i_ino
;
if
((
rc
=
dtInsert
(
tid
,
dip
,
&
dname
,
&
ino
,
&
btstack
)))
{
if
((
rc
=
dtInsert
(
tid
,
dip
,
&
dname
,
&
ino
,
&
btstack
)))
{
jfs_err
(
"jfs_create: dtInsert returned %d"
,
rc
);
jfs_err
(
"jfs_create: dtInsert returned %d"
,
rc
);
if
(
rc
==
EIO
)
if
(
rc
==
-
EIO
)
txAbort
(
tid
,
1
);
/* Marks Filesystem dirty */
txAbort
(
tid
,
1
);
/* Marks Filesystem dirty */
else
else
txAbort
(
tid
,
0
);
/* Filesystem full */
txAbort
(
tid
,
0
);
/* Filesystem full */
...
@@ -247,7 +247,7 @@ int jfs_mkdir(struct inode *dip, struct dentry *dentry, int mode)
...
@@ -247,7 +247,7 @@ int jfs_mkdir(struct inode *dip, struct dentry *dentry, int mode)
if
((
rc
=
dtInsert
(
tid
,
dip
,
&
dname
,
&
ino
,
&
btstack
)))
{
if
((
rc
=
dtInsert
(
tid
,
dip
,
&
dname
,
&
ino
,
&
btstack
)))
{
jfs_err
(
"jfs_mkdir: dtInsert returned %d"
,
rc
);
jfs_err
(
"jfs_mkdir: dtInsert returned %d"
,
rc
);
if
(
rc
==
EIO
)
if
(
rc
==
-
EIO
)
txAbort
(
tid
,
1
);
/* Marks Filesystem dirty */
txAbort
(
tid
,
1
);
/* Marks Filesystem dirty */
else
else
txAbort
(
tid
,
0
);
/* Filesystem full */
txAbort
(
tid
,
0
);
/* Filesystem full */
...
@@ -353,7 +353,7 @@ int jfs_rmdir(struct inode *dip, struct dentry *dentry)
...
@@ -353,7 +353,7 @@ int jfs_rmdir(struct inode *dip, struct dentry *dentry)
ino
=
ip
->
i_ino
;
ino
=
ip
->
i_ino
;
if
((
rc
=
dtDelete
(
tid
,
dip
,
&
dname
,
&
ino
,
JFS_REMOVE
)))
{
if
((
rc
=
dtDelete
(
tid
,
dip
,
&
dname
,
&
ino
,
JFS_REMOVE
)))
{
jfs_err
(
"jfs_rmdir: dtDelete returned %d"
,
rc
);
jfs_err
(
"jfs_rmdir: dtDelete returned %d"
,
rc
);
if
(
rc
==
EIO
)
if
(
rc
==
-
EIO
)
txAbort
(
tid
,
1
);
txAbort
(
tid
,
1
);
txEnd
(
tid
);
txEnd
(
tid
);
up
(
&
JFS_IP
(
dip
)
->
commit_sem
);
up
(
&
JFS_IP
(
dip
)
->
commit_sem
);
...
@@ -469,7 +469,7 @@ int jfs_unlink(struct inode *dip, struct dentry *dentry)
...
@@ -469,7 +469,7 @@ int jfs_unlink(struct inode *dip, struct dentry *dentry)
ino
=
ip
->
i_ino
;
ino
=
ip
->
i_ino
;
if
((
rc
=
dtDelete
(
tid
,
dip
,
&
dname
,
&
ino
,
JFS_REMOVE
)))
{
if
((
rc
=
dtDelete
(
tid
,
dip
,
&
dname
,
&
ino
,
JFS_REMOVE
)))
{
jfs_err
(
"jfs_unlink: dtDelete returned %d"
,
rc
);
jfs_err
(
"jfs_unlink: dtDelete returned %d"
,
rc
);
if
(
rc
==
EIO
)
if
(
rc
==
-
EIO
)
txAbort
(
tid
,
1
);
/* Marks FS Dirty */
txAbort
(
tid
,
1
);
/* Marks FS Dirty */
txEnd
(
tid
);
txEnd
(
tid
);
up
(
&
JFS_IP
(
dip
)
->
commit_sem
);
up
(
&
JFS_IP
(
dip
)
->
commit_sem
);
...
@@ -535,7 +535,7 @@ int jfs_unlink(struct inode *dip, struct dentry *dentry)
...
@@ -535,7 +535,7 @@ int jfs_unlink(struct inode *dip, struct dentry *dentry)
new_size
=
xtTruncate_pmap
(
tid
,
ip
,
new_size
);
new_size
=
xtTruncate_pmap
(
tid
,
ip
,
new_size
);
if
(
new_size
<
0
)
{
if
(
new_size
<
0
)
{
txAbort
(
tid
,
1
);
/* Marks FS Dirty */
txAbort
(
tid
,
1
);
/* Marks FS Dirty */
rc
=
-
new_size
;
/* We return -rc */
rc
=
new_size
;
}
else
}
else
rc
=
txCommit
(
tid
,
2
,
&
iplist
[
0
],
COMMIT_SYNC
);
rc
=
txCommit
(
tid
,
2
,
&
iplist
[
0
],
COMMIT_SYNC
);
txEnd
(
tid
);
txEnd
(
tid
);
...
...
fs/jfs/super.c
View file @
a63365ea
...
@@ -382,6 +382,7 @@ static void jfs_write_super_lockfs(struct super_block *sb)
...
@@ -382,6 +382,7 @@ static void jfs_write_super_lockfs(struct super_block *sb)
if
(
!
(
sb
->
s_flags
&
MS_RDONLY
))
{
if
(
!
(
sb
->
s_flags
&
MS_RDONLY
))
{
txQuiesce
(
sb
);
txQuiesce
(
sb
);
lmLogShutdown
(
log
);
lmLogShutdown
(
log
);
updateSuper
(
sb
,
FM_CLEAN
);
}
}
}
}
...
@@ -392,6 +393,7 @@ static void jfs_unlockfs(struct super_block *sb)
...
@@ -392,6 +393,7 @@ static void jfs_unlockfs(struct super_block *sb)
int
rc
=
0
;
int
rc
=
0
;
if
(
!
(
sb
->
s_flags
&
MS_RDONLY
))
{
if
(
!
(
sb
->
s_flags
&
MS_RDONLY
))
{
updateSuper
(
sb
,
FM_MOUNT
);
if
((
rc
=
lmLogInit
(
log
)))
if
((
rc
=
lmLogInit
(
log
)))
jfs_err
(
"jfs_unlock failed with return code %d"
,
rc
);
jfs_err
(
"jfs_unlock failed with return code %d"
,
rc
);
else
else
...
@@ -457,6 +459,7 @@ static void init_once(void *foo, kmem_cache_t * cachep, unsigned long flags)
...
@@ -457,6 +459,7 @@ static void init_once(void *foo, kmem_cache_t * cachep, unsigned long flags)
INIT_LIST_HEAD
(
&
jfs_ip
->
anon_inode_list
);
INIT_LIST_HEAD
(
&
jfs_ip
->
anon_inode_list
);
init_rwsem
(
&
jfs_ip
->
rdwrlock
);
init_rwsem
(
&
jfs_ip
->
rdwrlock
);
init_MUTEX
(
&
jfs_ip
->
commit_sem
);
init_MUTEX
(
&
jfs_ip
->
commit_sem
);
init_rwsem
(
&
jfs_ip
->
xattr_sem
);
jfs_ip
->
atlhead
=
0
;
jfs_ip
->
atlhead
=
0
;
jfs_ip
->
active_ag
=
-
1
;
jfs_ip
->
active_ag
=
-
1
;
#ifdef CONFIG_JFS_POSIX_ACL
#ifdef CONFIG_JFS_POSIX_ACL
...
...
fs/jfs/xattr.c
View file @
a63365ea
...
@@ -729,7 +729,7 @@ static int can_set_xattr(struct inode *inode, const char *name,
...
@@ -729,7 +729,7 @@ static int can_set_xattr(struct inode *inode, const char *name,
return
-
EPERM
;
return
-
EPERM
;
#ifdef CONFIG_JFS_POSIX_ACL
#ifdef CONFIG_JFS_POSIX_ACL
return
jfs_permission
_have_sem
(
inode
,
MAY_WRITE
);
return
jfs_permission
(
inode
,
MAY_WRITE
,
NULL
);
#else
#else
return
permission
(
inode
,
MAY_WRITE
,
NULL
);
return
permission
(
inode
,
MAY_WRITE
,
NULL
);
#endif
#endif
...
@@ -763,6 +763,8 @@ int __jfs_setxattr(struct inode *inode, const char *name, const void *value,
...
@@ -763,6 +763,8 @@ int __jfs_setxattr(struct inode *inode, const char *name, const void *value,
namelen
-=
XATTR_OS2_PREFIX_LEN
;
namelen
-=
XATTR_OS2_PREFIX_LEN
;
}
}
down_write
(
&
JFS_IP
(
inode
)
->
xattr_sem
);
xattr_size
=
ea_get
(
inode
,
&
ea_buf
,
0
);
xattr_size
=
ea_get
(
inode
,
&
ea_buf
,
0
);
if
(
xattr_size
<
0
)
{
if
(
xattr_size
<
0
)
{
rc
=
xattr_size
;
rc
=
xattr_size
;
...
@@ -868,6 +870,8 @@ int __jfs_setxattr(struct inode *inode, const char *name, const void *value,
...
@@ -868,6 +870,8 @@ int __jfs_setxattr(struct inode *inode, const char *name, const void *value,
release:
release:
ea_release
(
inode
,
&
ea_buf
);
ea_release
(
inode
,
&
ea_buf
);
out:
out:
up_write
(
&
JFS_IP
(
inode
)
->
xattr_sem
);
if
(
os2name
)
if
(
os2name
)
kfree
(
os2name
);
kfree
(
os2name
);
...
@@ -890,8 +894,7 @@ static int can_get_xattr(struct inode *inode, const char *name)
...
@@ -890,8 +894,7 @@ static int can_get_xattr(struct inode *inode, const char *name)
#ifdef CONFIG_JFS_POSIX_ACL
#ifdef CONFIG_JFS_POSIX_ACL
if
(
strncmp
(
name
,
XATTR_SYSTEM_PREFIX
,
XATTR_SYSTEM_PREFIX_LEN
)
==
0
)
if
(
strncmp
(
name
,
XATTR_SYSTEM_PREFIX
,
XATTR_SYSTEM_PREFIX_LEN
)
==
0
)
return
0
;
return
0
;
else
return
jfs_permission
(
inode
,
MAY_READ
,
NULL
);
return
jfs_permission_have_sem
(
inode
,
MAY_READ
);
#else
#else
return
permission
(
inode
,
MAY_READ
,
NULL
);
return
permission
(
inode
,
MAY_READ
,
NULL
);
#endif
#endif
...
@@ -923,7 +926,10 @@ ssize_t __jfs_getxattr(struct inode *inode, const char *name, void *data,
...
@@ -923,7 +926,10 @@ ssize_t __jfs_getxattr(struct inode *inode, const char *name, void *data,
namelen
-=
XATTR_OS2_PREFIX_LEN
;
namelen
-=
XATTR_OS2_PREFIX_LEN
;
}
}
down_read
(
&
JFS_IP
(
inode
)
->
xattr_sem
);
xattr_size
=
ea_get
(
inode
,
&
ea_buf
,
0
);
xattr_size
=
ea_get
(
inode
,
&
ea_buf
,
0
);
if
(
xattr_size
<
0
)
{
if
(
xattr_size
<
0
)
{
size
=
xattr_size
;
size
=
xattr_size
;
goto
out
;
goto
out
;
...
@@ -955,6 +961,8 @@ ssize_t __jfs_getxattr(struct inode *inode, const char *name, void *data,
...
@@ -955,6 +961,8 @@ ssize_t __jfs_getxattr(struct inode *inode, const char *name, void *data,
release:
release:
ea_release
(
inode
,
&
ea_buf
);
ea_release
(
inode
,
&
ea_buf
);
out:
out:
up_read
(
&
JFS_IP
(
inode
)
->
xattr_sem
);
if
(
os2name
)
if
(
os2name
)
kfree
(
os2name
);
kfree
(
os2name
);
...
@@ -966,15 +974,12 @@ ssize_t jfs_getxattr(struct dentry *dentry, const char *name, void *data,
...
@@ -966,15 +974,12 @@ ssize_t jfs_getxattr(struct dentry *dentry, const char *name, void *data,
{
{
int
err
;
int
err
;
down
(
&
dentry
->
d_inode
->
i_sem
);
err
=
__jfs_getxattr
(
dentry
->
d_inode
,
name
,
data
,
buf_size
);
err
=
__jfs_getxattr
(
dentry
->
d_inode
,
name
,
data
,
buf_size
);
up
(
&
dentry
->
d_inode
->
i_sem
);
return
err
;
return
err
;
}
}
static
ssize_t
__jfs_listxattr
(
struct
dentry
*
dentry
,
char
*
data
,
ssize_t
jfs_listxattr
(
struct
dentry
*
dentry
,
char
*
data
,
size_t
buf_size
)
size_t
buf_size
)
{
{
struct
inode
*
inode
=
dentry
->
d_inode
;
struct
inode
*
inode
=
dentry
->
d_inode
;
char
*
buffer
;
char
*
buffer
;
...
@@ -984,6 +989,8 @@ static ssize_t __jfs_listxattr(struct dentry * dentry, char *data,
...
@@ -984,6 +989,8 @@ static ssize_t __jfs_listxattr(struct dentry * dentry, char *data,
struct
jfs_ea
*
ea
;
struct
jfs_ea
*
ea
;
struct
ea_buffer
ea_buf
;
struct
ea_buffer
ea_buf
;
down_read
(
&
JFS_IP
(
inode
)
->
xattr_sem
);
xattr_size
=
ea_get
(
inode
,
&
ea_buf
,
0
);
xattr_size
=
ea_get
(
inode
,
&
ea_buf
,
0
);
if
(
xattr_size
<
0
)
{
if
(
xattr_size
<
0
)
{
size
=
xattr_size
;
size
=
xattr_size
;
...
@@ -1017,20 +1024,10 @@ static ssize_t __jfs_listxattr(struct dentry * dentry, char *data,
...
@@ -1017,20 +1024,10 @@ static ssize_t __jfs_listxattr(struct dentry * dentry, char *data,
release:
release:
ea_release
(
inode
,
&
ea_buf
);
ea_release
(
inode
,
&
ea_buf
);
out:
out:
up_read
(
&
JFS_IP
(
inode
)
->
xattr_sem
);
return
size
;
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
)
int
jfs_removexattr
(
struct
dentry
*
dentry
,
const
char
*
name
)
{
{
return
__jfs_setxattr
(
dentry
->
d_inode
,
name
,
0
,
0
,
XATTR_REPLACE
);
return
__jfs_setxattr
(
dentry
->
d_inode
,
name
,
0
,
0
,
XATTR_REPLACE
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment