http://jfs.bkbits.net/linux-2.5 jfs.adm@bkbits.net|ChangeSet|20050324200853|15395 jfs.adm # This is a BitKeeper generated diff -Nru style patch. # # ChangeSet # 2005/03/24 08:06:44-06:00 shaggy@austin.ibm.com # JFS: remove aops from directory inodes # # jfs no longer uses a directory inode's address space. Clean up the # code by removing aops for directories altogether # # Signed-off-by: Dave Kleikamp # # fs/jfs/namei.c # 2005/03/24 08:05:42-06:00 shaggy@austin.ibm.com +0 -2 # directories no longer need aops # # fs/jfs/inode.c # 2005/03/24 08:05:42-06:00 shaggy@austin.ibm.com +3 -11 # directories no longer need aops # # ChangeSet # 2005/03/23 16:43:50-06:00 shaggy@austin.ibm.com # JFS: Don't allow xtLookup to run against directory with inline data # # Signed-off-by: Dave Kleikamp # # fs/jfs/jfs_txnmgr.c # 2005/03/23 16:43:27-06:00 shaggy@austin.ibm.com +1 -1 # jfs_dirtable_inline function # # fs/jfs/jfs_incore.h # 2005/03/23 16:43:27-06:00 shaggy@austin.ibm.com +5 -1 # jfs_dirtable_inline function # # fs/jfs/jfs_dtree.c # 2005/03/23 16:43:27-06:00 shaggy@austin.ibm.com +2 -2 # jfs_dirtable_inline function # # fs/jfs/inode.c # 2005/03/23 16:43:27-06:00 shaggy@austin.ibm.com +5 -8 # disallow xtLookup of directory that contains inline data # # ChangeSet # 2005/03/16 15:43:34-06:00 shaggy@austin.ibm.com # JFS: Fix hang caused by race waking commit threads # # The flag, jfs_commit_threads_waking, is meant to avoid waking up too # many jfs_commit threads when only one is needed. There is a # possibility that all the threads will be running, and the flag gets # set, but never reset. The fix is to make sure the flag is reset # before a thread sleeps. # # Signed-off-by: Dave Kleikamp # # fs/jfs/jfs_txnmgr.c # 2005/03/16 15:43:17-06:00 shaggy@austin.ibm.com +3 -1 # Reset jfs_commit_threads_waking before going to sleep # # ChangeSet # 2005/03/15 09:16:28-06:00 shaggy@austin.ibm.com # JFS: Don't clobber wait_queue_head while there are waitors on it # # The resize code closes down the log and reinitializes it in another location # on the disk. The problem is that it re-initializes a wait_queue_head while # there are waitors waiting for the resize to be completed. The result # is that the waitors are never awakened. # # Signed-off-by: Dave Kleikamp # # fs/jfs/jfs_logmgr.c # 2005/03/15 09:15:55-06:00 shaggy@austin.ibm.com +3 -2 # Don't clobber wait_queue_head while there are waitors on it # # ChangeSet # 2005/03/13 18:10:17-08:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-jfs # # MAINTAINERS # 2005/03/13 18:10:12-08:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2005/03/12 12:38:08-08:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-jfs # # MAINTAINERS # 2005/03/12 12:38:03-08:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2005/03/10 12:11:55-08:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-jfs # # MAINTAINERS # 2005/03/10 12:11:50-08:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2005/03/08 23:38:39-08:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-jfs # # MAINTAINERS # 2005/03/08 23:38:34-08:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2005/03/08 13:14:29-08:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-jfs # # MAINTAINERS # 2005/03/08 13:14:24-08:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2005/03/07 14:55:45-08:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-jfs # # MAINTAINERS # 2005/03/07 14:55:38-08:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2005/03/07 13:59:12-08:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-jfs # # MAINTAINERS # 2005/03/07 13:59:07-08:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2005/03/06 19:24:18-08:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-jfs # # MAINTAINERS # 2005/03/06 19:24:13-08:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2005/03/05 15:22:26-08:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-jfs # # MAINTAINERS # 2005/03/05 15:22:21-08:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2005/03/04 20:50:25-08:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-jfs # # MAINTAINERS # 2005/03/04 20:50:20-08:00 akpm@bix.(none) +0 -0 # Auto merged # diff -Nru a/fs/jfs/inode.c b/fs/jfs/inode.c --- a/fs/jfs/inode.c 2005-03-24 18:10:38 -08:00 +++ b/fs/jfs/inode.c 2005-03-24 18:10:38 -08:00 @@ -52,8 +52,6 @@ } else if (S_ISDIR(inode->i_mode)) { inode->i_op = &jfs_dir_inode_operations; inode->i_fop = &jfs_dir_operations; - inode->i_mapping->a_ops = &jfs_aops; - mapping_set_gfp_mask(inode->i_mapping, GFP_NOFS); } else if (S_ISLNK(inode->i_mode)) { if (inode->i_size >= IDATASIZE) { inode->i_op = &page_symlink_inode_operations; @@ -176,7 +174,6 @@ struct buffer_head *bh_result, int create) { s64 lblock64 = lblock; - int no_size_check = 0; int rc = 0; int take_locks; xad_t xad; @@ -185,11 +182,11 @@ s32 xlen; /* - * If this is a special inode (imap, dmap) or directory, + * If this is a special inode (imap, dmap) * the lock should already be taken */ - take_locks = ((JFS_IP(ip)->fileset != AGGREGATE_I) && - !S_ISDIR(ip->i_mode)); + take_locks = (JFS_IP(ip)->fileset != AGGREGATE_I); + /* * Take appropriate lock on inode */ @@ -200,16 +197,8 @@ IREAD_LOCK(ip); } - /* - * A directory's "data" is the inode index table, but i_size is the - * size of the d-tree, so don't check the offset against i_size - */ - if (S_ISDIR(ip->i_mode)) - no_size_check = 1; - - if ((no_size_check || - ((lblock64 << ip->i_sb->s_blocksize_bits) < ip->i_size)) && - (xtLookup(ip, lblock64, max_blocks, &xflag, &xaddr, &xlen, no_size_check) + if (((lblock64 << ip->i_sb->s_blocksize_bits) < ip->i_size) && + (xtLookup(ip, lblock64, max_blocks, &xflag, &xaddr, &xlen, 0) == 0) && xlen) { if (xflag & XAD_NOTRECORDED) { if (!create) diff -Nru a/fs/jfs/jfs_dtree.c b/fs/jfs/jfs_dtree.c --- a/fs/jfs/jfs_dtree.c 2005-03-24 18:10:38 -08:00 +++ b/fs/jfs/jfs_dtree.c 2005-03-24 18:10:38 -08:00 @@ -268,7 +268,7 @@ return NULL; } - if (jfs_ip->next_index <= (MAX_INLINE_DIRTABLE_ENTRY + 1)) { + if (jfs_dirtable_inline(ip)) { /* * Inline directory table */ @@ -2828,7 +2828,7 @@ * the old directory table. */ if (DO_INDEX(ip)) { - if (jfs_ip->next_index > (MAX_INLINE_DIRTABLE_ENTRY + 1)) { + if (!jfs_dirtable_inline(ip)) { struct tblock *tblk = tid_to_tblock(tid); /* * We're playing games with the tid's xflag. If diff -Nru a/fs/jfs/jfs_incore.h b/fs/jfs/jfs_incore.h --- a/fs/jfs/jfs_incore.h 2005-03-24 18:10:38 -08:00 +++ b/fs/jfs/jfs_incore.h 2005-03-24 18:10:38 -08:00 @@ -178,6 +178,11 @@ return list_entry(inode, struct jfs_inode_info, vfs_inode); } +static inline int jfs_dirtable_inline(struct inode *inode) +{ + return (JFS_IP(inode)->next_index <= (MAX_INLINE_DIRTABLE_ENTRY + 1)); +} + static inline struct jfs_sb_info *JFS_SBI(struct super_block *sb) { return sb->s_fs_info; @@ -189,5 +194,4 @@ return 0; return 1; } - #endif /* _H_JFS_INCORE */ diff -Nru a/fs/jfs/jfs_logmgr.c b/fs/jfs/jfs_logmgr.c --- a/fs/jfs/jfs_logmgr.c 2005-03-24 18:10:38 -08:00 +++ b/fs/jfs/jfs_logmgr.c 2005-03-24 18:10:38 -08:00 @@ -1119,6 +1119,7 @@ } memset(log, 0, sizeof(struct jfs_log)); INIT_LIST_HEAD(&log->sb_list); + init_waitqueue_head(&log->syncwait); /* * external log as separate logical volume @@ -1192,6 +1193,7 @@ return -ENOMEM; memset(log, 0, sizeof(struct jfs_log)); INIT_LIST_HEAD(&log->sb_list); + init_waitqueue_head(&log->syncwait); set_bit(log_INLINELOG, &log->flag); log->bdev = sb->s_bdev; @@ -1229,6 +1231,7 @@ } memset(dummy_log, 0, sizeof(struct jfs_log)); INIT_LIST_HEAD(&dummy_log->sb_list); + init_waitqueue_head(&dummy_log->syncwait); dummy_log->no_integrity = 1; /* Make up some stuff */ dummy_log->base = 0; @@ -1290,8 +1293,6 @@ LOGSYNC_LOCK_INIT(log); INIT_LIST_HEAD(&log->synclist); - - init_waitqueue_head(&log->syncwait); INIT_LIST_HEAD(&log->cqueue); log->flush_tblk = NULL; diff -Nru a/fs/jfs/jfs_txnmgr.c b/fs/jfs/jfs_txnmgr.c --- a/fs/jfs/jfs_txnmgr.c 2005-03-24 18:10:38 -08:00 +++ b/fs/jfs/jfs_txnmgr.c 2005-03-24 18:10:38 -08:00 @@ -1,5 +1,5 @@ /* - * Copyright (C) International Business Machines Corp., 2000-2004 + * Copyright (C) International Business Machines Corp., 2000-2005 * Portions Copyright (C) Christoph Hellwig, 2001-2002 * * This program is free software; you can redistribute it and/or modify @@ -1567,7 +1567,7 @@ /* log after-image for logredo(): */ lrd->type = cpu_to_le16(LOG_REDOPAGE); - if (JFS_IP(tlck->ip)->next_index < MAX_INLINE_DIRTABLE_ENTRY) { + if (jfs_dirtable_inline(tlck->ip)) { /* * The table has been truncated, we've must have deleted * the last entry, so don't bother logging this @@ -2796,6 +2796,8 @@ if (!WorkDone) break; } + /* In case a wakeup came while all threads were active */ + jfs_commit_thread_waking = 0; if (current->flags & PF_FREEZE) { LAZY_UNLOCK(flags); diff -Nru a/fs/jfs/namei.c b/fs/jfs/namei.c --- a/fs/jfs/namei.c 2005-03-24 18:10:38 -08:00 +++ b/fs/jfs/namei.c 2005-03-24 18:10:38 -08:00 @@ -262,8 +262,6 @@ ip->i_nlink = 2; /* for '.' */ ip->i_op = &jfs_dir_inode_operations; ip->i_fop = &jfs_dir_operations; - ip->i_mapping->a_ops = &jfs_aops; - mapping_set_gfp_mask(ip->i_mapping, GFP_NOFS); insert_inode_hash(ip); mark_inode_dirty(ip);