patch-2.4.0-test9 linux/fs/read_write.c

Next file: linux/fs/smbfs/inode.c
Previous file: linux/fs/ramfs/inode.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.0-test8/linux/fs/read_write.c linux/fs/read_write.c
@@ -10,6 +10,7 @@
 #include <linux/file.h>
 #include <linux/uio.h>
 #include <linux/smp_lock.h>
+#include <linux/dnotify.h>
 
 #include <asm/uaccess.h>
 
@@ -132,6 +133,9 @@
 					ret = read(file, buf, count, &file->f_pos);
 			}
 		}
+		if (ret > 0)
+			inode_dir_notify(file->f_dentry->d_parent->d_inode,
+				DN_ACCESS);
 		fput(file);
 	}
 	return ret;
@@ -156,6 +160,9 @@
 					ret = write(file, buf, count, &file->f_pos);
 			}
 		}
+		if (ret > 0)
+			inode_dir_notify(file->f_dentry->d_parent->d_inode,
+				DN_MODIFY);
 		fput(file);
 	}
 	return ret;
@@ -257,6 +264,10 @@
 	if (iov != iovstack)
 		kfree(iov);
 out_nofree:
+	/* VERIFY_WRITE actually means a read, as we write to user space */
+	if ((ret + (type == VERIFY_WRITE)) > 0)
+		inode_dir_notify(file->f_dentry->d_parent->d_inode,
+			(type == VERIFY_WRITE) ? DN_MODIFY : DN_ACCESS);
 	return ret;
 }
 
@@ -327,6 +338,8 @@
 	if (pos < 0)
 		goto out;
 	ret = read(file, buf, count, &pos);
+	if (ret > 0)
+		inode_dir_notify(file->f_dentry->d_parent->d_inode, DN_ACCESS);
 out:
 	fput(file);
 bad_file:
@@ -357,6 +370,8 @@
 		goto out;
 
 	ret = write(file, buf, count, &pos);
+	if (ret > 0)
+		inode_dir_notify(file->f_dentry->d_parent->d_inode, DN_MODIFY);
 out:
 	fput(file);
 bad_file:

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)