Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/shaggy/jfs-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/shaggy/jfs-2.6: jfs: add jfs specific ->setattr call jfs: fix diAllocExt error in resizing filesystem jfs_dmap.[ch]: trivial typo fix: s/heigth/height/g
This commit is contained in:
commit
9befb55ef5
7 changed files with 33 additions and 16 deletions
|
@ -61,7 +61,7 @@ struct inode *jfs_iget(struct super_block *sb, unsigned long ino)
|
||||||
inode->i_op = &page_symlink_inode_operations;
|
inode->i_op = &page_symlink_inode_operations;
|
||||||
inode->i_mapping->a_ops = &jfs_aops;
|
inode->i_mapping->a_ops = &jfs_aops;
|
||||||
} else {
|
} else {
|
||||||
inode->i_op = &jfs_symlink_inode_operations;
|
inode->i_op = &jfs_fast_symlink_inode_operations;
|
||||||
/*
|
/*
|
||||||
* The inline data should be null-terminated, but
|
* The inline data should be null-terminated, but
|
||||||
* don't let on-disk corruption crash the kernel
|
* don't let on-disk corruption crash the kernel
|
||||||
|
|
|
@ -196,7 +196,7 @@ int dbMount(struct inode *ipbmap)
|
||||||
bmp->db_maxag = le32_to_cpu(dbmp_le->dn_maxag);
|
bmp->db_maxag = le32_to_cpu(dbmp_le->dn_maxag);
|
||||||
bmp->db_agpref = le32_to_cpu(dbmp_le->dn_agpref);
|
bmp->db_agpref = le32_to_cpu(dbmp_le->dn_agpref);
|
||||||
bmp->db_aglevel = le32_to_cpu(dbmp_le->dn_aglevel);
|
bmp->db_aglevel = le32_to_cpu(dbmp_le->dn_aglevel);
|
||||||
bmp->db_agheigth = le32_to_cpu(dbmp_le->dn_agheigth);
|
bmp->db_agheight = le32_to_cpu(dbmp_le->dn_agheight);
|
||||||
bmp->db_agwidth = le32_to_cpu(dbmp_le->dn_agwidth);
|
bmp->db_agwidth = le32_to_cpu(dbmp_le->dn_agwidth);
|
||||||
bmp->db_agstart = le32_to_cpu(dbmp_le->dn_agstart);
|
bmp->db_agstart = le32_to_cpu(dbmp_le->dn_agstart);
|
||||||
bmp->db_agl2size = le32_to_cpu(dbmp_le->dn_agl2size);
|
bmp->db_agl2size = le32_to_cpu(dbmp_le->dn_agl2size);
|
||||||
|
@ -288,7 +288,7 @@ int dbSync(struct inode *ipbmap)
|
||||||
dbmp_le->dn_maxag = cpu_to_le32(bmp->db_maxag);
|
dbmp_le->dn_maxag = cpu_to_le32(bmp->db_maxag);
|
||||||
dbmp_le->dn_agpref = cpu_to_le32(bmp->db_agpref);
|
dbmp_le->dn_agpref = cpu_to_le32(bmp->db_agpref);
|
||||||
dbmp_le->dn_aglevel = cpu_to_le32(bmp->db_aglevel);
|
dbmp_le->dn_aglevel = cpu_to_le32(bmp->db_aglevel);
|
||||||
dbmp_le->dn_agheigth = cpu_to_le32(bmp->db_agheigth);
|
dbmp_le->dn_agheight = cpu_to_le32(bmp->db_agheight);
|
||||||
dbmp_le->dn_agwidth = cpu_to_le32(bmp->db_agwidth);
|
dbmp_le->dn_agwidth = cpu_to_le32(bmp->db_agwidth);
|
||||||
dbmp_le->dn_agstart = cpu_to_le32(bmp->db_agstart);
|
dbmp_le->dn_agstart = cpu_to_le32(bmp->db_agstart);
|
||||||
dbmp_le->dn_agl2size = cpu_to_le32(bmp->db_agl2size);
|
dbmp_le->dn_agl2size = cpu_to_le32(bmp->db_agl2size);
|
||||||
|
@ -1441,7 +1441,7 @@ dbAllocAG(struct bmap * bmp, int agno, s64 nblocks, int l2nb, s64 * results)
|
||||||
* tree index of this allocation group within the control page.
|
* tree index of this allocation group within the control page.
|
||||||
*/
|
*/
|
||||||
agperlev =
|
agperlev =
|
||||||
(1 << (L2LPERCTL - (bmp->db_agheigth << 1))) / bmp->db_agwidth;
|
(1 << (L2LPERCTL - (bmp->db_agheight << 1))) / bmp->db_agwidth;
|
||||||
ti = bmp->db_agstart + bmp->db_agwidth * (agno & (agperlev - 1));
|
ti = bmp->db_agstart + bmp->db_agwidth * (agno & (agperlev - 1));
|
||||||
|
|
||||||
/* dmap control page trees fan-out by 4 and a single allocation
|
/* dmap control page trees fan-out by 4 and a single allocation
|
||||||
|
@ -1460,7 +1460,7 @@ dbAllocAG(struct bmap * bmp, int agno, s64 nblocks, int l2nb, s64 * results)
|
||||||
* the subtree to find the leftmost leaf that describes this
|
* the subtree to find the leftmost leaf that describes this
|
||||||
* free space.
|
* free space.
|
||||||
*/
|
*/
|
||||||
for (k = bmp->db_agheigth; k > 0; k--) {
|
for (k = bmp->db_agheight; k > 0; k--) {
|
||||||
for (n = 0, m = (ti << 2) + 1; n < 4; n++) {
|
for (n = 0, m = (ti << 2) + 1; n < 4; n++) {
|
||||||
if (l2nb <= dcp->stree[m + n]) {
|
if (l2nb <= dcp->stree[m + n]) {
|
||||||
ti = m + n;
|
ti = m + n;
|
||||||
|
@ -3607,7 +3607,7 @@ void dbFinalizeBmap(struct inode *ipbmap)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* compute db_aglevel, db_agheigth, db_width, db_agstart:
|
* compute db_aglevel, db_agheight, db_width, db_agstart:
|
||||||
* an ag is covered in aglevel dmapctl summary tree,
|
* an ag is covered in aglevel dmapctl summary tree,
|
||||||
* at agheight level height (from leaf) with agwidth number of nodes
|
* at agheight level height (from leaf) with agwidth number of nodes
|
||||||
* each, which starts at agstart index node of the smmary tree node
|
* each, which starts at agstart index node of the smmary tree node
|
||||||
|
@ -3616,9 +3616,9 @@ void dbFinalizeBmap(struct inode *ipbmap)
|
||||||
bmp->db_aglevel = BMAPSZTOLEV(bmp->db_agsize);
|
bmp->db_aglevel = BMAPSZTOLEV(bmp->db_agsize);
|
||||||
l2nl =
|
l2nl =
|
||||||
bmp->db_agl2size - (L2BPERDMAP + bmp->db_aglevel * L2LPERCTL);
|
bmp->db_agl2size - (L2BPERDMAP + bmp->db_aglevel * L2LPERCTL);
|
||||||
bmp->db_agheigth = l2nl >> 1;
|
bmp->db_agheight = l2nl >> 1;
|
||||||
bmp->db_agwidth = 1 << (l2nl - (bmp->db_agheigth << 1));
|
bmp->db_agwidth = 1 << (l2nl - (bmp->db_agheight << 1));
|
||||||
for (i = 5 - bmp->db_agheigth, bmp->db_agstart = 0, n = 1; i > 0;
|
for (i = 5 - bmp->db_agheight, bmp->db_agstart = 0, n = 1; i > 0;
|
||||||
i--) {
|
i--) {
|
||||||
bmp->db_agstart += n;
|
bmp->db_agstart += n;
|
||||||
n <<= 2;
|
n <<= 2;
|
||||||
|
|
|
@ -210,7 +210,7 @@ struct dbmap_disk {
|
||||||
__le32 dn_maxag; /* 4: max active alloc group number */
|
__le32 dn_maxag; /* 4: max active alloc group number */
|
||||||
__le32 dn_agpref; /* 4: preferred alloc group (hint) */
|
__le32 dn_agpref; /* 4: preferred alloc group (hint) */
|
||||||
__le32 dn_aglevel; /* 4: dmapctl level holding the AG */
|
__le32 dn_aglevel; /* 4: dmapctl level holding the AG */
|
||||||
__le32 dn_agheigth; /* 4: height in dmapctl of the AG */
|
__le32 dn_agheight; /* 4: height in dmapctl of the AG */
|
||||||
__le32 dn_agwidth; /* 4: width in dmapctl of the AG */
|
__le32 dn_agwidth; /* 4: width in dmapctl of the AG */
|
||||||
__le32 dn_agstart; /* 4: start tree index at AG height */
|
__le32 dn_agstart; /* 4: start tree index at AG height */
|
||||||
__le32 dn_agl2size; /* 4: l2 num of blks per alloc group */
|
__le32 dn_agl2size; /* 4: l2 num of blks per alloc group */
|
||||||
|
@ -229,7 +229,7 @@ struct dbmap {
|
||||||
int dn_maxag; /* max active alloc group number */
|
int dn_maxag; /* max active alloc group number */
|
||||||
int dn_agpref; /* preferred alloc group (hint) */
|
int dn_agpref; /* preferred alloc group (hint) */
|
||||||
int dn_aglevel; /* dmapctl level holding the AG */
|
int dn_aglevel; /* dmapctl level holding the AG */
|
||||||
int dn_agheigth; /* height in dmapctl of the AG */
|
int dn_agheight; /* height in dmapctl of the AG */
|
||||||
int dn_agwidth; /* width in dmapctl of the AG */
|
int dn_agwidth; /* width in dmapctl of the AG */
|
||||||
int dn_agstart; /* start tree index at AG height */
|
int dn_agstart; /* start tree index at AG height */
|
||||||
int dn_agl2size; /* l2 num of blks per alloc group */
|
int dn_agl2size; /* l2 num of blks per alloc group */
|
||||||
|
@ -255,7 +255,7 @@ struct bmap {
|
||||||
#define db_agsize db_bmap.dn_agsize
|
#define db_agsize db_bmap.dn_agsize
|
||||||
#define db_agl2size db_bmap.dn_agl2size
|
#define db_agl2size db_bmap.dn_agl2size
|
||||||
#define db_agwidth db_bmap.dn_agwidth
|
#define db_agwidth db_bmap.dn_agwidth
|
||||||
#define db_agheigth db_bmap.dn_agheigth
|
#define db_agheight db_bmap.dn_agheight
|
||||||
#define db_agstart db_bmap.dn_agstart
|
#define db_agstart db_bmap.dn_agstart
|
||||||
#define db_numag db_bmap.dn_numag
|
#define db_numag db_bmap.dn_numag
|
||||||
#define db_maxlevel db_bmap.dn_maxlevel
|
#define db_maxlevel db_bmap.dn_maxlevel
|
||||||
|
|
|
@ -48,5 +48,6 @@ extern const struct file_operations jfs_dir_operations;
|
||||||
extern const struct inode_operations jfs_file_inode_operations;
|
extern const struct inode_operations jfs_file_inode_operations;
|
||||||
extern const struct file_operations jfs_file_operations;
|
extern const struct file_operations jfs_file_operations;
|
||||||
extern const struct inode_operations jfs_symlink_inode_operations;
|
extern const struct inode_operations jfs_symlink_inode_operations;
|
||||||
|
extern const struct inode_operations jfs_fast_symlink_inode_operations;
|
||||||
extern const struct dentry_operations jfs_ci_dentry_operations;
|
extern const struct dentry_operations jfs_ci_dentry_operations;
|
||||||
#endif /* _H_JFS_INODE */
|
#endif /* _H_JFS_INODE */
|
||||||
|
|
|
@ -956,7 +956,7 @@ static int jfs_symlink(struct inode *dip, struct dentry *dentry,
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (ssize <= IDATASIZE) {
|
if (ssize <= IDATASIZE) {
|
||||||
ip->i_op = &jfs_symlink_inode_operations;
|
ip->i_op = &jfs_fast_symlink_inode_operations;
|
||||||
|
|
||||||
i_fastsymlink = JFS_IP(ip)->i_inline;
|
i_fastsymlink = JFS_IP(ip)->i_inline;
|
||||||
memcpy(i_fastsymlink, name, ssize);
|
memcpy(i_fastsymlink, name, ssize);
|
||||||
|
@ -978,7 +978,7 @@ static int jfs_symlink(struct inode *dip, struct dentry *dentry,
|
||||||
else {
|
else {
|
||||||
jfs_info("jfs_symlink: allocate extent ip:0x%p", ip);
|
jfs_info("jfs_symlink: allocate extent ip:0x%p", ip);
|
||||||
|
|
||||||
ip->i_op = &page_symlink_inode_operations;
|
ip->i_op = &jfs_symlink_inode_operations;
|
||||||
ip->i_mapping->a_ops = &jfs_aops;
|
ip->i_mapping->a_ops = &jfs_aops;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -81,6 +81,7 @@ int jfs_extendfs(struct super_block *sb, s64 newLVSize, int newLogSize)
|
||||||
struct inode *iplist[1];
|
struct inode *iplist[1];
|
||||||
struct jfs_superblock *j_sb, *j_sb2;
|
struct jfs_superblock *j_sb, *j_sb2;
|
||||||
uint old_agsize;
|
uint old_agsize;
|
||||||
|
int agsizechanged = 0;
|
||||||
struct buffer_head *bh, *bh2;
|
struct buffer_head *bh, *bh2;
|
||||||
|
|
||||||
/* If the volume hasn't grown, get out now */
|
/* If the volume hasn't grown, get out now */
|
||||||
|
@ -333,6 +334,9 @@ int jfs_extendfs(struct super_block *sb, s64 newLVSize, int newLogSize)
|
||||||
*/
|
*/
|
||||||
if ((rc = dbExtendFS(ipbmap, XAddress, nblocks)))
|
if ((rc = dbExtendFS(ipbmap, XAddress, nblocks)))
|
||||||
goto error_out;
|
goto error_out;
|
||||||
|
|
||||||
|
agsizechanged |= (bmp->db_agsize != old_agsize);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* the map now has extended to cover additional nblocks:
|
* the map now has extended to cover additional nblocks:
|
||||||
* dn_mapsize = oldMapsize + nblocks;
|
* dn_mapsize = oldMapsize + nblocks;
|
||||||
|
@ -432,7 +436,7 @@ int jfs_extendfs(struct super_block *sb, s64 newLVSize, int newLogSize)
|
||||||
* will correctly identify the new ag);
|
* will correctly identify the new ag);
|
||||||
*/
|
*/
|
||||||
/* if new AG size the same as old AG size, done! */
|
/* if new AG size the same as old AG size, done! */
|
||||||
if (bmp->db_agsize != old_agsize) {
|
if (agsizechanged) {
|
||||||
if ((rc = diExtendFS(ipimap, ipbmap)))
|
if ((rc = diExtendFS(ipimap, ipbmap)))
|
||||||
goto error_out;
|
goto error_out;
|
||||||
|
|
||||||
|
|
|
@ -29,9 +29,21 @@ static void *jfs_follow_link(struct dentry *dentry, struct nameidata *nd)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
const struct inode_operations jfs_symlink_inode_operations = {
|
const struct inode_operations jfs_fast_symlink_inode_operations = {
|
||||||
.readlink = generic_readlink,
|
.readlink = generic_readlink,
|
||||||
.follow_link = jfs_follow_link,
|
.follow_link = jfs_follow_link,
|
||||||
|
.setattr = jfs_setattr,
|
||||||
|
.setxattr = jfs_setxattr,
|
||||||
|
.getxattr = jfs_getxattr,
|
||||||
|
.listxattr = jfs_listxattr,
|
||||||
|
.removexattr = jfs_removexattr,
|
||||||
|
};
|
||||||
|
|
||||||
|
const struct inode_operations jfs_symlink_inode_operations = {
|
||||||
|
.readlink = generic_readlink,
|
||||||
|
.follow_link = page_follow_link_light,
|
||||||
|
.put_link = page_put_link,
|
||||||
|
.setattr = jfs_setattr,
|
||||||
.setxattr = jfs_setxattr,
|
.setxattr = jfs_setxattr,
|
||||||
.getxattr = jfs_getxattr,
|
.getxattr = jfs_getxattr,
|
||||||
.listxattr = jfs_listxattr,
|
.listxattr = jfs_listxattr,
|
||||||
|
|
Loading…
Reference in a new issue