Commit 9befb55e authored by Linus Torvalds's avatar Linus Torvalds

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
parents a486b0af c7f2e1f0
...@@ -61,7 +61,7 @@ struct inode *jfs_iget(struct super_block *sb, unsigned long ino) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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; ...@@ -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, ...@@ -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, ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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,
......
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