Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752873Ab0BWMdY (ORCPT ); Tue, 23 Feb 2010 07:33:24 -0500 Received: from 0122700014.0.fullrate.dk ([95.166.99.235]:54773 "EHLO kernel.dk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752172Ab0BWMdX (ORCPT ); Tue, 23 Feb 2010 07:33:23 -0500 Date: Tue, 23 Feb 2010 13:33:21 +0100 From: Jens Axboe To: Alan Stern Cc: "Rafael J. Wysocki" , Maxim Levitsky , linux-pm , linux-kernel , Andrew Morton Subject: Re: [linux-pm] Is it supposed to be ok to call del_gendisk while userspace is frozen? Message-ID: <20100223123321.GA1025@kernel.dk> References: <201002152204.04148.rjw@sisk.pl> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3434 Lines: 76 On Tue, Feb 16 2010, Alan Stern wrote: > On Mon, 15 Feb 2010, Rafael J. Wysocki wrote: > > > On Monday 15 February 2010, Maxim Levitsky wrote: > > > On Sat, 2010-02-13 at 15:29 +0200, Maxim Levitsky wrote: > > > > I noticed that currently calling del_gendisk leads to sure deadlock if > > > > attemped from .suspend or .resume functions. > > > > Well, it shouldn't be called from there, then. > > Even if drivers avoid calling it from within suspend methods, they have > to be able to call it from within resume methods. After all, the > resume method may find that the disk's device has vanished. del_gendisk() needs process context at least, since it'll sleep (not just for sync/invalidate, but other parts of the destruction as well). > > > > Something like that: > > > > > > > > [] ? prepare_to_wait+0x2a/0x90 > > > > [] ? trace_hardirqs_on+0xd/0x10 > > > > [] ? _raw_spin_unlock_irqrestore+0x42/0x80 > > > > [] ? bdi_sched_wait+0x0/0x20 > > > > [] bdi_sched_wait+0xe/0x20 > > > > [] __wait_on_bit+0x5f/0x90 > > > > [] ? bdi_sched_wait+0x0/0x20 > > > > [] out_of_line_wait_on_bit+0x78/0x90 > > > > [] ? wake_bit_function+0x0/0x40 > > > > [] ? bdi_queue_work+0xa3/0xe0 > > > > [] bdi_sync_writeback+0x6f/0x80 > > > > [] sync_inodes_sb+0x22/0x120 > > > > [] __sync_filesystem+0x82/0x90 > > > > [] sync_filesystem+0x4b/0x70 > > > > [] fsync_bdev+0x2e/0x60 > > > > [] invalidate_partition+0x2e/0x50 > > > > [] del_gendisk+0x3f/0x140 > > > > [] mmc_blk_remove+0x33/0x60 [mmc_block] > > > > [] mmc_bus_remove+0x17/0x20 > > > > [] __device_release_driver+0x66/0xc0 > > > > [] device_release_driver+0x2d/0x40 > > > > [] bus_remove_device+0xb5/0x120 > > > > [] device_del+0x12f/0x1a0 > > > > [] mmc_remove_card+0x5b/0x90 > > > > [] mmc_sd_remove+0x27/0x50 > > > > [] mmc_resume_host+0x10c/0x140 > > > > [] sdhci_resume_host+0x69/0xa0 [sdhci] > > > > [] sdhci_pci_resume+0x8e/0xb0 [sdhci_pci] > > > > > > > > bdi_queue_work seems to be the problem. > > > > > > > > Some device drivers need to remove their cards logically in .suspend, > > > > because the card is removable, and can be changed while system is > > > > suspended. > > > > I don't know how to resolve this right now. > > This is a matter for Jens. Is the bdi writeback task freezable? If it > is, should it be made unfreezable? I'm not a big expect on what tasks should be freezable or not. As it stands, the writeback tasks will attempt to freeze and thaw with the system. I guess that screws the sync from resume call, since it's not running and the sync will wait for it to retrieve and finish that work item. To the suspend experts - can we safely mark the writeback tasks as non-freezable? -- Jens Axboe -- 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/