* mmotm 2009-07-16-14-32 uploaded @ 2009-07-16 21:34 akpm 2009-07-21 2:52 ` mmotm 2009-07-16-14-32 - sudden OOPS at boot in ACPI code Valdis.Kletnieks 2009-07-22 13:17 ` mmotm 2009-07-16-14-32 - lockdep whinge in ext3/quota code Valdis.Kletnieks 0 siblings, 2 replies; 8+ messages in thread From: akpm @ 2009-07-16 21:34 UTC (permalink / raw) To: mm-commits, linux-kernel The mm-of-the-moment snapshot 2009-07-16-14-32 has been uploaded to http://userweb.kernel.org/~akpm/mmotm/ and will soon be available at git://git.zen-sources.org/zen/mmotm.git It contains the following patches against 2.6.31-rc3: origin.patch markup_oops-fix-it-with-32-bit-userspace-on-a-64-bit-kernel.patch sys_pipe-fix-fd-leak-if-pipe-is-called-with-an-invalid-address.patch page-allocator-preserve-pfn-ordering-when-__gfp_cold-is-set.patch repeatable-slab-corruption-with-ltp-msgctl08.patch linux-next.patch next-remove-localversion.patch i-need-old-gcc.patch x86-fix-x86-fix-pageattr-handling-for-lpage-percpu-allocator-and-re-enable-it.patch acpi-battery-work-around-negative-s16-battery-current-on-acer.patch kernel-core-add-smp_call_function_any.patch kernel-core-add-smp_call_function_any-update.patch arch-x86-kernel-cpu-cpufreq-acpi-cpufreqc-avoid-cross-cpu-interrupts-by-using-smp_call_function_any.patch toshiba_acpi-return-on-a-fail-path.patch acerhdf-fix-fan-control-for-aoa150-model.patch acpi-dont-free-non-existent-backlight-in-acpi-video-module.patch drivers-acpi-videoc-remove-unneeded-memsets.patch acpi-reintroduce-acpi_device_ops-shutdown-method.patch arch-x86-kernel-tscc-smi-workaround-for-pit_expect_msb.patch arch-x86-kernel-tscc-smi-workaround-for-pit_expect_msb-checkpatch-fixes.patch s3c-fix-check-of-index-into-s3c_gpios.patch pcmcia-yenta-add-missing-__devexit-marking.patch pcmcia-pccard-deadlock-fix.patch powerpc-sky-cpu-redundant-or-incorrect-tests-on-unsigned.patch platform_device_add_data-use-kmemdup.patch video-initial-support-for-adv7180.patch ecryptfs-fix-lockdep-reported-ab-ba-mutex-issue.patch ecryptfs-another-lockdep-issue.patch ecryptfs-yet-another-lockdep-issue.patch posix_cpu_timers_exit_group-do-not-use-thread_group_cputimer.patch timer-stats-fix-del_timer_sync-and-try_to_del_timer_sync.patch input-drivers-input-xpadc-improve-xbox-360-wireless-support-and-add-sysfs-interface.patch input-documentation-input-xpadtxt-update-for-new-driver-functionality.patch input-more-i8042-reset-quirks-for-msi-wind-clone-netbooks.patch input-tsc2007-remove-hr-timer.patch input-tsc2007-make-platform-callbacks-optional.patch gitignore-usr-initramfs_datacpiobz2-and-usr-initramfs_datacpiolzma.patch kernel-hacking-move-strip_asm_syms-from-general.patch leds-gpio-leds-fix-typographics-fault.patch leds-gpio-leds-fix-typographics-fault-checkpatch-fixes.patch mmc-in-mmc_power_up-use-previously-selected-ocr-if-available.patch omap-hsmmc-do-not-enable-buffer-ready-interrupt-if-using-dma.patch mmc-msm_sdccc-driver-for-htc-dream.patch msm_sdccc-convert-printkkern_level-to-pr_level.patch msm_sdccc-stylistic-cleaning.patch msm_sdccc-move-overly-indented-code-to-separate-function.patch jffs2-move-jffs2_gcd_mtd-threads-to-the-new-kthread-api.patch mtd-sst25l-non-jedec-spi-flash-driver.patch mtd-sst25l-non-jedec-spi-flash-driver-update.patch mtd-sst25l-non-jedec-spi-flash-driver-fix.patch drivers-mtd-mtdcorec-make-symbols-static.patch mtd-sst25l-fix-lock-imbalance.patch isdn-hisax-fix-lock-imbalance.patch 3x59x-fix-pci-resource-management.patch 3x59x-fix-pci-resource-management-checkpatch-fixes.patch ext4-remove-redundant-test-on-unsigned.patch sunrpc-use-formatting-of-module-name-in-sunrpc.patch serial_txx9-use-container_of-instead-of-direct-cast.patch icom-converting-space-to-tabs.patch serial-add-parameter-to-force-skipping-the-test-for-the-txen-bug.patch hypfs-remove-useless-variable-qname.patch scsi-use-the-common-hex_asc-array-rather-than-a-private-one.patch scsi-gdthc-use-unaligned-access-helpers.patch scsi-annotate-gdth_rdcap_data-gdth_rdcap16_data-endianness.patch scsi-add-__init-__exit-macros-to-ibmvstgtc.patch scsi-make-scsi-sg-v4-driver-enabled-by-default-and-remove-experimental-dependency-since-udev-depends-on-bsg.patch scsi-make-scsi-sg-v4-driver-enabled-by-default-and-remove-experimental-dependency-since-udev-depends-on-bsg-checkpatch-fixes.patch vt6655-s-void-void.patch staging-rt2860-remove-dependency-on-wireless_ext-version.patch drivers-usb-gadget-s3c2410_udcc-fix.patch drivers-usb-gadget-s3c-hsotgc-missing-parentheses.patch vfs-fix-vfs_rename_dir-for-fs_rename_does_d_move-filesystems.patch raw-fix-rawctl-compat-ioctls-breakage-on-amd64-and-itanic.patch vfs-improve-comment-describing-fget_light.patch libfs-make-simple_read_from_buffer-conventional.patch fs-inodec-add-dev-id-and-inode-number-for-debugging-in-init_special_inode.patch vfs-split-generic_forget_inode-so-that-hugetlbfs-does-not-have-to-copy-it.patch seq_file-return-a-negative-error-code-when-seq_path_root-fails.patch fs-fix-overflow-in-sys_mount-for-in-kernel-calls.patch fs-fix-overflow-in-sys_mount-for-in-kernel-calls-fix.patch sendfile-several-fixes.patch xtensa-variant-specific-code.patch mm.patch jbd-fix-race-bwtween-write_metadata_buffer-and-get_write_access.patch dynamic-debug-fix-typo.patch mm-copy-over-oom_adj-value-at-fork-time.patch kexec-fix-omitting-offset-in-extended-crashkernel-syntax.patch edac-x83-fix-mchbar-high-register-addr.patch cgroups-fix-pid-namespace-bug.patch cgroups-fix-pid-namespace-bug-fix.patch flat-fix-uninitialized-ptr-with-shared-libs.patch revert-mm-prevent-balance_dirty_pages-from-doing-too-much-work.patch genirq-do-not-disable-irq_wakeup-marked-irqs-on-suspend.patch cciss-remove-logical-drive-sysfs-entries-during-driver-cleanup.patch cciss-use-only-one-scan-thread.patch cciss-kick-off-logical-drive-topology-rescan-through-sysfs.patch drivers-gpu-drm-ttm-ttm_bo_vmc-fix-misplaced-parentheses.patch maintainers-update-atlx-contact-info.patch arch-x86-oprofile-op_model_amdc-fix-op_amd_handle_ibs-return-type.patch drivers-rtc-rtc-cmosc-cmos_init-dont-ignore-pnp_register_driver-return-value.patch qla2xxx-fix-__little_endian-definition-warnings.patch serial-bfin_5xx-fix-building-as-module-when-early-printk-is-enabled.patch clocksource-save-mult_orig-in-clocksource_disable.patch include-linux-clocksourceh-coding-style-tweaks.patch 9p-fix-incorrect-parameters-to-v9fs_file_readn.patch mm-make-swap-token-dummies-static-inlines.patch mm-make-swap-token-dummies-static-inlines-fix.patch mm-make-swap-token-dummies-static-inlines-fix-2.patch mm-remove-obsoleted-alloc_pages-cpuset-comment.patch readahead-add-blk_run_backing_dev.patch readahead-add-blk_run_backing_dev-fix.patch readahead-add-blk_run_backing_dev-fix-fix-2.patch memory-hotplug-update-zone-pcp-at-memory-online.patch memory-hotplug-update-zone-pcp-at-memory-online-fix.patch memory-hotplug-exclude-isolated-page-from-pco-page-alloc.patch memory-hotplug-make-pages-from-movable-zone-always-isolatable.patch memory-hotplug-alloc-page-from-other-node-in-memory-online.patch memory-hotplug-migrate-swap-cache-page.patch page_alloc-fix-kernel-doc-warning.patch hugetlb-balance-freeing-of-huge-pages-across-nodes.patch hugetlb-use-free_pool_huge_page-to-return-unused-surplus-pages.patch hugetlb-use-free_pool_huge_page-to-return-unused-surplus-pages-fix.patch hugetlb-clean-up-and-update-huge-pages-documentation.patch mm-clean-up-page_remove_rmap.patch mm-show_free_areas-display-slab-pages-in-two-separate-fields.patch documentation-memorytxt-remove-some-very-outdated-recommendations.patch mm-oom-analysis-add-per-zone-statistics-to-show_free_areas.patch mm-oom-analysis-add-buffer-cache-information-to-show_free_areas.patch mm-oom-analysis-show-kernel-stack-usage-in-proc-meminfo-and-oom-log-output.patch mm-oom-analysis-add-shmem-vmstat.patch page-allocator-allow-too-high-order-warning-messages-to-be-suppressed-with-__gfp_nowarn.patch profile-suppress-warning-about-large-allocations-when-profile=1-is-specified.patch net-dccp-suppress-warning-about-large-allocations-from-dccp.patch mm-update-alloc_flags-after-oom-killer-has-been-called.patch mm-rename-pgmoved-variable-in-shrink_active_list.patch mm-shrink_inactive_list-nr_scan-accounting-fix-fix.patch mm-vmstat-add-isolate-pages.patch mm-vmstat-add-isolate-pages-fix.patch vmscan-throttle-direct-reclaim-when-too-many-pages-are-isolated-already.patch mm-remove-__addsub_zone_page_state.patch frv-duplicate-output_buffer-of-e03.patch frv-duplicate-output_buffer-of-e03-checkpatch-fixes.patch m32r-remove-redundant-tests-on-unsigned.patch m68k-count-can-reach-51-not-50.patch m68k-cnt-reaches-1-not-0.patch arch-m68k-include-asm-motorola_pgalloch-fix-kunmap-arg.patch rework-fix-is_single_threaded.patch printk-boot_delay-rename-printk_delay_msec-to-loops_per_msec.patch printk-boot_delay-rename-printk_delay_msec-to-loops_per_msec-fix.patch printk-boot_delay-rename-printk_delay_msec-to-loops_per_msec-fix-2.patch printk-add-printk_delay-to-make-messages-readable-for-some-scenarios.patch printk-add-printk_delay-to-make-messages-readable-for-some-scenarios-fix.patch printk-add-printk_delay-to-make-messages-readable-for-some-scenarios-cleanup.patch move-magic-numbers-into-magich.patch move-magic-numbers-into-magich-update.patch kmod-fix-race-in-usermodehelper-code.patch add-a-driver-for-the-winbond-wpcd376i-ir-functionality.patch add-a-driver-for-the-winbond-wpcd376i-ir-functionality-update.patch maintainers-ia64-pair-p-m-entries-properly.patch maintainers-remove-ivtv-user-lists-add-cx18-url.patch maintainers-qlge-10gb-ethernet-pair-p-m-entries-properly.patch maintainers-use-tabs-in-acer-aspire-one.patch maintainers-remove-l-linux-kernel-vgerkernelorg.patch maintainers-move-arpd-to-credits.patch maintainers-update-kernel-janitors.patch maintainers-add-pps-patterns.patch maintainers-usb-serial-digi-acceleport-use-separate-p-for-al-borchers.patch maintainers-input-add-dmitrys-name-to-his-email-address.patch maintainers-remove-cs461x-sound-card-section.patch maintainers-qlogic-qla2xxx-add-andrew-vasquez-email-address.patch maintainers-qlogic-qla3xxx-add-ron-mercer-email-address.patch maintainers-scott-murray-is-no-longer-with-somanetworks.patch scripts-get_maintainerpl-add-f-directory-use.patch get_maintainerpl-add-git-min-percent-option.patch get_maintainerpl-add-git-min-percent-option-fix.patch maintainers-coalesce-name-and-email-address-lines.patch maintainers-finish-off-the-email-address-coalescing.patch updated-f-and-t-in-maintainers-kristoffer-ericson.patch getrusage-fill-ru_maxrss-value.patch getrusage-fill-ru_maxrss-value-update.patch asm-sections-add-text-data-checking-functions-for-arches-to-override.patch kallsyms-use-new-arch_is_kernel_text.patch lockdep-use-new-arch_is_kernel_data.patch blackfin-override-text-data-checking-functions.patch drivers-hwmon-coretempc-enable-the-intel-atom.patch lis3-fix-typo.patch lis3-add-free-fall-wakeup-function-via-platform_data.patch lis3-add-power-management-functions.patch lis3-add-power-management-functions-fix.patch lis3_spi-code-cleanups.patch kcore-fix-proc-kcores-statst_size.patch proc-connector-add-event-for-process-becoming-session-leader.patch proc-connector-add-event-for-process-becoming-session-leader-checkpatch-fixes.patch procfs-provide-stack-information-for-threads-v08.patch procfs-provide-stack-information-for-threads-v011.patch spi-remove-imx-spi-driver.patch spi-add-spi-driver-for-most-known-imx-socs.patch rtc-add-driver-for-mxcs-internal-rtc-module.patch rtc-add-driver-for-mxcs-internal-rtc-module-fix.patch rtc-add-driver-for-mxcs-internal-rtc-module-fix-fix.patch rtc-u300-coh-901-331-rtc-driver-v3.patch rtc-update-documentation-wrt-rtc_pie-irq_set_state.patch rtc-bfin-do-not-share-rtc-irq.patch rtc-add-freescale-stmp37xx-378x-driver.patch rtc-philips-nxp-pcf2123-driver.patch rtc-philips-nxp-pcf2123-driver-v03.patch rtc-philips-nxp-pcf2123-driver-v03-fix.patch rtc-philips-nxp-pcf2123-driver-v03-update.patch rtc-reorder-makefile.patch rtc-driver-for-pcap2-pmic.patch rtc-driver-for-pcap2-pmic-update.patch gpiolib-allow-exported-gpio-nodes-to-be-named-using-sysfs-links.patch gpiolib-allow-exported-gpio-nodes-to-be-named-using-sysfs-links-update.patch gpio-add-mc33880-driver.patch mfd-gpio-add-a-gpio-interface-to-the-ucb1400-mfd-chip-driver-via-gpiolib.patch omapfb-add-support-for-the-apollon-lcd.patch omapfb-add-support-for-mipi-dcs-compatible-lcds.patch omapfb-add-support-for-the-amstrad-delta-lcd.patch omapfb-add-support-for-the-2430sdp-lcd.patch omapfb-add-support-for-the-omap2evm-lcd.patch omapfb-add-support-for-the-3430sdp-lcd.patch omapfb-add-support-for-the-omap3-evm-lcd.patch omapfb-add-support-for-the-omap3-beagle-dvi-output.patch omapfb-add-support-for-the-gumstix-overo-lcd.patch omapfb-add-support-for-the-zoom-mdk-lcd.patch omapfb-add-support-for-rotation-on-the-blizzard-lcd-ctrl.patch n770-enable-lcd-mipi-dcs-in-kconfig.patch omapfb-dispc-various-typo-fixes.patch omapfb-dispc-disable-iface-clocks-along-with-func-clocks.patch omapfb-dispc-enable-wake-up-capability.patch omapfb-dispc-allow-multiple-external-irq-handlers.patch omapfb-suspend-resume-only-if-fb-device-is-already-initialized.patch omapfb-fix-coding-style-remove-dead-line.patch omapfb-add-fb-manual-update-option-to-kconfig.patch omapfb-hwa742-fix-pointer-to-be-const.patch atyfb-coding-style-cleanup.patch framebuffer-support-for-htc-dream.patch framebuffer-support-for-htc-dream-checkpatch-fixes.patch platinumfb-misplaced-parenthesis.patch davinci-fb-frame-buffer-driver-for-ti-da8xx-omap-l1xx.patch davinci-fb-frame-buffer-driver-for-ti-da8xx-omap-l1xx-fix.patch intelfb-fix-setting-of-active-pipe-with-lvds-displays.patch hfsplus-identify-journal-info-block-in-volume-header.patch hfsplus-fix-journal-detection.patch memcg-remove-the-overhead-associated-with-the-root-cgroup.patch memcg-remove-the-overhead-associated-with-the-root-cgroup-fix.patch memcg-remove-the-overhead-associated-with-the-root-cgroup-fix-2.patch memcg-add-comments-explaining-memory-barriers.patch memcg-add-comments-explaining-memory-barriers-checkpatch-fixes.patch ptrace-__ptrace_detach-do-__wake_up_parent-if-we-reap-the-tracee.patch do_wait-wakeup-optimization-shift-security_task_wait-from-eligible_child-to-wait_consider_task.patch do_wait-wakeup-optimization-change-__wake_up_parent-to-use-filtered-wakeup.patch do_wait-wakeup-optimization-child_wait_callback-check-__wnothread-case.patch do_wait-optimization-do-not-place-sub-threads-on-task_struct-children-list.patch wait_consider_task-kill-parent-argument.patch signals-tracehook_notify_jctl-change.patch utrace-core.patch elf-clean-up-fill_note_info.patch elf-clean-up-fill_note_info-fix.patch flat-use-is_err_value-helper-macro.patch n_hdlc-add-buffer-flushing-checkpatch-fixes.patch edac-mpc85xx-add-p2020ds-support.patch edac-mpc85xx-add-mpc83xx-support.patch edac-fix-resource-size-calculation.patch asm-generic-remove-calling-flush_write_buffers-in-dma_sync__for_cpu.patch adfs-remove-redundant-test-on-unsigned.patch aio-ifdef-fields-in-mm_struct.patch bzip2-lzma-gzip-fix-comments-describing-decompressor-api.patch bzip2-lzma-remove-nasty-uncompressed-size-hack-in-pre-boot-environment.patch lzma-gzip-fix-potential-oops-when-input-data-is-truncated.patch kernel-time-add-function-to-convert-between-calendar-time-and-broken-down-time-for-universal-use.patch fatfs-use-common-localtime-gmtime-in-fat_time_unix2fat.patch sound-core-pcm_timerc-use-lib-gcdc.patch net-netfilter-ipvs-ip_vs_wrrc-use-lib-gcdc.patch net-netfilter-ipvs-ip_vs_wrrc-use-lib-gcdc-fix.patch vfs-take-2add-set_page_dirty_notag.patch reiser4-vfs-add-super_operationssync_inodes-2.patch reiser4-export-remove_from_page_cache.patch reiser4-export-remove_from_page_cache-fix.patch reiser4-export-find_get_pages.patch reiser4.patch reiser4-adjust-to-the-new-aops.patch reiser4-adjust-to-the-new-aops-fixup.patch reiser4-remove-simple_prepare_write-usage.patch reiser4-remove-simple_prepare_write-usage-checkpatch-fixes.patch fs-symlink-write_begin-allocation-context-fix-reiser4-fix.patch reiser4-handling-error-returned-by-d_obtain_alias-fixup.patch reiser4-update-names-of-quota-methods.patch reiser4-use-set_page_dirty_notag.patch fs-reiser4-contextc-current_is_pdflush-got-removed.patch make-sure-nobodys-leaking-resources.patch journal_add_journal_head-debug.patch releasing-resources-with-children.patch make-frame_pointer-default=y.patch mutex-subsystem-synchro-test-module.patch slab-leaks3-default-y.patch put_bh-debug.patch add-debugging-aid-for-memory-initialisation-problems.patch keep-track-of-network-interface-renaming.patch workaround-for-a-pci-restoring-bug.patch prio_tree-debugging-patch.patch single_open-seq_release-leak-diagnostics.patch add-a-refcount-check-in-dput.patch getblk-handle-2tb-devices.patch getblk-handle-2tb-devices-fix.patch undeprecate-pci_find_device.patch notify_change-callers-must-hold-i_mutex.patch ^ permalink raw reply [flat|nested] 8+ messages in thread
* mmotm 2009-07-16-14-32 - sudden OOPS at boot in ACPI code 2009-07-16 21:34 mmotm 2009-07-16-14-32 uploaded akpm @ 2009-07-21 2:52 ` Valdis.Kletnieks [not found] ` <d3f22a0907202021o525c98ebg4ef3f0d5d1c3016@mail.gmail.com> 2009-07-21 3:33 ` Hugh Dickins 2009-07-22 13:17 ` mmotm 2009-07-16-14-32 - lockdep whinge in ext3/quota code Valdis.Kletnieks 1 sibling, 2 replies; 8+ messages in thread From: Valdis.Kletnieks @ 2009-07-21 2:52 UTC (permalink / raw) To: Andrew Morton, Bob Moore, Len Brown; +Cc: linux-kernel, linux-acpi [-- Attachment #1: Type: text/plain, Size: 2523 bytes --] On Thu, 16 Jul 2009 14:34:02 PDT, akpm@linux-foundation.org said: > The mm-of-the-moment snapshot 2009-07-16-14-32 has been uploaded to Dies a horrid death during early boot. Dell Latitude D820, and this graphics: 01:00.0 VGA compatible controller: nVidia Corporation G72M [Quadro NVS 110M/GeForce Go 7300] (rev a1) Traceback (hand-copied from a very crappy cell-phone picture) strcmp+0x4/0x1f acpi_device+probe+0xac/0x13e driver_probe_device+0xc9/0x14e __driver_attach+0x58/0x7c ? __driver_attach+0x58/0x7c ? __driver_attach+0x58/0x7c bus_for_each_dev+0x54/0x89 driver_attach+0x19/0x1b bus_add_driver+0xv4/0x1fe driver_register+0xb7/0x128 ? acpi_video_init+0x0/0x17 acpi_bus_register_driver+0x3e/0x42 acpi_video_register+0x42/0x6e acpi_video_init+0x15/0x17 do_one_initcall+0x56/0x130 Analysis shows it's the following code from (inlined) acpi_device_install_notify_handler static int acpi_device_install_notify_handler(struct acpi_device *device) { acpi_status status; char *hid; hid = acpi_device_hid(device); if (!strcmp(hid, ACPI_BUTTON_HID_POWERF)) but we never check if hid is non-trash before feeding it to strcmp. Looks like something in this linux-next commit is involved: commit ed444824932d2a563858d82ec1ea29b0aa775e91 Author: Bob Moore <robert.moore@intel.com> Date: Mon Jun 29 13:39:29 2009 +0800 I suspect something in acpi_get_object_info() is going astray, causing acpi_device_set_id() to set the ->pnp.hardware_id to NULL in this code: if (hid) { device->pnp.hardware_id = ACPI_ALLOCATE_ZEROED(strlen (hid) + 1); if (device->pnp.hardware_id) { strcpy(device->pnp.hardware_id, hid); device->flags.hardware_id = 1; } } else device->pnp.hardware_id = NULL; The else clause is new in this commit. Looking at the old code, it *may* be that the ACPI code on my laptop is just busticated and/or there's no _HID method for the graphics card, and the old code Just Happened To Work in previous kernels because ->pnp.hardware_id wouldn't actually get set *at all* in acpi_device_set_id, so we'd get random stale data that was bogus, but didn't give strcmp() indigestion... Any wisdom on debugging this further (including how to tell if the ACPI tables have a sane _HID method for the graphics card) would be appreciated... Or is the correct fix in fact to just add a 'if (!hid) return -EINVAL;' to acpi_device_install_notify_handler()? [-- Attachment #2: Type: application/pgp-signature, Size: 226 bytes --] ^ permalink raw reply [flat|nested] 8+ messages in thread
[parent not found: <d3f22a0907202021o525c98ebg4ef3f0d5d1c3016@mail.gmail.com>]
* Re: mmotm 2009-07-16-14-32 - sudden OOPS at boot in ACPI code [not found] ` <d3f22a0907202021o525c98ebg4ef3f0d5d1c3016@mail.gmail.com> @ 2009-07-21 3:27 ` Lin Ming 0 siblings, 0 replies; 8+ messages in thread From: Lin Ming @ 2009-07-21 3:27 UTC (permalink / raw) To: Valdis.Kletnieks Cc: Andrew Morton, Bob Moore, Len Brown, linux-kernel, linux-acpi > From: <Valdis.Kletnieks@vt.edu> > Date: Tue, Jul 21, 2009 at 10:52 AM > Subject: mmotm 2009-07-16-14-32 - sudden OOPS at boot in ACPI code > To: Andrew Morton <akpm@linux-foundation.org>, Bob Moore > <robert.moore@intel.com>, Len Brown <lenb@kernel.org> > Cc: linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org > > > On Thu, 16 Jul 2009 14:34:02 PDT, akpm@linux-foundation.org said: > > The mm-of-the-moment snapshot 2009-07-16-14-32 has been uploaded to > > Dies a horrid death during early boot. Dell Latitude D820, and this graphics: > > 01:00.0 VGA compatible controller: nVidia Corporation G72M [Quadro NVS > 110M/GeForce Go 7300] (rev a1) > > Traceback (hand-copied from a very crappy cell-phone picture) > > strcmp+0x4/0x1f > acpi_device+probe+0xac/0x13e > driver_probe_device+0xc9/0x14e > __driver_attach+0x58/0x7c > ? __driver_attach+0x58/0x7c > ? __driver_attach+0x58/0x7c > bus_for_each_dev+0x54/0x89 > driver_attach+0x19/0x1b > bus_add_driver+0xv4/0x1fe > driver_register+0xb7/0x128 > ? acpi_video_init+0x0/0x17 > acpi_bus_register_driver+0x3e/0x42 > acpi_video_register+0x42/0x6e > acpi_video_init+0x15/0x17 > do_one_initcall+0x56/0x130 > > Analysis shows it's the following code from (inlined) > acpi_device_install_notify_handler > > static int acpi_device_install_notify_handler(struct acpi_device *device) > { > acpi_status status; > char *hid; > > hid = acpi_device_hid(device); > if (!strcmp(hid, ACPI_BUTTON_HID_POWERF)) > > but we never check if hid is non-trash before feeding it to strcmp. Looks > like something in this linux-next commit is involved: > > commit ed444824932d2a563858d82ec1ea29b0aa775e91 > Author: Bob Moore <robert.moore@intel.com> > Date: Mon Jun 29 13:39:29 2009 +0800 > > I suspect something in acpi_get_object_info() is going astray, causing > acpi_device_set_id() to set the ->pnp.hardware_id to NULL in this code: > > if (hid) { > device->pnp.hardware_id = ACPI_ALLOCATE_ZEROED(strlen (hid) + 1); > if (device->pnp.hardware_id) { > strcpy(device->pnp.hardware_id, hid); > device->flags.hardware_id = 1; > } > } else > device->pnp.hardware_id = NULL; > > The else clause is new in this commit. Hi, would you please try below patch? diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h index 6e83a68..6c64366 100644 --- a/include/acpi/acpi_bus.h +++ b/include/acpi/acpi_bus.h @@ -188,8 +188,8 @@ struct acpi_device_pnp { #define acpi_device_bid(d) ((d)->pnp.bus_id) #define acpi_device_adr(d) ((d)->pnp.bus_address) -#define acpi_device_hid(d) ((d)->pnp.hardware_id) -#define acpi_device_uid(d) ((d)->pnp.unique_id) +#define acpi_device_hid(d) ((d)->pnp.hardware_id ? (d)->pnp.hardware_id : "\0") +#define acpi_device_uid(d) ((d)->pnp.unique_id ? (d)->pnp.unique_id : "\0") #define acpi_device_name(d) ((d)->pnp.device_name) #define acpi_device_class(d) ((d)->pnp.device_class) Thanks, Lin Ming ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: mmotm 2009-07-16-14-32 - sudden OOPS at boot in ACPI code 2009-07-21 2:52 ` mmotm 2009-07-16-14-32 - sudden OOPS at boot in ACPI code Valdis.Kletnieks [not found] ` <d3f22a0907202021o525c98ebg4ef3f0d5d1c3016@mail.gmail.com> @ 2009-07-21 3:33 ` Hugh Dickins [not found] ` <d3f22a0907202225v66c6535dg27d54e1158e7df7a@mail.gmail.com> 1 sibling, 1 reply; 8+ messages in thread From: Hugh Dickins @ 2009-07-21 3:33 UTC (permalink / raw) To: Valdis.Kletnieks Cc: Andrew Morton, Bob Moore, Len Brown, linux-kernel, linux-acpi On Mon, 20 Jul 2009, Valdis.Kletnieks@vt.edu wrote: > On Thu, 16 Jul 2009 14:34:02 PDT, akpm@linux-foundation.org said: > > The mm-of-the-moment snapshot 2009-07-16-14-32 has been uploaded to > > Dies a horrid death during early boot. Dell Latitude D820, and this graphics: > > 01:00.0 VGA compatible controller: nVidia Corporation G72M [Quadro NVS 110M/GeForce Go 7300] (rev a1) Oh yes, I was getting just the same with Intel graphics (i915); but promptly forgot about it once I'd a workaround in place, and moved on to other things, sorry. > > Traceback (hand-copied from a very crappy cell-phone picture) > > strcmp+0x4/0x1f > acpi_device+probe+0xac/0x13e > driver_probe_device+0xc9/0x14e > __driver_attach+0x58/0x7c > ? __driver_attach+0x58/0x7c > ? __driver_attach+0x58/0x7c > bus_for_each_dev+0x54/0x89 > driver_attach+0x19/0x1b > bus_add_driver+0xv4/0x1fe > driver_register+0xb7/0x128 > ? acpi_video_init+0x0/0x17 > acpi_bus_register_driver+0x3e/0x42 > acpi_video_register+0x42/0x6e > acpi_video_init+0x15/0x17 > do_one_initcall+0x56/0x130 > > Analysis shows it's the following code from (inlined) acpi_device_install_notify_handler > > static int acpi_device_install_notify_handler(struct acpi_device *device) > { > acpi_status status; > char *hid; > > hid = acpi_device_hid(device); > if (!strcmp(hid, ACPI_BUTTON_HID_POWERF)) > > but we never check if hid is non-trash before feeding it to strcmp. Looks > like something in this linux-next commit is involved: > > commit ed444824932d2a563858d82ec1ea29b0aa775e91 > Author: Bob Moore <robert.moore@intel.com> > Date: Mon Jun 29 13:39:29 2009 +0800 > > I suspect something in acpi_get_object_info() is going astray, causing > acpi_device_set_id() to set the ->pnp.hardware_id to NULL in this code: > > if (hid) { > device->pnp.hardware_id = ACPI_ALLOCATE_ZEROED(strlen (hid) + 1); > if (device->pnp.hardware_id) { > strcpy(device->pnp.hardware_id, hid); > device->flags.hardware_id = 1; > } > } else > device->pnp.hardware_id = NULL; > > The else clause is new in this commit. I think pnp.hardware_id has changed from being a builtin array to an allocated pointer: so before there was always a zeroed array to strcmp against, whereas now there's a NULL pointer if you come to use acpi_device_install_notify_handler() "too early". Patch that works for me at the bottom. > > Looking at the old code, it *may* be that the ACPI code on my laptop is just > busticated and/or there's no _HID method for the graphics card, and the old > code Just Happened To Work in previous kernels because ->pnp.hardware_id > wouldn't actually get set *at all* in acpi_device_set_id, so we'd get random > stale data that was bogus, but didn't give strcmp() indigestion... > > Any wisdom on debugging this further (including how to tell if the ACPI > tables have a sane _HID method for the graphics card) would be appreciated... > > Or is the correct fix in fact to just add a 'if (!hid) return -EINVAL;' to > acpi_device_install_notify_handler()? [PATCH mmotm] acpi: work around NULL hardware_id Work around NULL pnp.hardware_id in acpi_device_install_notify_handler() when probing video device. Signed-off-by: Hugh Dickins <hugh.dickins@tiscali.co.uk> --- Signoff provided to handle the unlikely event that this hack is actually the right fix! drivers/acpi/scan.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --- mmotm/drivers/acpi/scan.c 2009-07-17 12:53:20.000000000 +0100 +++ linux/drivers/acpi/scan.c 2009-07-17 21:19:10.000000000 +0100 @@ -376,12 +376,12 @@ static int acpi_device_install_notify_ha char *hid; hid = acpi_device_hid(device); - if (!strcmp(hid, ACPI_BUTTON_HID_POWERF)) + if (hid && !strcmp(hid, ACPI_BUTTON_HID_POWERF)) status = acpi_install_fixed_event_handler(ACPI_EVENT_POWER_BUTTON, acpi_device_notify_fixed, device); - else if (!strcmp(hid, ACPI_BUTTON_HID_SLEEPF)) + else if (hid && !strcmp(hid, ACPI_BUTTON_HID_SLEEPF)) status = acpi_install_fixed_event_handler(ACPI_EVENT_SLEEP_BUTTON, acpi_device_notify_fixed, ^ permalink raw reply [flat|nested] 8+ messages in thread
[parent not found: <d3f22a0907202225v66c6535dg27d54e1158e7df7a@mail.gmail.com>]
* Re: mmotm 2009-07-16-14-32 - sudden OOPS at boot in ACPI code [not found] ` <d3f22a0907202225v66c6535dg27d54e1158e7df7a@mail.gmail.com> @ 2009-07-21 5:33 ` Lin Ming 0 siblings, 0 replies; 8+ messages in thread From: Lin Ming @ 2009-07-21 5:33 UTC (permalink / raw) To: Hugh Dickins Cc: Valdis.Kletnieks, Andrew Morton, Bob Moore, Len Brown, linux-kernel, linux-acpi > From: Hugh Dickins <hugh.dickins@tiscali.co.uk> > Date: Tue, Jul 21, 2009 at 11:33 AM > Subject: Re: mmotm 2009-07-16-14-32 - sudden OOPS at boot in ACPI code > To: Valdis.Kletnieks@vt.edu > Cc: Andrew Morton <akpm@linux-foundation.org>, Bob Moore > <robert.moore@intel.com>, Len Brown <lenb@kernel.org>, > linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org > > > On Mon, 20 Jul 2009, Valdis.Kletnieks@vt.edu wrote: > > On Thu, 16 Jul 2009 14:34:02 PDT, akpm@linux-foundation.org said: > > > The mm-of-the-moment snapshot 2009-07-16-14-32 has been uploaded to > > > > Dies a horrid death during early boot. Dell Latitude D820, and this graphics: > > > > 01:00.0 VGA compatible controller: nVidia Corporation G72M [Quadro NVS 110M/GeForce Go 7300] (rev a1) > > Oh yes, I was getting just the same with Intel graphics (i915); > but promptly forgot about it once I'd a workaround in place, > and moved on to other things, sorry. > > > > > Traceback (hand-copied from a very crappy cell-phone picture) > > > > strcmp+0x4/0x1f > > acpi_device+probe+0xac/0x13e > > driver_probe_device+0xc9/0x14e > > __driver_attach+0x58/0x7c > > ? __driver_attach+0x58/0x7c > > ? __driver_attach+0x58/0x7c > > bus_for_each_dev+0x54/0x89 > > driver_attach+0x19/0x1b > > bus_add_driver+0xv4/0x1fe > > driver_register+0xb7/0x128 > > ? acpi_video_init+0x0/0x17 > > acpi_bus_register_driver+0x3e/0x42 > > acpi_video_register+0x42/0x6e > > acpi_video_init+0x15/0x17 > > do_one_initcall+0x56/0x130 > > > > Analysis shows it's the following code from (inlined) acpi_device_install_notify_handler > > > > static int acpi_device_install_notify_handler(struct acpi_device *device) > > { > > acpi_status status; > > char *hid; > > > > hid = acpi_device_hid(device); > > if (!strcmp(hid, ACPI_BUTTON_HID_POWERF)) > > > > but we never check if hid is non-trash before feeding it to strcmp. Looks > > like something in this linux-next commit is involved: > > > > commit ed444824932d2a563858d82ec1ea29b0aa775e91 > > Author: Bob Moore <robert.moore@intel.com> > > Date: Mon Jun 29 13:39:29 2009 +0800 > > > > I suspect something in acpi_get_object_info() is going astray, causing > > acpi_device_set_id() to set the ->pnp.hardware_id to NULL in this code: > > > > if (hid) { > > device->pnp.hardware_id = ACPI_ALLOCATE_ZEROED(strlen (hid) + 1); > > if (device->pnp.hardware_id) { > > strcpy(device->pnp.hardware_id, hid); > > device->flags.hardware_id = 1; > > } > > } else > > device->pnp.hardware_id = NULL; > > > > The else clause is new in this commit. > > I think pnp.hardware_id has changed from being a builtin array to > an allocated pointer: so before there was always a zeroed array to Yes, pnp.hardware_id and pnp.unique_id are now allocated pointer. We made the change for acpi_get_object_info interface. > strcmp against, whereas now there's a NULL pointer if you come to > use acpi_device_install_notify_handler() "too early". > > Patch that works for me at the bottom. Yes, your patch can workaround the problem in acpi_device_install_notify_handler. But there are other places call strcmp to compare HID/UID. So we'd better fix acpi_device_hid/_uid as below, diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h index 6e83a68..6c64366 100644 --- a/include/acpi/acpi_bus.h +++ b/include/acpi/acpi_bus.h @@ -188,8 +188,8 @@ struct acpi_device_pnp { #define acpi_device_bid(d) ((d)->pnp.bus_id) #define acpi_device_adr(d) ((d)->pnp.bus_address) -#define acpi_device_hid(d) ((d)->pnp.hardware_id) -#define acpi_device_uid(d) ((d)->pnp.unique_id) +#define acpi_device_hid(d) ((d)->pnp.hardware_id ? (d)->pnp.hardware_id : "\0") +#define acpi_device_uid(d) ((d)->pnp.unique_id ? (d)->pnp.unique_id : "\0") #define acpi_device_name(d) ((d)->pnp.device_name) #define acpi_device_class(d) ((d)->pnp.device_class) --- Thanks, Lin Ming > > > > > Looking at the old code, it *may* be that the ACPI code on my laptop is just > > busticated and/or there's no _HID method for the graphics card, and the old > > code Just Happened To Work in previous kernels because ->pnp.hardware_id > > wouldn't actually get set *at all* in acpi_device_set_id, so we'd get random > > stale data that was bogus, but didn't give strcmp() indigestion... > > > > Any wisdom on debugging this further (including how to tell if the ACPI > > tables have a sane _HID method for the graphics card) would be appreciated... > > > > Or is the correct fix in fact to just add a 'if (!hid) return -EINVAL;' to > > acpi_device_install_notify_handler()? > > [PATCH mmotm] acpi: work around NULL hardware_id > > Work around NULL pnp.hardware_id in acpi_device_install_notify_handler() > when probing video device. > > Signed-off-by: Hugh Dickins <hugh.dickins@tiscali.co.uk> > --- > Signoff provided to handle the unlikely event that this hack > is actually the right fix! > > drivers/acpi/scan.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > --- mmotm/drivers/acpi/scan.c 2009-07-17 12:53:20.000000000 +0100 > +++ linux/drivers/acpi/scan.c 2009-07-17 21:19:10.000000000 +0100 > @@ -376,12 +376,12 @@ static int acpi_device_install_notify_ha > char *hid; > > hid = acpi_device_hid(device); > - if (!strcmp(hid, ACPI_BUTTON_HID_POWERF)) > + if (hid && !strcmp(hid, ACPI_BUTTON_HID_POWERF)) > status = > acpi_install_fixed_event_handler(ACPI_EVENT_POWER_BUTTON, > acpi_device_notify_fixed, > device); > - else if (!strcmp(hid, ACPI_BUTTON_HID_SLEEPF)) > + else if (hid && !strcmp(hid, ACPI_BUTTON_HID_SLEEPF)) > status = > acpi_install_fixed_event_handler(ACPI_EVENT_SLEEP_BUTTON, > acpi_device_notify_fixed, > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 8+ messages in thread
* mmotm 2009-07-16-14-32 - lockdep whinge in ext3/quota code 2009-07-16 21:34 mmotm 2009-07-16-14-32 uploaded akpm 2009-07-21 2:52 ` mmotm 2009-07-16-14-32 - sudden OOPS at boot in ACPI code Valdis.Kletnieks @ 2009-07-22 13:17 ` Valdis.Kletnieks 2009-07-22 16:19 ` Jan Kara 1 sibling, 1 reply; 8+ messages in thread From: Valdis.Kletnieks @ 2009-07-22 13:17 UTC (permalink / raw) To: Andrew Morton, Jan Kara, Stephen Tweedie, Andreas Dilger Cc: linux-kernel, linux-ext4 [-- Attachment #1: Type: text/plain, Size: 4501 bytes --] Saw this while bisecting to find another issue. quilt top: memcg-add-comments-explaining-memory-barriers-checkpatch-fixes.patch Some checking doesn't look like any of the 58 patches after that are relevant (only the reiser4 patch references quotas, no grep hits for lockdep or ext3). About 30 seconds after boot: ======================================================= [ INFO: possible circular locking dependency detected ] 2.6.31-rc3 #2 ------------------------------------------------------- rm/1562 is trying to acquire lock: (&sb->s_type->i_mutex_key#11/4){+.+...}, at: [<ffffffff81139fd9>] ext3_quota_write+0xb5/0x274 but task is already holding lock: (&s->s_dquot.dqio_mutex){+.+...}, at: [<ffffffff811153d5>] dquot_commit+0x26/0xee which lock already depends on the new lock. the existing dependency chain (in reverse order) is: -> #1 (&s->s_dquot.dqio_mutex){+.+...}: [<ffffffff81067010>] __lock_acquire+0xa1b/0xb97 [<ffffffff81067278>] lock_acquire+0xec/0x110 [<ffffffff814a04af>] __mutex_lock_common+0x5a/0x54e [<ffffffff814a0a43>] mutex_lock_nested+0x32/0x37 [<ffffffff81115b54>] vfs_load_quota_inode+0x264/0x496 [<ffffffff81116094>] vfs_quota_on_path+0x4c/0x55 [<ffffffff81138e9d>] ext3_quota_on+0x14c/0x167 [<ffffffff81119e4f>] do_quotactl+0xf4/0x44c [<ffffffff8111a491>] sys_quotactl+0x2ea/0x30e [<ffffffff8100b2ab>] system_call_fastpath+0x16/0x1b [<ffffffffffffffff>] 0xffffffffffffffff -> #0 (&sb->s_type->i_mutex_key#11/4){+.+...}: [<ffffffff81066eed>] __lock_acquire+0x8f8/0xb97 [<ffffffff81067278>] lock_acquire+0xec/0x110 [<ffffffff814a04af>] __mutex_lock_common+0x5a/0x54e [<ffffffff814a0a43>] mutex_lock_nested+0x32/0x37 [<ffffffff81139fd9>] ext3_quota_write+0xb5/0x274 [<ffffffff81119bd3>] qtree_write_dquot+0xce/0x127 [<ffffffff81118924>] v2_write_dquot+0x27/0x29 [<ffffffff8111544c>] dquot_commit+0x9d/0xee [<ffffffff8113a8ae>] ext3_write_dquot+0x69/0x8a [<ffffffff8111713f>] dqput+0x138/0x25c [<ffffffff81117993>] dquot_drop+0x6a/0x74 [<ffffffff8111509f>] vfs_dq_drop+0x41/0x43 [<ffffffff81130cba>] ext3_free_inode+0x96/0x28c [<ffffffff81134cce>] ext3_delete_inode+0xbf/0xdd [<ffffffff810e357d>] generic_delete_inode+0x135/0x1db [<ffffffff810e363a>] generic_drop_inode+0x17/0x56 [<ffffffff810e252d>] iput+0x7a/0x7f [<ffffffff810db906>] do_unlinkat+0x123/0x176 [<ffffffff810dbab8>] sys_unlinkat+0x24/0x26 [<ffffffff8100b2ab>] system_call_fastpath+0x16/0x1b [<ffffffffffffffff>] 0xffffffffffffffff other info that might help us debug this: 2 locks held by rm/1562: #0: (jbd_handle){+.+...}, at: [<ffffffff811433c9>] journal_start+0x10a/0x137 #1: (&s->s_dquot.dqio_mutex){+.+...}, at: [<ffffffff811153d5>] dquot_commit+0x26/0xee stack backtrace: Pid: 1562, comm: rm Not tainted 2.6.31-rc3 #2 Call Trace: [<ffffffff81066290>] print_circular_bug_tail+0x71/0x7c [<ffffffff81066eed>] __lock_acquire+0x8f8/0xb97 [<ffffffff81139fd9>] ? ext3_quota_write+0xb5/0x274 [<ffffffff81067278>] lock_acquire+0xec/0x110 [<ffffffff81139fd9>] ? ext3_quota_write+0xb5/0x274 [<ffffffff814a04af>] __mutex_lock_common+0x5a/0x54e [<ffffffff81139fd9>] ? ext3_quota_write+0xb5/0x274 [<ffffffff810665e4>] ? check_irq_usage+0xad/0xbe [<ffffffff81139fd9>] ? ext3_quota_write+0xb5/0x274 [<ffffffff810670e2>] ? __lock_acquire+0xaed/0xb97 [<ffffffff814a0a43>] mutex_lock_nested+0x32/0x37 [<ffffffff81139fd9>] ext3_quota_write+0xb5/0x274 [<ffffffff81119bd3>] qtree_write_dquot+0xce/0x127 [<ffffffff81034c90>] ? get_parent_ip+0x11/0x42 [<ffffffff81118924>] v2_write_dquot+0x27/0x29 [<ffffffff8111544c>] dquot_commit+0x9d/0xee [<ffffffff8113a8ae>] ext3_write_dquot+0x69/0x8a [<ffffffff8111713f>] dqput+0x138/0x25c [<ffffffff81117993>] dquot_drop+0x6a/0x74 [<ffffffff8111509f>] vfs_dq_drop+0x41/0x43 [<ffffffff81130cba>] ext3_free_inode+0x96/0x28c [<ffffffff81131d63>] ? ext3_mark_inode_dirty+0x48/0x53 [<ffffffff81134cce>] ext3_delete_inode+0xbf/0xdd [<ffffffff81134c0f>] ? ext3_delete_inode+0x0/0xdd [<ffffffff810e357d>] generic_delete_inode+0x135/0x1db [<ffffffff810e363a>] generic_drop_inode+0x17/0x56 [<ffffffff810e252d>] iput+0x7a/0x7f [<ffffffff810db906>] do_unlinkat+0x123/0x176 [<ffffffff8107d440>] ? audit_syscall_entry+0x170/0x19c [<ffffffff810dbab8>] sys_unlinkat+0x24/0x26 [<ffffffff8100b2ab>] system_call_fastpath+0x16/0x1b [-- Attachment #2: Type: application/pgp-signature, Size: 226 bytes --] ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: mmotm 2009-07-16-14-32 - lockdep whinge in ext3/quota code 2009-07-22 13:17 ` mmotm 2009-07-16-14-32 - lockdep whinge in ext3/quota code Valdis.Kletnieks @ 2009-07-22 16:19 ` Jan Kara 2009-07-22 18:25 ` Valdis.Kletnieks 0 siblings, 1 reply; 8+ messages in thread From: Jan Kara @ 2009-07-22 16:19 UTC (permalink / raw) To: Valdis.Kletnieks Cc: Andrew Morton, Jan Kara, Stephen Tweedie, Andreas Dilger, linux-kernel, linux-ext4 [-- Attachment #1: Type: text/plain, Size: 5006 bytes --] On Wed 22-07-09 09:17:49, Valdis.Kletnieks@vt.edu wrote: > Saw this while bisecting to find another issue. > > quilt top: > memcg-add-comments-explaining-memory-barriers-checkpatch-fixes.patch > > Some checking doesn't look like any of the 58 patches after that are > relevant (only the reiser4 patch references quotas, no grep hits for lockdep > or ext3). > > About 30 seconds after boot: > > ======================================================= > [ INFO: possible circular locking dependency detected ] > 2.6.31-rc3 #2 > ------------------------------------------------------- > rm/1562 is trying to acquire lock: > (&sb->s_type->i_mutex_key#11/4){+.+...}, at: [<ffffffff81139fd9>] ext3_quota_write+0xb5/0x274 > > but task is already holding lock: > (&s->s_dquot.dqio_mutex){+.+...}, at: [<ffffffff811153d5>] dquot_commit+0x26/0xee > > which lock already depends on the new lock. > Grumble... Commit d01730d74d2b0155da50d44555001706294014f7 didn't quite fix the problem. At least lockdep now warns about it ;). Attached patch should fix it (compile tested only so far). > the existing dependency chain (in reverse order) is: > > -> #1 (&s->s_dquot.dqio_mutex){+.+...}: > [<ffffffff81067010>] __lock_acquire+0xa1b/0xb97 > [<ffffffff81067278>] lock_acquire+0xec/0x110 > [<ffffffff814a04af>] __mutex_lock_common+0x5a/0x54e > [<ffffffff814a0a43>] mutex_lock_nested+0x32/0x37 > [<ffffffff81115b54>] vfs_load_quota_inode+0x264/0x496 > [<ffffffff81116094>] vfs_quota_on_path+0x4c/0x55 > [<ffffffff81138e9d>] ext3_quota_on+0x14c/0x167 > [<ffffffff81119e4f>] do_quotactl+0xf4/0x44c > [<ffffffff8111a491>] sys_quotactl+0x2ea/0x30e > [<ffffffff8100b2ab>] system_call_fastpath+0x16/0x1b > [<ffffffffffffffff>] 0xffffffffffffffff > > -> #0 (&sb->s_type->i_mutex_key#11/4){+.+...}: > [<ffffffff81066eed>] __lock_acquire+0x8f8/0xb97 > [<ffffffff81067278>] lock_acquire+0xec/0x110 > [<ffffffff814a04af>] __mutex_lock_common+0x5a/0x54e > [<ffffffff814a0a43>] mutex_lock_nested+0x32/0x37 > [<ffffffff81139fd9>] ext3_quota_write+0xb5/0x274 > [<ffffffff81119bd3>] qtree_write_dquot+0xce/0x127 > [<ffffffff81118924>] v2_write_dquot+0x27/0x29 > [<ffffffff8111544c>] dquot_commit+0x9d/0xee > [<ffffffff8113a8ae>] ext3_write_dquot+0x69/0x8a > [<ffffffff8111713f>] dqput+0x138/0x25c > [<ffffffff81117993>] dquot_drop+0x6a/0x74 > [<ffffffff8111509f>] vfs_dq_drop+0x41/0x43 > [<ffffffff81130cba>] ext3_free_inode+0x96/0x28c > [<ffffffff81134cce>] ext3_delete_inode+0xbf/0xdd > [<ffffffff810e357d>] generic_delete_inode+0x135/0x1db > [<ffffffff810e363a>] generic_drop_inode+0x17/0x56 > [<ffffffff810e252d>] iput+0x7a/0x7f > [<ffffffff810db906>] do_unlinkat+0x123/0x176 > [<ffffffff810dbab8>] sys_unlinkat+0x24/0x26 > [<ffffffff8100b2ab>] system_call_fastpath+0x16/0x1b > [<ffffffffffffffff>] 0xffffffffffffffff > > other info that might help us debug this: > > 2 locks held by rm/1562: > #0: (jbd_handle){+.+...}, at: [<ffffffff811433c9>] journal_start+0x10a/0x137 > #1: (&s->s_dquot.dqio_mutex){+.+...}, at: [<ffffffff811153d5>] dquot_commit+0x26/0xee > > stack backtrace: > Pid: 1562, comm: rm Not tainted 2.6.31-rc3 #2 > Call Trace: > [<ffffffff81066290>] print_circular_bug_tail+0x71/0x7c > [<ffffffff81066eed>] __lock_acquire+0x8f8/0xb97 > [<ffffffff81139fd9>] ? ext3_quota_write+0xb5/0x274 > [<ffffffff81067278>] lock_acquire+0xec/0x110 > [<ffffffff81139fd9>] ? ext3_quota_write+0xb5/0x274 > [<ffffffff814a04af>] __mutex_lock_common+0x5a/0x54e > [<ffffffff81139fd9>] ? ext3_quota_write+0xb5/0x274 > [<ffffffff810665e4>] ? check_irq_usage+0xad/0xbe > [<ffffffff81139fd9>] ? ext3_quota_write+0xb5/0x274 > [<ffffffff810670e2>] ? __lock_acquire+0xaed/0xb97 > [<ffffffff814a0a43>] mutex_lock_nested+0x32/0x37 > [<ffffffff81139fd9>] ext3_quota_write+0xb5/0x274 > [<ffffffff81119bd3>] qtree_write_dquot+0xce/0x127 > [<ffffffff81034c90>] ? get_parent_ip+0x11/0x42 > [<ffffffff81118924>] v2_write_dquot+0x27/0x29 > [<ffffffff8111544c>] dquot_commit+0x9d/0xee > [<ffffffff8113a8ae>] ext3_write_dquot+0x69/0x8a > [<ffffffff8111713f>] dqput+0x138/0x25c > [<ffffffff81117993>] dquot_drop+0x6a/0x74 > [<ffffffff8111509f>] vfs_dq_drop+0x41/0x43 > [<ffffffff81130cba>] ext3_free_inode+0x96/0x28c > [<ffffffff81131d63>] ? ext3_mark_inode_dirty+0x48/0x53 > [<ffffffff81134cce>] ext3_delete_inode+0xbf/0xdd > [<ffffffff81134c0f>] ? ext3_delete_inode+0x0/0xdd > [<ffffffff810e357d>] generic_delete_inode+0x135/0x1db > [<ffffffff810e363a>] generic_drop_inode+0x17/0x56 > [<ffffffff810e252d>] iput+0x7a/0x7f > [<ffffffff810db906>] do_unlinkat+0x123/0x176 > [<ffffffff8107d440>] ? audit_syscall_entry+0x170/0x19c > [<ffffffff810dbab8>] sys_unlinkat+0x24/0x26 > [<ffffffff8100b2ab>] system_call_fastpath+0x16/0x1b Honza -- Jan Kara <jack@suse.cz> SUSE Labs, CR [-- Attachment #2: 0001-quota-Silence-lockdep-on-quota_on.patch --] [-- Type: text/x-patch, Size: 2436 bytes --] >From df60fe9a9d554070e6135087e154bd5aad2cc1b5 Mon Sep 17 00:00:00 2001 From: Jan Kara <jack@suse.cz> Date: Wed, 22 Jul 2009 18:12:17 +0200 Subject: [PATCH] quota: Silence lockdep on quota_on Commit d01730d74d2b0155da50d44555001706294014f7 didn't completely fix the problem since we still take dqio_mutex and i_mutex in the wrong order. Move taking of i_mutex further down (luckily it's needed only for updating inode flags) below where dqio_mutex is taken. Signed-off-by: Jan Kara <jack@suse.cz> --- fs/quota/dquot.c | 7 ++++--- 1 files changed, 4 insertions(+), 3 deletions(-) diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c index 70f36c0..38f7bd5 100644 --- a/fs/quota/dquot.c +++ b/fs/quota/dquot.c @@ -2043,7 +2043,6 @@ static int vfs_load_quota_inode(struct inode *inode, int type, int format_id, invalidate_bdev(sb->s_bdev); } mutex_lock(&dqopt->dqonoff_mutex); - mutex_lock_nested(&inode->i_mutex, I_MUTEX_QUOTA); if (sb_has_quota_loaded(sb, type)) { error = -EBUSY; goto out_lock; @@ -2054,9 +2053,11 @@ static int vfs_load_quota_inode(struct inode *inode, int type, int format_id, * possible) Also nobody should write to the file - we use * special IO operations which ignore the immutable bit. */ down_write(&dqopt->dqptr_sem); + mutex_lock_nested(&inode->i_mutex, I_MUTEX_QUOTA); oldflags = inode->i_flags & (S_NOATIME | S_IMMUTABLE | S_NOQUOTA); inode->i_flags |= S_NOQUOTA | S_NOATIME | S_IMMUTABLE; + mutex_unlock(&inode->i_mutex); up_write(&dqopt->dqptr_sem); sb->dq_op->drop(inode); } @@ -2080,7 +2081,6 @@ static int vfs_load_quota_inode(struct inode *inode, int type, int format_id, goto out_file_init; } mutex_unlock(&dqopt->dqio_mutex); - mutex_unlock(&inode->i_mutex); spin_lock(&dq_state_lock); dqopt->flags |= dquot_state_flag(flags, type); spin_unlock(&dq_state_lock); @@ -2096,13 +2096,14 @@ out_file_init: out_lock: if (oldflags != -1) { down_write(&dqopt->dqptr_sem); + mutex_lock_nested(&inode->i_mutex, I_MUTEX_QUOTA); /* Set the flags back (in the case of accidental quotaon() * on a wrong file we don't want to mess up the flags) */ inode->i_flags &= ~(S_NOATIME | S_NOQUOTA | S_IMMUTABLE); inode->i_flags |= oldflags; + mutex_unlock(&inode->i_mutex); up_write(&dqopt->dqptr_sem); } - mutex_unlock(&inode->i_mutex); mutex_unlock(&dqopt->dqonoff_mutex); out_fmt: put_quota_format(fmt); -- 1.6.0.2 ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: mmotm 2009-07-16-14-32 - lockdep whinge in ext3/quota code 2009-07-22 16:19 ` Jan Kara @ 2009-07-22 18:25 ` Valdis.Kletnieks 0 siblings, 0 replies; 8+ messages in thread From: Valdis.Kletnieks @ 2009-07-22 18:25 UTC (permalink / raw) To: Jan Kara Cc: Andrew Morton, Stephen Tweedie, Andreas Dilger, linux-kernel, linux-ext4 [-- Attachment #1: Type: text/plain, Size: 779 bytes --] On Wed, 22 Jul 2009 18:19:23 +0200, Jan Kara said: > From df60fe9a9d554070e6135087e154bd5aad2cc1b5 Mon Sep 17 00:00:00 2001 > From: Jan Kara <jack@suse.cz> > Date: Wed, 22 Jul 2009 18:12:17 +0200 > Subject: [PATCH] quota: Silence lockdep on quota_on > > Commit d01730d74d2b0155da50d44555001706294014f7 didn't completely fix > the problem since we still take dqio_mutex and i_mutex in the wrong > order. Move taking of i_mutex further down (luckily it's needed only > for updating inode flags) below where dqio_mutex is taken. > > Signed-off-by: Jan Kara <jack@suse.cz> Applied that fix to the -mmotm I was testing, and the kernel booted quietly. Feel free to attach a: Tested-by: Valdis Kletnieks <valdis.kletnieks@vt.edu> as it goes upstream. Thanks for the fast patch. [-- Attachment #2: Type: application/pgp-signature, Size: 226 bytes --] ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2009-07-22 18:26 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-07-16 21:34 mmotm 2009-07-16-14-32 uploaded akpm
2009-07-21 2:52 ` mmotm 2009-07-16-14-32 - sudden OOPS at boot in ACPI code Valdis.Kletnieks
[not found] ` <d3f22a0907202021o525c98ebg4ef3f0d5d1c3016@mail.gmail.com>
2009-07-21 3:27 ` Lin Ming
2009-07-21 3:33 ` Hugh Dickins
[not found] ` <d3f22a0907202225v66c6535dg27d54e1158e7df7a@mail.gmail.com>
2009-07-21 5:33 ` Lin Ming
2009-07-22 13:17 ` mmotm 2009-07-16-14-32 - lockdep whinge in ext3/quota code Valdis.Kletnieks
2009-07-22 16:19 ` Jan Kara
2009-07-22 18:25 ` Valdis.Kletnieks
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
Powered by JetHome