The patch titled jbd-split-checkpoint-lists-tidy has been added to the -mm tree. Its filename is jbd-split-checkpoint-lists-tidy.patch See http://www.zip.com.au/~akpm/linux/patches/stuff/added-to-mm.txt to find out what to do about this From: Andrew Morton <akpm@xxxxxxxx> Cc: Jan Kara <jack@xxxxxxx> Cc: Mark Fasheh <mark.fasheh@xxxxxxxxxx> Cc: "Stephen C. Tweedie" <sct@xxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxx> --- fs/jbd/checkpoint.c | 67 ++++++++++++++++++++---------------------- 1 files changed, 32 insertions(+), 35 deletions(-) diff -puN fs/jbd/checkpoint.c~jbd-split-checkpoint-lists-tidy fs/jbd/checkpoint.c --- 25/fs/jbd/checkpoint.c~jbd-split-checkpoint-lists-tidy Tue May 9 10:34:34 2006 +++ 25-akpm/fs/jbd/checkpoint.c Tue May 9 10:34:34 2006 @@ -28,12 +28,9 @@ * * Called with j_list_lock held. */ - static inline void __buffer_unlink_first(struct journal_head *jh) { - transaction_t *transaction; - - transaction = jh->b_cp_transaction; + transaction_t *transaction = jh->b_cp_transaction; jh->b_cpnext->b_cpprev = jh->b_cpprev; jh->b_cpprev->b_cpnext = jh->b_cpnext; @@ -49,12 +46,9 @@ static inline void __buffer_unlink_first * * Called with j_list_lock held. */ - static inline void __buffer_unlink(struct journal_head *jh) { - transaction_t *transaction; - - transaction = jh->b_cp_transaction; + transaction_t *transaction = jh->b_cp_transaction; __buffer_unlink_first(jh); if (transaction->t_checkpoint_io_list == jh) { @@ -69,12 +63,10 @@ static inline void __buffer_unlink(struc * * Called with j_list_lock held */ - static inline void __buffer_relink_io(struct journal_head *jh) { - transaction_t *transaction; + transaction_t *transaction = jh->b_cp_transaction; - transaction = jh->b_cp_transaction; __buffer_unlink_first(jh); if (!transaction->t_checkpoint_io_list) { @@ -169,7 +161,6 @@ static void jbd_sync_bh(journal_t *journ * * Called with j_list_lock held. */ - static void __wait_cp_io(journal_t *journal, transaction_t *transaction) { struct journal_head *jh; @@ -179,9 +170,9 @@ static void __wait_cp_io(journal_t *jour this_tid = transaction->t_tid; restart: - /* Didn't somebody clean up the transaction in the meanwhile */ + /* Did somebody clean up the transaction in the meanwhile? */ if (journal->j_checkpoint_transactions != transaction || - transaction->t_tid != this_tid) + transaction->t_tid != this_tid) return; while (!released && transaction->t_checkpoint_io_list) { jh = transaction->t_checkpoint_io_list; @@ -202,8 +193,10 @@ restart: spin_lock(&journal->j_list_lock); goto restart; } - /* Now in whatever state the buffer currently is, we know that - * it has been written out and so we can drop it from the list */ + /* + * Now in whatever state the buffer currently is, we know that + * it has been written out and so we can drop it from the list + */ released = __journal_remove_checkpoint(jh); jbd_unlock_bh_state(bh); journal_remove_journal_head(bh); @@ -252,8 +245,7 @@ static int __process_buffer(journal_t *j BUFFER_TRACE(bh, "brelse"); __brelse(bh); ret = 1; - } - else if (jh->b_transaction != NULL) { + } else if (jh->b_transaction != NULL) { transaction_t *t = jh->b_transaction; tid_t tid = t->t_tid; @@ -262,8 +254,7 @@ static int __process_buffer(journal_t *j log_start_commit(journal, tid); log_wait_commit(journal, tid); ret = 1; - } - else if (!buffer_dirty(bh)) { + } else if (!buffer_dirty(bh)) { J_ASSERT_JH(jh, !buffer_jbddirty(bh)); BUFFER_TRACE(bh, "remove from checkpoint"); __journal_remove_checkpoint(jh); @@ -272,8 +263,7 @@ static int __process_buffer(journal_t *j journal_remove_journal_head(bh); __brelse(bh); ret = 1; - } - else { + } else { /* * Important: we are about to write the buffer, and * possibly block, while still holding the journal lock. @@ -338,8 +328,8 @@ restart: * done (maybe it's a new transaction, but it fell at the same * address). */ - if (journal->j_checkpoint_transactions == transaction - && transaction->t_tid == this_tid) { + if (journal->j_checkpoint_transactions == transaction && + transaction->t_tid == this_tid) { int batch_count = 0; struct buffer_head *bhs[NR_BATCH]; struct journal_head *jh; @@ -355,10 +345,8 @@ restart: retry = 1; break; } - retry = __process_buffer(journal, jh, bhs, - &batch_count); - if (!retry && - lock_need_resched(&journal->j_list_lock)) { + retry = __process_buffer(journal, jh, bhs,&batch_count); + if (!retry && lock_need_resched(&journal->j_list_lock)){ spin_unlock(&journal->j_list_lock); retry = 1; break; @@ -377,8 +365,10 @@ restart: spin_lock(&journal->j_list_lock); goto restart; } - /* Now we have cleaned up the first transaction's checkpoint - * list. Let's clean up the second one. */ + /* + * Now we have cleaned up the first transaction's checkpoint + * list. Let's clean up the second one + */ __wait_cp_io(journal, transaction); } out: @@ -530,7 +520,8 @@ static int journal_clean_one_cp_list(str int __journal_clean_checkpoint_list(journal_t *journal) { transaction_t *transaction, *last_transaction, *next_transaction; - int ret = 0, released; + int ret = 0; + int released; transaction = journal->j_checkpoint_transactions; if (!transaction) @@ -543,14 +534,20 @@ int __journal_clean_checkpoint_list(jour next_transaction = transaction->t_cpnext; ret += journal_clean_one_cp_list(transaction-> t_checkpoint_list, &released); + /* + * This function only frees up some memory if possible so we + * dont have an obligation to finish processing. Bail out if + * preemption requested: + */ if (need_resched()) goto out; if (released) continue; - /* It is essential that we are as careful as in the case of - t_checkpoint_list with removing the buffer from the list - as we can possibly see not yet submitted buffers on - io_list */ + /* + * It is essential that we are as careful as in the case of + * t_checkpoint_list with removing the buffer from the list as + * we can possibly see not yet submitted buffers on io_list + */ ret += journal_clean_one_cp_list(transaction-> t_checkpoint_io_list, &released); if (need_resched()) _ Patches currently in -mm which might be from akpm@xxxxxxxx are origin.patch autofs4-nfy_none-wait-race-fix-tidy.patch git-acpi.patch acpi-update-asus_acpi-driver-registration-fix.patch acpi-memory-hotplug-cannot-manage-_crs-with-plural-resoureces.patch catch-notification-of-memory-add-event-of-acpi-via-container-driver-register-start-func-for-memory-device.patch catch-notification-of-memory-add-event-of-acpi-via-container-driveravoid-redundant-call-add_memory.patch remove-for_each_cpu.patch sony_apci-resume.patch powernow-k8-crash-workaround.patch git-dvb.patch git-gfs2.patch via-pmu-add-input-device-tidy.patch git-libata-all.patch git-mtd.patch git-netdev-all.patch smc911x-Kconfig-fix.patch pci-error-recovery-e1000-network-device-driver.patch git-powerpc.patch git-rbtree.patch git-sas.patch git-serial.patch gregkh-pci-pci-64-bit-resources-drivers-others-changes-amba-fix.patch git-scsi-misc.patch git-scsi-rc-fixes.patch areca-raid-linux-scsi-driver-update6-for-2617-rc1-mm3-externs-go-in-headers.patch git-watchdog.patch xfs-sparc32-build-fix.patch pg_uncached-is-ia64-only.patch pgdat-allocation-for-new-node-add-specify-node-id-powerpc-fix.patch pgdat-allocation-for-new-node-add-specify-node-id-tidy.patch pgdat-allocation-for-new-node-add-specify-node-id-fix-3.patch pgdat-allocation-for-new-node-add-get-node-id-by-acpi-tidy.patch pgdat-allocation-for-new-node-add-generic-alloc-node_data-tidy.patch pgdat-allocation-for-new-node-add-refresh-node_data-fix.patch pgdat-allocation-for-new-node-add-export-kswapd-start-func-tidy.patch catch-valid-mem-range-at-onlining-memory-tidy.patch catch-valid-mem-range-at-onlining-memory-fix.patch mm-introduce-remap_vmalloc_range-fix.patch acx1xx-wireless-driver.patch dont-use-flush_tlb_all-in-suspend-time-tidy.patch prune_one_dentry-tweaks.patch mmput-might-sleep.patch jbd-avoid-kfree-null.patch ext3_clear_inode-avoid-kfree-null.patch leds-amstrad-delta-led-support-tidy.patch percpu-counter-data-type-changes-to-suppport-fix.patch connector-exports.patch config_net=n-build-fix.patch jbd-split-checkpoint-lists-tidy.patch hangcheck-remove-monotomic_clock-on-x86.patch pi-futex-futex-code-cleanups-fix.patch reiser4.patch savagefb-add-state-save-and_restore-hooks-tidy.patch kgdb-core-lite-add-reboot-command.patch kgdb-8250-fix.patch nr_blockdev_pages-in_interrupt-warning.patch device-suspend-debug.patch revert-tty-buffering-comment-out-debug-code.patch slab-leaks3-default-y.patch x86-kmap_atomic-debugging.patch profile-likely-unlikely-macros-tidy.patch profile-likely-unlikely-macros-fix.patch profile-likely-unlikely-macros-fix-2.patch exit-dont-call-sleeping-things-when-oopsing.patch - To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html