The patch titled writeback: fix time ordering of the per superblock dirty inode lists 4 has been removed from the -mm tree. Its filename was writeback-fix-time-ordering-of-the-per-superblock-dirty-inode-lists-4.patch This patch was dropped because it was merged into mainline or a subsystem tree ------------------------------------------------------ Subject: writeback: fix time ordering of the per superblock dirty inode lists 4 From: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> When the kupdate function has tried to write back an expired inode it will then check to see whether some of the inode's pages are still dirty. This can happen when the filesystem decided to not write a page for some reason. But it does _not_ occur due to redirtyings: a redirtying will set I_DIRTY_PAGES. What we need to do here is to set I_DIRTY_PAGES to reflect reality and to then put the inode onto the _head_ of s_dirty for consideration on the next kupdate pass, in five seconds time. Problem is, the code failed to modify the inode's timestamp when pushing the inode onto thehead of s_dirty. The patch: If there are no other inodes on s_dirty then we leave the inode's timestamp alone: it is already expired. If there _are_ other inodes on s_dirty then we arrange for this inode to get the same timestamp as the inode which is at the head of s_dirty, thus preserving the s_dirty ordering. But we only need to do this if this inode purports to have been dirtied before the one at head-of-list. Cc: Mike Waychison <mikew@xxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- fs/fs-writeback.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff -puN fs/fs-writeback.c~writeback-fix-time-ordering-of-the-per-superblock-dirty-inode-lists-4 fs/fs-writeback.c --- a/fs/fs-writeback.c~writeback-fix-time-ordering-of-the-per-superblock-dirty-inode-lists-4 +++ a/fs/fs-writeback.c @@ -165,6 +165,28 @@ static void redirty_tail(struct inode *i } /* + * Redirty an inode, but mark it as the very next-to-be-written inode on its + * superblock's dirty-inode list. + * We need to preserve s_dirty's reverse-time-orderedness, so we cheat by + * setting this inode's dirtied_when to the same value as that of the inode + * which is presently head-of-list, if present head-of-list is newer than this + * inode. (head-of-list is the least-recently-dirtied inode: the oldest one). + */ +static void redirty_head(struct inode *inode) +{ + struct super_block *sb = inode->i_sb; + + if (!list_empty(&sb->s_dirty)) { + struct inode *head_inode; + + head_inode = list_entry(sb->s_dirty.prev, struct inode, i_list); + if (time_after(inode->dirtied_when, head_inode->dirtied_when)) + inode->dirtied_when = head_inode->dirtied_when; + } + list_move_tail(&inode->i_list, &sb->s_dirty); +} + +/* * Write a single inode's dirty pages and inode data out to disk. * If `wait' is set, wait on the writeout. * @@ -225,7 +247,7 @@ __sync_single_inode(struct inode *inode, * uncongested. */ inode->i_state |= I_DIRTY_PAGES; - list_move_tail(&inode->i_list, &sb->s_dirty); + redirty_head(inode); } else { /* * Otherwise fully redirty the inode so that _ Patches currently in -mm which might be from akpm@xxxxxxxxxxxxxxxxxxxx are origin.patch git-acpi.patch git-acpi-fixup.patch acpi-add-reboot-mechanism.patch working-3d-dri-intel-agpko-resume-for-i815-chip.patch git-cifs.patch console-keyboard-events-and-accessibility.patch first-stab-at-elantech-touchpad-driver-for-26226-testers.patch git-kvm.patch git-libata-all.patch drivers-ata-libata-ehc-fix-printk-warning.patch ide-arm-hack.patch ucc_geth-fix-build-break-introduced-by-commit-09f75cd7bf13720738e6a196cc0107ce9a5bd5a0-checkpatch-fixes.patch update-smc91x-driver-with-arm-versatile-board-info.patch git-nfsd-fixup.patch fix-build-breakage-if-sysfs-fix.patch qla2xxx-printk-fixes.patch advansys-depends-on-virt_to_bus.patch sparc-support-for-new-termios.patch git-unionfs.patch security-convert-lsm-into-a-static-interface-fix-unionfs.patch slab-api-remove-useless-ctor-parameter-and-reorder-parameters-vs-unionfs.patch git-nfs-vs-git-unionfs.patch git-watchdog-fixup.patch git-wireless.patch git-wireless-fixup.patch git-x86.patch revert-x86_64-mm-cpa-einval.patch fix-x86_64-mm-sched-clock-share.patch x86_64-check-and-enable-mmconfig-for-amd-family-10h-opteron.patch memory-hotplug-make-kmem_cache_node-for-slub-on-memory-online-avoid-panic-checkpatch-fixes.patch memory-hotplug-make-kmem_cache_node-for-slub-on-memory-online-avoid-panic-fix.patch vmscan-give-referenced-active-and-unmapped-pages-a-second-trip-around-the-lru.patch vm-dont-run-touch_buffer-during-buffercache-lookups.patch capabilities-clean-up-file-capability-reading-checkpatch-fixes.patch pm-rework-struct-platform_suspend_ops-fixup-checkpatch-fixes.patch serial-turn-serial-console-suspend-a-boot-rather-than-compile-time-option-update.patch revert-x86-save-registers-in-saved_context-during-suspend-and-hibernation.patch pm-qos-infrastructure-and-interface-fix.patch pm-qos-infrastructure-and-interface-vs-git-acpi.patch pm-qos-infrastructure-and-interface-vs-git-acpi-2.patch pm-qos-infrastructure-and-interface-static-initialization-with-blocking-notifiers-checkpatch-fixes.patch deprecate-smbfs-in-favour-of-cifs.patch add-kernel-notifierc-fix.patch add-kernel-notifierc-fix-2-fix-3.patch console-events-and-accessibility-fix.patch procfs-detect-duplicate-names-fix.patch procfs-detect-duplicate-names-fix-fix-2.patch stop-using-dma_xxbit_mask.patch stop-using-dma_xxbit_mask-fix.patch kernel-printkc-concerns-about-the-console-handover.patch ext2-avoid-rec_len-overflow-with-64kb-block-size-checkpatch-fixes.patch sync_sb_inodes-propagate-errors.patch intel-iommu-pci-generic-helper-function.patch intel-iommu-iova-allocation-and-management-routines.patch intel-iommu-intel-iommu-driver.patch intel-iommu-iommu-floppy-workaround.patch jbd-config_jbd_debug-cannot-create-proc-entry-fix.patch peterz-vs-ext4-mballoc-core.patch 64-bit-i_version-afs-fixes.patch reiserfs-fix-up-lockdep-warnings-checkpatch-fixes.patch reiserfs-use-is_reusable-to-catch-corruption-checkpatch-fixes.patch reiserfs-fix-usage-of-signed-ints-for-block-numbers-checkpatch-fixes.patch reiserfs-remove-first_zero_hint-checkpatch-fixes.patch reiserfs-ignore-on-disk-s_bmap_nr-value-checkpatch-fixes.patch r-o-bind-mounts-elevate-write-count-during-entire-ncp_ioctl-fix.patch slab-api-remove-useless-ctor-parameter-and-reorder-parameters-vs-revoke.patch revoke-wire-up-i386-system-calls.patch revoke-vs-git-block.patch task-containersv11-basic-task-container-framework-fix.patch task-containersv11-shared-container-subsystem-group-arrays-simplify-proc-cgroups-fix.patch task-containersv11-shared-container-subsystem-group-arrays-include-fix.patch add-containerstats-v3-fix.patch pid-namespaces-dynamic-kmem-cache-allocator-for-pid-namespaces-fix.patch pid-namespaces-define-is_global_init-and-is_container_init-fix.patch pid-namespaces-define-is_global_init-and-is_container_init-versus-x86_64-mm-i386-show-unhandled-signals-v3.patch lockdep-fix-mismatched-lockdep_depth-curr_chain_hash-checkpatch-fixes.patch fs-superc-use-list_for_each_entry-instead-of-list_for_each-fix.patch pid-namespaces-helpers-to-find-the-task-by-its-numerical-ids-fix.patch pid-namespaces-changes-to-show-virtual-ids-to-user-use-find_task_by_pid_ns-in-places-that-operate-with-virtual-fix.patch pid-namespaces-changes-to-show-virtual-ids-to-user-use-find_task_by_pid_ns-in-places-that-operate-with-virtual-fix-2.patch pid-namespaces-changes-to-show-virtual-ids-to-user-use-find_task_by_pid_ns-in-places-that-operate-with-virtual-fix-3.patch pid-namespaces-changes-to-show-virtual-ids-to-user-fix.patch cpuset-sched_load_balance-flag-fix.patch cpusets-decrustify-cpuset-mask-update-code-checkpatch-fixes.patch fix-cpusets-update_cpumask-checkpatch-fixes.patch memory-controller-memory-accounting-v7-fix.patch memory-controller-add-per-container-lru-and-reclaim-v7-fix.patch memory-controller-oom-handling-v7-vs-oom-killer-stuff.patch memory-controller-add-switch-to-control-what-type-of-pages-to-limit-v7-fix-2.patch memcontrol-move-oom-task-exclusion-to-tasklist-fix.patch remove-bits_to_type-macro-fix.patch use-helpers-to-obtain-task-pid-in-printks-drm-fix.patch hotplug-cpu-migrate-a-task-within-its-cpuset-fix.patch cpu-hotplug-avoid-hotadd-when-proper-possible_map-isnt-specified-checkpatch-fixes.patch powerpc-lock-bitops-fix.patch ipc-integrate-ipc_checkid-into-ipc_lock-fix.patch ipc-integrate-ipc_checkid-into-ipc_lock-fix-2.patch use-extended-crashkernel-command-line-on-i386.patch ftd_sio-clean-ups-and-updates-for-new-termios-work-checkpatch-fixes.patch hook-up-group-scheduler-with-control-groups-fix.patch linux-kernel-markers-checkpatch-fixes.patch linux-kernel-markers-samples-checkpatch-fixes.patch uninline-forkc-exitc-checkpatch-fixes.patch fuse-fix-race-between-getattr-and-write-checkpatch-fixes.patch fuse-add-file-handle-to-getattr-operation-checkpatch-fixes.patch sparse-pointer-use-of-zero-as-null-checkpatch-fixes.patch i-oat-tighten-descriptor-setup-performance-fix.patch i-oat-add-completion-callback-for-async_tx-interface-use-fix.patch i-oat-add-completion-callback-for-async_tx-interface-use-fix-fix.patch make-copy_from_user_inatomic-not-zero-the-tail-on-i386-vs-reiser4.patch reiser4.patch git-block-vs-reiser4.patch git-nfsd-broke-reiser4.patch slab-api-remove-useless-ctor-parameter-and-reorder-parameters-vs-reiser4.patch page-owner-tracking-leak-detector.patch nr_blockdev_pages-in_interrupt-warning.patch slab-leaks3-default-y.patch profile-likely-unlikely-macros-fix.patch put_bh-debug.patch kmap_atomic-debugging.patch shrink_slab-handle-bad-shrinkers.patch getblk-handle-2tb-devices.patch w1-build-fix.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