[PATCH 13/16] show-pipesize-in-stat.diff

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: Linux Kernel Mailing List <linux-kernel@...>
Cc: Andrew Morton <akpm@...>
Date: Sunday, April 1, 2007 - 2:17 pm

Show the fill status of a pipe (in bytes) when stat'ing one.

Signed-off-by: Jan Engelhardt <jengelh@gmx.de>

 fs/stat.c             |   31 ++++++++++++++++++++++++++++++-
 include/linux/un.h    |    2 ++
 include/net/af_unix.h |    3 +++
 net/unix/af_unix.c    |   10 ++++++++++
 4 files changed, 45 insertions(+), 1 deletion(-)

Index: linux-2.6.21-rc5/fs/stat.c
===================================================================
--- linux-2.6.21-rc5.orig/fs/stat.c
+++ linux-2.6.21-rc5/fs/stat.c
@@ -14,6 +14,10 @@
 #include <linux/namei.h>
 #include <linux/security.h>
 #include <linux/syscalls.h>
+#include <linux/blkdev.h>
+#include <linux/genhd.h>
+#include <linux/pipe_fs_i.h>
+#include <net/af_unix.h>
 #include <linux/pagemap.h>
 
 #include <asm/uaccess.h>
@@ -31,7 +35,32 @@ void generic_fillattr(struct inode *inod
 	stat->atime = inode->i_atime;
 	stat->mtime = inode->i_mtime;
 	stat->ctime = inode->i_ctime;
-	stat->size = i_size_read(inode);
+	stat->size = 0;
+	if (S_ISFIFO(inode->i_mode)) {
+		const struct pipe_inode_info *info = inode->i_pipe;
+		int i;
+		stat->size = 0;
+		if (info != NULL) {
+			for (i = 0; i < PIPE_BUFFERS; ++i) {
+				const struct pipe_buffer *buf = &info->bufs[i];
+				if (buf != NULL && buf->page != NULL)
+					stat->size += buf->len;
+			}
+		}
+	} else if (S_ISSOCK(inode->i_mode)) {
+#ifdef CONFIG_UNIX_MODULE
+		loff_t (*uxsize)(struct inode *) = __symbol_get("unixsock_size");
+		if (uxsize != NULL) {
+			stat->size = uxsize(inode);
+			symbol_put("unixsock_size");
+		}
+#endif
+#if defined(CONFIG_UNIX) && !defined(CONFIG_UNIX_MODULE)
+		stat->size = unixsock_size(inode);
+#endif
+	} else {
+		stat->size = i_size_read(inode);
+	}
 	stat->blocks = inode->i_blocks;
 	stat->blksize = (1 << inode->i_blkbits);
 }
Index: linux-2.6.21-rc5/include/linux/un.h
===================================================================
--- linux-2.6.21-rc5.orig/include/linux/un.h
+++ linux-2.6.21-rc5/include/linux/un.h
@@ -3,6 +3,8 @@
 
 #define UNIX_PATH_MAX	108
 
+#include <linux/socket.h>
+
 struct sockaddr_un {
 	sa_family_t sun_family;	/* AF_UNIX */
 	char sun_path[UNIX_PATH_MAX];	/* pathname */
Index: linux-2.6.21-rc5/include/net/af_unix.h
===================================================================
--- linux-2.6.21-rc5.orig/include/net/af_unix.h
+++ linux-2.6.21-rc5/include/net/af_unix.h
@@ -2,6 +2,7 @@
 #define __LINUX_NET_AFUNIX_H
 
 #include <linux/socket.h>
+#include <linux/types.h>
 #include <linux/un.h>
 #include <linux/mutex.h>
 #include <net/sock.h>
@@ -88,6 +89,8 @@ struct unix_sock {
 };
 #define unix_sk(__sk) ((struct unix_sock *)__sk)
 
+extern loff_t unixsock_size(struct inode *);
+
 #ifdef CONFIG_SYSCTL
 extern int sysctl_unix_max_dgram_qlen;
 extern void unix_sysctl_register(void);
Index: linux-2.6.21-rc5/net/unix/af_unix.c
===================================================================
--- linux-2.6.21-rc5.orig/net/unix/af_unix.c
+++ linux-2.6.21-rc5/net/unix/af_unix.c
@@ -744,6 +744,16 @@ fail:
 	return NULL;
 }
 
+loff_t unixsock_size(struct inode *inode) {
+    struct sock *sk = unix_find_socket_byinode(inode);
+    loff_t eax;
+
+    if(sk == NULL) { return 0; }
+    eax = sk->sk_rcvbuf;
+    sock_put(sk);
+    return eax;
+}
+EXPORT_SYMBOL(unixsock_size);
 
 static int unix_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
 {
#<EOF>
-
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH 0/16] Assorted patches, Jan Engelhardt, (Sun Apr 1, 2:13 pm)
[PATCH 16/16] warn-on-kthread-name-truncation.diff, Jan Engelhardt, (Sun Apr 1, 2:18 pm)
Re: [PATCH 16/16] warn-on-kthread-name-truncation.diff, Andrew Morton, (Mon Apr 2, 2:00 am)
Re: [PATCH 16/16] warn-on-kthread-name-truncation.diff, Jan Engelhardt, (Mon Apr 2, 2:51 am)
[PATCH 15/16] use-regular-eth-suffix.diff, Jan Engelhardt, (Sun Apr 1, 2:18 pm)
Re: [PATCH 15/16] use-regular-eth-suffix.diff, Kyle Moffett, (Sun Apr 1, 2:42 pm)
Re: [PATCH 15/16] use-regular-eth-suffix.diff, Jouni Malinen, (Sun Apr 1, 9:40 pm)
[PATCH 14/16] kconfig-allow-override.diff, Jan Engelhardt, (Sun Apr 1, 2:17 pm)
Re: [PATCH 14/16] kconfig-allow-override.diff, Sam Ravnborg, (Sun Apr 1, 2:44 pm)
Re: [PATCH 14/16] kconfig-allow-override.diff, Randy Dunlap, (Sun Apr 1, 3:09 pm)
[PATCH 13/16] show-pipesize-in-stat.diff, Jan Engelhardt, (Sun Apr 1, 2:17 pm)
Re: [PATCH 13/16] show-pipesize-in-stat.diff, Eric Dumazet, (Mon Apr 2, 6:41 am)
Re: [PATCH 13/16] show-pipesize-in-stat.diff, Jan Engelhardt, (Tue Apr 3, 8:48 pm)
Re: [PATCH 13/16] show-pipesize-in-stat.diff, Eric Dumazet, (Wed Apr 4, 1:03 am)
Re: [PATCH 13/16] show-pipesize-in-stat.diff, Jan Engelhardt, (Tue Apr 17, 4:05 am)
Re: [PATCH 13/16] show-pipesize-in-stat.diff, Andrew Morton, (Mon Apr 2, 1:58 am)
Re: [PATCH 13/16] show-pipesize-in-stat.diff, Jan Engelhardt, (Mon Apr 2, 2:48 am)
[PATCH 12/16] cifs-use-mutex.diff, Jan Engelhardt, (Sun Apr 1, 2:16 pm)
Re: [PATCH 12/16] cifs-use-mutex.diff, Roland Dreier, (Mon Apr 2, 1:36 am)
[PATCH 11/16] samba-eintr-fix.diff, Jan Engelhardt, (Sun Apr 1, 2:16 pm)
Re: [PATCH 11/16] samba-eintr-fix.diff, Andrew Morton, (Mon Apr 2, 1:53 am)
Re: [PATCH 11/16] samba-eintr-fix.diff, Dave Jones, (Sun Apr 1, 3:09 pm)
Re: [PATCH 11/16] samba-eintr-fix.diff, Jan Engelhardt, (Sun Apr 1, 3:28 pm)
Re: [PATCH 11/16] samba-eintr-fix.diff, Dave Jones, (Sun Apr 1, 3:42 pm)
[PATCH 10/16] show-partitions-on-mount-error.diff, Jan Engelhardt, (Sun Apr 1, 2:15 pm)
Re: [PATCH 10/16] show-partitions-on-mount-error.diff, Pavel Machek, (Mon Apr 2, 2:59 pm)
Re: [PATCH 10/16] show-partitions-on-mount-error.diff, Jan Engelhardt, (Tue Apr 3, 8:42 pm)
Re: [PATCH 10/16] show-partitions-on-mount-error.diff, Andrew Morton, (Mon Apr 2, 1:48 am)
Re: [PATCH 10/16] show partitions on mount error, Jan Engelhardt, (Mon Apr 2, 3:01 am)
Re: [PATCH 10/16] show-partitions-on-mount-error.diff, Andrew Morton, (Mon Apr 2, 1:47 am)
[PATCH 09/16] zlib-decompression-status.diff, Jan Engelhardt, (Sun Apr 1, 2:15 pm)
Re: [PATCH 09/16] zlib-decompression-status.diff, Jan Engelhardt, (Mon Apr 2, 2:50 pm)
[PATCH 08/16] console-printk-level.diff, Jan Engelhardt, (Sun Apr 1, 2:15 pm)
Re: [PATCH 08/16] console-printk-level.diff, Randy Dunlap, (Sun Apr 1, 3:07 pm)
[PATCH 07/16] kconfig-dynamic-frequency.diff, Jan Engelhardt, (Sun Apr 1, 2:15 pm)
Re: [PATCH 07/16] kconfig-dynamic-frequency.diff, Kyle Moffett, (Sun Apr 1, 2:39 pm)
Re: [PATCH 07/16] kconfig-dynamic-frequency.diff, Jan Engelhardt, (Sun Apr 1, 2:42 pm)
Re: [PATCH 07/16] kconfig-dynamic-frequency.diff, Kyle Moffett, (Sun Apr 1, 2:52 pm)
Re: [PATCH 07/16] kconfig-dynamic-frequency.diff, Robert P. J. Day, (Sun Apr 1, 4:22 pm)
Re: [PATCH 07/16] kconfig-dynamic-frequency.diff, Jan Engelhardt, (Sun Apr 1, 3:01 pm)
[PATCH], Kyle Moffett, (Sun Apr 1, 3:42 pm)
Re: [PATCH], Jan Engelhardt, (Sun Apr 1, 3:47 pm)
Re: [PATCH], Kyle Moffett, (Sun Apr 1, 4:07 pm)
Re: [PATCH], Andi Kleen, (Sun Apr 1, 7:03 pm)
[PATCH 06/16] isofs-add-write-bit.diff, Jan Engelhardt, (Sun Apr 1, 2:15 pm)
[PATCH 5/16] fix-kthread-niceness.diff, Jan Engelhardt, (Sun Apr 1, 2:14 pm)
Re: [PATCH 5/16] fix-kthread-niceness.diff, Andrew Morton, (Mon Apr 2, 1:39 am)
[PATCH 4/16] vt-printk-color.diff, Jan Engelhardt, (Sun Apr 1, 2:14 pm)
[PATCH 3/16] vt-underline-color.diff, Jan Engelhardt, (Sun Apr 1, 2:14 pm)
Re: [PATCH 3/16] vt-underline-color.diff, Andrew Morton, (Mon Apr 2, 1:37 am)
Re: [PATCH 3/16] vt-underline-color.diff, Antonino A. Daplas, (Mon Apr 2, 2:57 am)
[PATCH 2/16] vt-pure-colors.diff, Jan Engelhardt, (Sun Apr 1, 2:14 pm)
Re: [PATCH 2/16] vt-pure-colors.diff, James Bruce, (Sun Apr 1, 2:39 pm)
Re: [PATCH 2/16] vt-pure-colors.diff, Antonino A. Daplas, (Mon Apr 2, 2:49 am)
Re: [PATCH 2/16] vt-pure-colors.diff, Jan Engelhardt, (Mon Apr 2, 3:04 am)
Re: [PATCH 2/16] vt-pure-colors.diff, Antonino A. Daplas, (Mon Apr 2, 3:50 am)
Re: [PATCH 2/16] vt-pure-colors.diff, Jan Engelhardt, (Mon Apr 2, 4:01 am)
[PATCH 1/16] vt-sysfs-for-colors.diff, Jan Engelhardt, (Sun Apr 1, 2:13 pm)
Re: [PATCH 1/16] vt-sysfs-for-colors.diff, Antonino A. Daplas, (Mon Apr 2, 2:49 am)
[PATCH 17/16] Do not reset UTF8 on terminal reset, Jan Engelhardt, (Mon Apr 2, 3:31 am)
Re: [PATCH 17/16] Do not reset UTF8 on terminal reset, Pavel Machek, (Mon Apr 2, 2:50 pm)
Re: [PATCH 17/16] Do not reset UTF8 on terminal reset, Paul LeoNerd Evans, (Mon Apr 2, 7:26 am)
Re: [PATCH 17/16] Do not reset UTF8 on terminal reset, Antonino A. Daplas, (Mon Apr 2, 7:44 am)
Re: [PATCH 17/16] Do not reset UTF8 on terminal reset, Paul LeoNerd Evans, (Mon Apr 2, 7:54 am)
Re: [PATCH 17/16] Do not reset UTF8 on terminal reset, Antonino A. Daplas, (Mon Apr 2, 8:47 am)
Re: [PATCH 17/16] Do not reset UTF8 on terminal reset, Jan Engelhardt, (Mon Apr 2, 9:34 am)
Re: [PATCH 17/16] Do not reset UTF8 on terminal reset, Paul LeoNerd Evans, (Mon Apr 2, 9:20 am)
Re: [PATCH 17/16] Do not reset UTF8 on terminal reset, Antonino A. Daplas, (Mon Apr 2, 5:30 am)