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
nexedi
linux
Commits
90041109
Commit
90041109
authored
Aug 29, 2002
by
Dave Kleikamp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
JFS extended attributes
parent
407a52fa
Changes
10
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
924 additions
and
11 deletions
+924
-11
fs/jfs/Makefile
fs/jfs/Makefile
+1
-1
fs/jfs/file.c
fs/jfs/file.c
+13
-0
fs/jfs/inode.c
fs/jfs/inode.c
+2
-0
fs/jfs/jfs_imap.c
fs/jfs/jfs_imap.c
+9
-10
fs/jfs/jfs_incore.h
fs/jfs/jfs_incore.h
+5
-0
fs/jfs/jfs_types.h
fs/jfs/jfs_types.h
+2
-0
fs/jfs/jfs_xattr.h
fs/jfs/jfs_xattr.h
+60
-0
fs/jfs/namei.c
fs/jfs/namei.c
+15
-0
fs/jfs/symlink.c
fs/jfs/symlink.c
+5
-0
fs/jfs/xattr.c
fs/jfs/xattr.c
+812
-0
No files found.
fs/jfs/Makefile
View file @
90041109
...
...
@@ -8,7 +8,7 @@ jfs-objs := super.o file.o inode.o namei.o jfs_mount.o jfs_umount.o \
jfs_xtree.o jfs_imap.o jfs_debug.o jfs_dmap.o
\
jfs_unicode.o jfs_dtree.o jfs_inode.o
\
jfs_extent.o symlink.o jfs_metapage.o
\
jfs_logmgr.o jfs_txnmgr.o jfs_uniupr.o resize.o
jfs_logmgr.o jfs_txnmgr.o jfs_uniupr.o resize.o
xattr.o
EXTRA_CFLAGS
+=
-D_JFS_4K
...
...
fs/jfs/file.c
View file @
90041109
...
...
@@ -20,6 +20,7 @@
#include <linux/fs.h>
#include "jfs_incore.h"
#include "jfs_txnmgr.h"
#include "jfs_xattr.h"
#include "jfs_debug.h"
...
...
@@ -98,6 +99,10 @@ static void jfs_truncate(struct inode *ip)
struct
inode_operations
jfs_file_inode_operations
=
{
.
truncate
=
jfs_truncate
,
.
setxattr
=
jfs_setxattr
,
.
getxattr
=
jfs_getxattr
,
.
listxattr
=
jfs_listxattr
,
.
removexattr
=
jfs_removexattr
,
};
struct
file_operations
jfs_file_operations
=
{
...
...
@@ -109,3 +114,11 @@ struct file_operations jfs_file_operations = {
.
sendfile
=
generic_file_sendfile
,
.
fsync
=
jfs_fsync
,
};
struct
inode_operations
jfs_special_inode_operations
=
{
.
setxattr
=
jfs_setxattr
,
.
getxattr
=
jfs_getxattr
,
.
listxattr
=
jfs_listxattr
,
.
removexattr
=
jfs_removexattr
,
};
fs/jfs/inode.c
View file @
90041109
...
...
@@ -31,6 +31,7 @@
extern
struct
inode_operations
jfs_dir_inode_operations
;
extern
struct
inode_operations
jfs_file_inode_operations
;
extern
struct
inode_operations
jfs_symlink_inode_operations
;
extern
struct
inode_operations
jfs_special_inode_operations
;
extern
struct
file_operations
jfs_dir_operations
;
extern
struct
file_operations
jfs_file_operations
;
struct
address_space_operations
jfs_aops
;
...
...
@@ -65,6 +66,7 @@ struct inode *jfs_iget(struct super_block *sb, ino_t ino)
}
else
inode
->
i_op
=
&
jfs_symlink_inode_operations
;
}
else
{
inode
->
i_op
=
&
jfs_special_inode_operations
;
init_special_inode
(
inode
,
inode
->
i_mode
,
kdev_t_to_nr
(
inode
->
i_rdev
));
}
...
...
fs/jfs/jfs_imap.c
View file @
90041109
...
...
@@ -815,21 +815,19 @@ int diWrite(tid_t tid, struct inode *ip)
memcpy
(
&
dp
->
di_fastsymlink
,
jfs_ip
->
i_inline
,
IDATASIZE
);
dilinelock
->
index
++
;
}
#ifdef _STILL_TO_PORT
/*
* copy inline data from in-memory inode to on-disk inode:
* 128 byte slot granularity
*/
if
(
test_cflag
(
COMMIT_Inlineea
,
ip
))
if
(
test_cflag
(
COMMIT_Inlineea
,
ip
))
{
lv
=
(
lv_t
*
)
&
dilinelock
->
lv
[
dilinelock
->
index
];
lv
->
offset
=
(
dioffset
+
3
*
128
)
>>
L2INODESLOTSIZE
;
lv
->
length
=
1
;
memcpy
(
&
dp
->
di_inlineea
,
&
ip
->
i_inline
ea
,
INODESLOTSIZE
);
memcpy
(
&
dp
->
di_inlineea
,
jfs_ip
->
i_inline_
ea
,
INODESLOTSIZE
);
dilinelock
->
index
++
;
clear_cflag
(
COMMIT_Inlineea
,
ip
);
}
#endif
/* _STILL_TO_PORT */
/*
* lock/copy inode base: 128 byte slot granularity
...
...
@@ -3042,16 +3040,17 @@ static int copy_from_dinode(dinode_t * dip, struct inode *ip)
jfs_ip
->
next_index
=
le32_to_cpu
(
dip
->
di_next_index
);
jfs_ip
->
otime
=
le32_to_cpu
(
dip
->
di_otime
.
tv_sec
);
jfs_ip
->
acltype
=
le32_to_cpu
(
dip
->
di_acltype
);
/*
* We may only need to do this for "special" inodes (dmap, imap)
*/
if
(
S_ISCHR
(
ip
->
i_mode
)
||
S_ISBLK
(
ip
->
i_mode
))
ip
->
i_rdev
=
to_kdev_t
(
le32_to_cpu
(
dip
->
di_rdev
));
else
if
(
S_ISDIR
(
ip
->
i_mode
))
{
if
(
S_ISDIR
(
ip
->
i_mode
))
{
memcpy
(
&
jfs_ip
->
i_dirtable
,
&
dip
->
di_dirtable
,
384
);
}
else
if
(
!
S_ISFIFO
(
ip
->
i_mode
))
{
}
else
if
(
S_ISREG
(
ip
->
i_mode
)
||
S_ISLNK
(
ip
->
i_mode
))
{
memcpy
(
&
jfs_ip
->
i_xtroot
,
&
dip
->
di_xtroot
,
288
);
}
}
else
memcpy
(
&
jfs_ip
->
i_inline_ea
,
&
dip
->
di_inlineea
,
128
);
/* Zero the in-memory-only stuff */
jfs_ip
->
cflag
=
0
;
jfs_ip
->
btindex
=
0
;
...
...
fs/jfs/jfs_incore.h
View file @
90041109
...
...
@@ -82,6 +82,10 @@ struct jfs_inode_info {
unchar
_unused
[
16
];
/* 16: */
dxd_t
_dxd
;
/* 16: */
unchar
_inline
[
128
];
/* 128: inline symlink */
/* _inline_ea may overlay the last part of
* file._xtroot if maxentry = XTROOTINITSLOT
*/
unchar
_inline_ea
[
128
];
/* 128: inline extended attr */
}
link
;
}
u
;
struct
inode
vfs_inode
;
...
...
@@ -91,6 +95,7 @@ struct jfs_inode_info {
#define i_dirtable u.dir._table
#define i_dtroot u.dir._dtroot
#define i_inline u.link._inline
#define i_inline_ea u.link._inline_ea
#define IREAD_LOCK(ip) down_read(&JFS_IP(ip)->rdwrlock)
...
...
fs/jfs/jfs_types.h
View file @
90041109
...
...
@@ -144,6 +144,8 @@ typedef struct {
#define DXDaddress PXDaddress
#define lengthDXD lengthPXD
#define addressDXD addressPXD
#define DXDsize(dxd, size32) ((dxd)->size = cpu_to_le32(size32))
#define sizeDXD(dxd) le32_to_cpu((dxd)->size)
/*
* directory entry argument
...
...
fs/jfs/jfs_xattr.h
0 → 100644
View file @
90041109
/*
* Copyright (c) International Business Machines Corp., 2000-2002
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
* the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef H_JFS_XATTR
#define H_JFS_XATTR
/*
* jfs_ea_list describe the on-disk format of the extended attributes.
* I know the null-terminator is redundant since namelen is stored, but
* I am maintaining compatibility with OS/2 where possible.
*/
struct
jfs_ea
{
u8
flag
;
/* Unused? */
u8
namelen
;
/* Length of name */
u16
valuelen
;
/* Length of value */
char
name
[
0
];
/* Attribute name (includes null-terminator) */
};
/* Value immediately follows name */
struct
jfs_ea_list
{
u32
size
;
/* overall size */
struct
jfs_ea
ea
[
0
];
/* Variable length list */
};
/* Macros for defining maxiumum number of bytes supported for EAs */
#define MAXEASIZE 65535
#define MAXEALISTSIZE MAXEASIZE
/*
* some macros for dealing with variable length EA lists.
*/
#define EA_SIZE(ea) \
(sizeof (struct jfs_ea) + (ea)->namelen + 1 + \
le16_to_cpu((ea)->valuelen))
#define NEXT_EA(ea) ((struct jfs_ea *) (((char *) (ea)) + (EA_SIZE (ea))))
#define FIRST_EA(ealist) ((ealist)->ea)
#define EALIST_SIZE(ealist) le32_to_cpu((ealist)->size)
#define END_EALIST(ealist) \
((struct jfs_ea *) (((char *) (ealist)) + EALIST_SIZE(ealist)))
extern
int
jfs_setxattr
(
struct
dentry
*
,
const
char
*
,
void
*
,
size_t
,
int
);
extern
ssize_t
jfs_getxattr
(
struct
dentry
*
,
const
char
*
,
void
*
,
size_t
);
extern
ssize_t
jfs_listxattr
(
struct
dentry
*
,
char
*
,
size_t
);
extern
int
jfs_removexattr
(
struct
dentry
*
,
const
char
*
);
#endif
/* H_JFS_XATTR */
fs/jfs/namei.c
View file @
90041109
...
...
@@ -24,10 +24,12 @@
#include "jfs_dmap.h"
#include "jfs_unicode.h"
#include "jfs_metapage.h"
#include "jfs_xattr.h"
#include "jfs_debug.h"
extern
struct
inode_operations
jfs_file_inode_operations
;
extern
struct
inode_operations
jfs_symlink_inode_operations
;
extern
struct
inode_operations
jfs_special_inode_operations
;
extern
struct
file_operations
jfs_file_operations
;
extern
struct
address_space_operations
jfs_aops
;
...
...
@@ -913,6 +915,14 @@ int jfs_symlink(struct inode *dip, struct dentry *dentry, const char *name)
i_fastsymlink
=
JFS_IP
(
ip
)
->
i_inline
;
memcpy
(
i_fastsymlink
,
name
,
ssize
);
ip
->
i_size
=
ssize
-
1
;
/*
* if symlink is > 128 bytes, we don't have the space to
* store inline extended attributes
*/
if
(
ssize
>
sizeof
(
JFS_IP
(
ip
)
->
i_inline
))
JFS_IP
(
ip
)
->
mode2
&=
~
INLINEEA
;
jFYI
(
1
,
(
"jfs_symlink: fast symlink added ssize:%d name:%s
\n
"
,
ssize
,
name
));
...
...
@@ -1328,6 +1338,7 @@ int jfs_mknod(struct inode *dir, struct dentry *dentry, int mode, int rdev)
if
((
rc
=
dtInsert
(
tid
,
dir
,
&
dname
,
&
ino
,
&
btstack
)))
goto
out3
;
ip
->
i_op
=
&
jfs_special_inode_operations
;
init_special_inode
(
ip
,
ip
->
i_mode
,
rdev
);
insert_inode_hash
(
ip
);
...
...
@@ -1431,6 +1442,10 @@ struct inode_operations jfs_dir_inode_operations = {
.
rmdir
=
jfs_rmdir
,
.
mknod
=
jfs_mknod
,
.
rename
=
jfs_rename
,
.
setxattr
=
jfs_setxattr
,
.
getxattr
=
jfs_getxattr
,
.
listxattr
=
jfs_listxattr
,
.
removexattr
=
jfs_removexattr
,
};
struct
file_operations
jfs_dir_operations
=
{
...
...
fs/jfs/symlink.c
View file @
90041109
...
...
@@ -18,6 +18,7 @@
#include <linux/fs.h>
#include "jfs_incore.h"
#include "jfs_xattr.h"
static
int
jfs_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
{
...
...
@@ -34,5 +35,9 @@ static int jfs_readlink(struct dentry *dentry, char *buffer, int buflen)
struct
inode_operations
jfs_symlink_inode_operations
=
{
.
readlink
=
jfs_readlink
,
.
follow_link
=
jfs_follow_link
,
.
setxattr
=
jfs_setxattr
,
.
getxattr
=
jfs_getxattr
,
.
listxattr
=
jfs_listxattr
,
.
removexattr
=
jfs_removexattr
,
};
fs/jfs/xattr.c
0 → 100644
View file @
90041109
This diff is collapsed.
Click to expand it.
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