X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=fs%2Fjfs%2Fsuper.c;h=45b372ddf7cd59f41136c79d1918fd4fc4c8af4f;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=d359c26195cfbf980a4a18932f1cb0b8c77647b0;hpb=9213980e6a70d8473e0ffd4b39ab5b6caaba9ff5;p=linux-2.6.git diff --git a/fs/jfs/super.c b/fs/jfs/super.c index d359c2619..45b372ddf 100644 --- a/fs/jfs/super.c +++ b/fs/jfs/super.c @@ -58,7 +58,7 @@ DECLARE_COMPLETION(jfsIOwait); #ifdef CONFIG_JFS_DEBUG int jfsloglevel = JFS_LOGLEVEL_WARN; -module_param(jfsloglevel, int, 644); +module_param(jfsloglevel, int, 0644); MODULE_PARM_DESC(jfsloglevel, "Specify JFS loglevel (0, 1 or 2)"); #endif @@ -77,11 +77,13 @@ extern int jfs_sync(void *); extern void jfs_read_inode(struct inode *inode); extern void jfs_dirty_inode(struct inode *inode); extern void jfs_delete_inode(struct inode *inode); -extern void jfs_write_inode(struct inode *inode, int wait); +extern int jfs_write_inode(struct inode *inode, int wait); extern struct dentry *jfs_get_parent(struct dentry *dentry); extern int jfs_extendfs(struct super_block *, s64, int); +extern struct dentry_operations jfs_ci_dentry_operations; + #ifdef PROC_FS_JFS /* see jfs_debug.h */ extern void jfs_proc_init(void); extern void jfs_proc_clean(void); @@ -141,10 +143,13 @@ static void jfs_destroy_inode(struct inode *inode) { struct jfs_inode_info *ji = JFS_IP(inode); + spin_lock_irq(&ji->ag_lock); if (ji->active_ag != -1) { struct bmap *bmap = JFS_SBI(inode->i_sb)->bmap; atomic_dec(&bmap->db_active[ji->active_ag]); + ji->active_ag = -1; } + spin_unlock_irq(&ji->ag_lock); #ifdef CONFIG_JFS_POSIX_ACL if (ji->i_acl != JFS_ACL_NOT_CACHED) { @@ -398,6 +403,10 @@ static int jfs_fill_super(struct super_block *sb, void *data, int silent) } sbi->flag = flag; +#ifdef CONFIG_JFS_POSIX_ACL + sb->s_flags |= MS_POSIXACL; +#endif + if (newLVSize) { printk(KERN_ERR "resize option for remount only\n"); return -EINVAL; @@ -422,7 +431,7 @@ static int jfs_fill_super(struct super_block *sb, void *data, int silent) goto out_kfree; } if (sb->s_flags & MS_RDONLY) - sbi->log = 0; + sbi->log = NULL; else { rc = jfs_mount_rw(sb, 0); if (rc) { @@ -443,6 +452,9 @@ static int jfs_fill_super(struct super_block *sb, void *data, int silent) if (!sb->s_root) goto out_no_root; + if (sbi->mntflag & JFS_OS2) + sb->s_root->d_op = &jfs_ci_dentry_operations; + /* logical blocks are represented by 40 bits in pxd_t, etc. */ sb->s_maxbytes = ((u64) sb->s_blocksize) << 40; #if BITS_PER_LONG == 32 @@ -452,7 +464,7 @@ static int jfs_fill_super(struct super_block *sb, void *data, int silent) */ sb->s_maxbytes = min(((u64) PAGE_CACHE_SIZE << 32) - 1, sb->s_maxbytes); #endif - + sb->s_time_gran = 1; return 0; out_no_root: @@ -559,6 +571,7 @@ static void init_once(void *foo, kmem_cache_t * cachep, unsigned long flags) init_rwsem(&jfs_ip->rdwrlock); init_MUTEX(&jfs_ip->commit_sem); init_rwsem(&jfs_ip->xattr_sem); + spin_lock_init(&jfs_ip->ag_lock); jfs_ip->active_ag = -1; #ifdef CONFIG_JFS_POSIX_ACL jfs_ip->i_acl = JFS_ACL_NOT_CACHED; @@ -600,7 +613,7 @@ static int __init init_jfs_fs(void) /* * I/O completion thread (endio) */ - jfsIOthread = kernel_thread(jfsIOWait, 0, CLONE_KERNEL); + jfsIOthread = kernel_thread(jfsIOWait, NULL, CLONE_KERNEL); if (jfsIOthread < 0) { jfs_err("init_jfs_fs: fork failed w/rc = %d", jfsIOthread); goto end_txmngr; @@ -613,7 +626,7 @@ static int __init init_jfs_fs(void) commit_threads = MAX_COMMIT_THREADS; for (i = 0; i < commit_threads; i++) { - jfsCommitThread[i] = kernel_thread(jfs_lazycommit, 0, + jfsCommitThread[i] = kernel_thread(jfs_lazycommit, NULL, CLONE_KERNEL); if (jfsCommitThread[i] < 0) { jfs_err("init_jfs_fs: fork failed w/rc = %d", @@ -625,7 +638,7 @@ static int __init init_jfs_fs(void) wait_for_completion(&jfsIOwait); } - jfsSyncThread = kernel_thread(jfs_sync, 0, CLONE_KERNEL); + jfsSyncThread = kernel_thread(jfs_sync, NULL, CLONE_KERNEL); if (jfsSyncThread < 0) { jfs_err("init_jfs_fs: fork failed w/rc = %d", jfsSyncThread); goto kill_committask;