From patchwork Wed Sep 12 08:29:52 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aaron Lu X-Patchwork-Id: 1441461 Return-Path: X-Original-To: patchwork-linux-acpi@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork1.kernel.org (Postfix) with ESMTP id E380C3FE79 for ; Wed, 12 Sep 2012 08:30:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754982Ab2ILIaQ (ORCPT ); Wed, 12 Sep 2012 04:30:16 -0400 Received: from mga02.intel.com ([134.134.136.20]:15412 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753424Ab2ILIaH (ORCPT ); Wed, 12 Sep 2012 04:30:07 -0400 Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga101.jf.intel.com with ESMTP; 12 Sep 2012 01:30:07 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.80,408,1344236400"; d="scan'208";a="191945847" Received: from mint-spring.sh.intel.com ([10.239.36.120]) by orsmga001.jf.intel.com with ESMTP; 12 Sep 2012 01:30:04 -0700 From: Aaron Lu To: Alan Stern , Oliver Neukum , James Bottomley , Jeff Garzik Cc: linux-scsi@vger.kernel.org, linux-ide@vger.kernel.org, linux-acpi@vger.kernel.org, linux-pm@vger.kernel.org, Aaron Lu , Aaron Lu Subject: [PATCH v7 1/6] block: genhd: add an interface to set disk poll interval Date: Wed, 12 Sep 2012 16:29:52 +0800 Message-Id: <1347438597-5903-2-git-send-email-aaron.lu@intel.com> X-Mailer: git-send-email 1.7.12.21.g871e293 In-Reply-To: <1347438597-5903-1-git-send-email-aaron.lu@intel.com> References: <1347438597-5903-1-git-send-email-aaron.lu@intel.com> Sender: linux-acpi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org Signed-off-by: Aaron Lu --- block/genhd.c | 23 +++++++++++++++++------ include/linux/genhd.h | 1 + 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/block/genhd.c b/block/genhd.c index cac7366..4244256 100644 --- a/block/genhd.c +++ b/block/genhd.c @@ -1627,6 +1627,19 @@ static void disk_events_workfn(struct work_struct *work) kobject_uevent_env(&disk_to_dev(disk)->kobj, KOBJ_CHANGE, envp); } +int disk_events_set_poll_msecs(struct gendisk *disk, long intv) +{ + if (intv < 0 && intv != -1) + return -EINVAL; + + disk_block_events(disk); + disk->ev->poll_msecs = intv; + __disk_unblock_events(disk, true); + + return 0; +} +EXPORT_SYMBOL(disk_events_set_poll_msecs); + /* * A disk events enabled device has the following sysfs nodes under * its /sys/block/X/ directory. @@ -1683,16 +1696,14 @@ static ssize_t disk_events_poll_msecs_store(struct device *dev, { struct gendisk *disk = dev_to_disk(dev); long intv; + int ret; if (!count || !sscanf(buf, "%ld", &intv)) return -EINVAL; - if (intv < 0 && intv != -1) - return -EINVAL; - - disk_block_events(disk); - disk->ev->poll_msecs = intv; - __disk_unblock_events(disk, true); + ret = disk_events_set_poll_msecs(disk, intv); + if (ret) + return ret; return count; } diff --git a/include/linux/genhd.h b/include/linux/genhd.h index 4f440b3..63409e5 100644 --- a/include/linux/genhd.h +++ b/include/linux/genhd.h @@ -423,6 +423,7 @@ extern void disk_block_events(struct gendisk *disk); extern void disk_unblock_events(struct gendisk *disk); extern void disk_flush_events(struct gendisk *disk, unsigned int mask); extern unsigned int disk_clear_events(struct gendisk *disk, unsigned int mask); +extern int disk_events_set_poll_msecs(struct gendisk *disk, long intv); /* drivers/char/random.c */ extern void add_disk_randomness(struct gendisk *disk);