All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@suse.de>
To: linux-kernel@vger.kernel.org
Cc: Dan Williams <dan.j.williams@intel.com>,
	Neil Brown <neilb@suse.de>, Greg Kroah-Hartman <gregkh@suse.de>
Subject: [PATCH 30/36] sysfs: refill attribute buffer when reading from offset 0
Date: Sun, 20 Apr 2008 03:46:00 -0700	[thread overview]
Message-ID: <1208688366-9252-30-git-send-email-gregkh@suse.de> (raw)
In-Reply-To: <20080420104516.GA9225@suse.de>

From: Dan Williams <dan.j.williams@intel.com>

Requiring userspace to close and re-open sysfs attributes has been the
policy since before 2.6.12.  It allows userspace to get a consistent
snapshot of kernel state and consume it with incremental reads and seeks.

Now, if the file position is zero the kernel assumes userspace wants to see
the new value.  The application for this change is to allow a userspace
RAID metadata handler to check the state of an array without causing any
memory allocations.  Thus not causing writeback to a raid array that might
be blocked waiting for userspace to take action.

Cc: Neil Brown <neilb@suse.de>
Acked-by: Tejun Heo <htejun@gmail.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
 Documentation/filesystems/sysfs.txt |    9 +++++++--
 fs/sysfs/file.c                     |    5 ++---
 2 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/Documentation/filesystems/sysfs.txt b/Documentation/filesystems/sysfs.txt
index 4598ef7..7f27b8f 100644
--- a/Documentation/filesystems/sysfs.txt
+++ b/Documentation/filesystems/sysfs.txt
@@ -176,8 +176,10 @@ implementations:
   Recall that an attribute should only be exporting one value, or an
   array of similar values, so this shouldn't be that expensive. 
 
-  This allows userspace to do partial reads and seeks arbitrarily over
-  the entire file at will. 
+  This allows userspace to do partial reads and forward seeks
+  arbitrarily over the entire file at will. If userspace seeks back to
+  zero or does a pread(2) with an offset of '0' the show() method will
+  be called again, rearmed, to fill the buffer.
 
 - On write(2), sysfs expects the entire buffer to be passed during the
   first write. Sysfs then passes the entire buffer to the store()
@@ -192,6 +194,9 @@ implementations:
 
 Other notes:
 
+- Writing causes the show() method to be rearmed regardless of current
+  file position.
+
 - The buffer will always be PAGE_SIZE bytes in length. On i386, this
   is 4096. 
 
diff --git a/fs/sysfs/file.c b/fs/sysfs/file.c
index a859c32..ade9a7e 100644
--- a/fs/sysfs/file.c
+++ b/fs/sysfs/file.c
@@ -129,7 +129,7 @@ sysfs_read_file(struct file *file, char __user *buf, size_t count, loff_t *ppos)
 	ssize_t retval = 0;
 
 	mutex_lock(&buffer->mutex);
-	if (buffer->needs_read_fill) {
+	if (buffer->needs_read_fill || *ppos == 0) {
 		retval = fill_read_buffer(file->f_path.dentry,buffer);
 		if (retval)
 			goto out;
@@ -410,8 +410,7 @@ static int sysfs_release(struct inode *inode, struct file *filp)
  * return POLLERR|POLLPRI, and select will return the fd whether
  * it is waiting for read, write, or exceptions.
  * Once poll/select indicates that the value has changed, you
- * need to close and re-open the file, as simply seeking and reading
- * again will not get new data, or reset the state of 'poll'.
+ * need to close and re-open the file, or seek to 0 and read again.
  * Reminder: this only works for attributes which actively support
  * it, and it is not possible to test an attribute from userspace
  * to see if it supports poll (Neither 'poll' nor 'select' return
-- 
1.5.4.5


  parent reply	other threads:[~2008-04-20 10:50 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-04-20 10:45 [GIT PATCH] driver core changes against 2.6.25-git Greg KH
2008-04-20 10:45 ` [PATCH 01/36] kobject: catch kobjects that are not initialized Greg Kroah-Hartman
2008-04-20 10:45 ` [PATCH 02/36] uio: Kconfig improvements Greg Kroah-Hartman
2008-04-20 10:45 ` [PATCH 03/36] uio: mark pci_device_id hilscher_pci_ids[] __devinitdata Greg Kroah-Hartman
2008-04-20 10:45 ` [PATCH 04/36] UIO: arch/arm/Kconfig: Make UIO available on ARM architecture Greg Kroah-Hartman
2008-04-20 10:45 ` [PATCH 05/36] UIO: Remove needless PCI_DEVICE_ID definition from uio_cif.c Greg Kroah-Hartman
2008-04-20 10:45 ` [PATCH 06/36] UIO: Implement a UIO interface for the SMX Cryptengine Greg Kroah-Hartman
2008-04-20 10:45 ` [PATCH 07/36] UIO: hold a reference to the device's owner while the device is open Greg Kroah-Hartman
2008-04-20 10:45 ` [PATCH 08/36] driver core: memory: semaphore to mutex Greg Kroah-Hartman
2008-04-20 10:45 ` [PATCH 09/36] driver core: register_memory/unregister_memory clean ups and bugfix Greg Kroah-Hartman
2008-04-20 10:45 ` [PATCH 10/36] driver core: Convert debug functions declared inline __attribute__((format (printf,x,y) to statement expression macros Greg Kroah-Hartman
2008-04-20 10:45 ` [PATCH 11/36] sysfs: small header file cleanup for SYSFS=n Greg Kroah-Hartman
2008-04-20 10:45 ` [PATCH 12/36] firmware: move firmware_class from Documentation/ to samples/ Greg Kroah-Hartman
2008-04-20 10:45 ` [PATCH 13/36] firmware: clean up samples for coding style issues Greg Kroah-Hartman
2008-04-20 10:45 ` [PATCH 14/36] PNP: add all PNP card device id's as individual aliases Greg Kroah-Hartman
2008-04-20 10:45 ` [PATCH 15/36] power_state: remove it from driver core Greg Kroah-Hartman
2008-04-20 10:45 ` [PATCH 16/36] driver core: cpu: fix section mismatch in cpu.c:store_online Greg Kroah-Hartman
2008-04-20 10:45 ` [PATCH 17/36] sysdev: detect multiple driver registrations Greg Kroah-Hartman
2008-04-20 10:45 ` [PATCH 18/36] block: send disk "change" event for rescan_partitions() Greg Kroah-Hartman
2008-04-20 10:45 ` [PATCH 19/36] PM: Handle device registrations during suspend/resume Greg Kroah-Hartman
2008-04-20 10:45 ` [PATCH 20/36] Driver core: Call device_pm_add() after bus_add_device() in device_add() Greg Kroah-Hartman
2008-04-20 10:45 ` [PATCH 21/36] PM: Fix misuse of wakeup flag accessors in serial core Greg Kroah-Hartman
2008-04-20 10:45 ` [PATCH 22/36] PM: Make wakeup flags available whenever CONFIG_PM is set Greg Kroah-Hartman
2008-04-20 10:45 ` [PATCH 23/36] PM: Convert wakeup flag accessors to inline functions Greg Kroah-Hartman
2008-04-20 10:45 ` [PATCH 24/36] Driver core: make device_is_registered() work for class devices Greg Kroah-Hartman
2008-04-20 10:45 ` [PATCH 25/36] SYSFS: Explicitly include required header file slab.h Greg Kroah-Hartman
2008-04-20 10:45 ` [PATCH 26/36] Kobject: Replace list_for_each() with list_for_each_entry() Greg Kroah-Hartman
2008-04-20 10:45 ` [PATCH 27/36] PM: Remove legacy PM (fix) Greg Kroah-Hartman
2008-04-20 10:45 ` [PATCH 28/36] Firmware: add iSCSI iBFT Support Greg Kroah-Hartman
2008-04-20 10:45 ` [PATCH 29/36] PM: Remove destroy_suspended_device() Greg Kroah-Hartman
2008-04-20 10:46 ` Greg Kroah-Hartman [this message]
2008-04-20 10:46 ` [PATCH 31/36] driver core: replace remaining __FUNCTION__ occurrences Greg Kroah-Hartman
2008-04-20 10:46 ` [PATCH 32/36] memstick: convert struct class_device to struct device Greg Kroah-Hartman
2008-04-20 10:46 ` [PATCH 33/36] IB: " Greg Kroah-Hartman
2008-04-20 17:23   ` Roland Dreier
2008-04-20 10:46 ` [PATCH 34/36] IB: rename "dev" to "srp_dev" in srp_host structure Greg Kroah-Hartman
2008-04-20 10:46 ` [PATCH 35/36] DRM: remove unused dev_class Greg Kroah-Hartman
2008-04-20 10:46 ` [PATCH 36/36] SCSI: convert struct class_device to struct device Greg Kroah-Hartman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1208688366-9252-30-git-send-email-gregkh@suse.de \
    --to=gregkh@suse.de \
    --cc=dan.j.williams@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=neilb@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.