diff -urNX ../exclude linux-2.3.99pre8-linus/fs/adfs/dir.c linux-2.3.99pre8+lock/fs/adfs/dir.c --- linux-2.3.99pre8-linus/fs/adfs/dir.c Tue Apr 25 02:13:25 2000 +++ linux-2.3.99pre8+lock/fs/adfs/dir.c Sat May 20 04:15:00 2000 @@ -197,6 +197,7 @@ read: generic_read_dir, readdir: adfs_readdir, fsync: file_fsync, + fasync: file_fasync, }; static int diff -urNX ../exclude linux-2.3.99pre8-linus/fs/affs/dir.c linux-2.3.99pre8+lock/fs/affs/dir.c --- linux-2.3.99pre8-linus/fs/affs/dir.c Sun Mar 12 12:03:14 2000 +++ linux-2.3.99pre8+lock/fs/affs/dir.c Sat May 20 04:10:19 2000 @@ -30,6 +30,7 @@ read: generic_read_dir, readdir: affs_readdir, fsync: file_fsync, + fasync: file_fasync, }; /* diff -urNX ../exclude linux-2.3.99pre8-linus/fs/autofs/dir.c linux-2.3.99pre8+lock/fs/autofs/dir.c --- linux-2.3.99pre8-linus/fs/autofs/dir.c Sun Mar 12 12:03:14 2000 +++ linux-2.3.99pre8+lock/fs/autofs/dir.c Sat May 20 04:14:10 2000 @@ -45,6 +45,7 @@ struct file_operations autofs_dir_operations = { read: generic_read_dir, readdir: autofs_dir_readdir, + fasync: file_fasync, }; struct inode_operations autofs_dir_inode_operations = { diff -urNX ../exclude linux-2.3.99pre8-linus/fs/autofs/root.c linux-2.3.99pre8+lock/fs/autofs/root.c --- linux-2.3.99pre8-linus/fs/autofs/root.c Mon May 15 07:59:24 2000 +++ linux-2.3.99pre8+lock/fs/autofs/root.c Sat May 20 04:14:17 2000 @@ -27,6 +27,7 @@ read: generic_read_dir, readdir: autofs_root_readdir, ioctl: autofs_root_ioctl, + fasync: file_fasync, }; struct inode_operations autofs_root_inode_operations = { diff -urNX ../exclude linux-2.3.99pre8-linus/fs/autofs4/root.c linux-2.3.99pre8+lock/fs/autofs4/root.c --- linux-2.3.99pre8-linus/fs/autofs4/root.c Mon May 15 07:59:24 2000 +++ linux-2.3.99pre8+lock/fs/autofs4/root.c Sat May 20 04:15:55 2000 @@ -29,11 +29,13 @@ read: generic_read_dir, readdir: autofs4_dir_readdir, ioctl: autofs4_root_ioctl, + fasync: file_fasync, }; struct file_operations autofs4_dir_operations = { read: generic_read_dir, readdir: autofs4_dir_readdir, + fasync: file_fasync, }; struct inode_operations autofs4_root_inode_operations = { diff -urNX ../exclude linux-2.3.99pre8-linus/fs/bfs/dir.c linux-2.3.99pre8+lock/fs/bfs/dir.c --- linux-2.3.99pre8-linus/fs/bfs/dir.c Sun Mar 12 12:03:45 2000 +++ linux-2.3.99pre8+lock/fs/bfs/dir.c Sat May 20 04:15:32 2000 @@ -74,6 +74,7 @@ read: generic_read_dir, readdir: bfs_readdir, fsync: file_fsync, + fasync: file_fasync, }; extern void dump_imap(const char *, struct super_block *); diff -urNX ../exclude linux-2.3.99pre8-linus/fs/coda/dir.c linux-2.3.99pre8+lock/fs/coda/dir.c --- linux-2.3.99pre8-linus/fs/coda/dir.c Tue Apr 25 02:11:48 2000 +++ linux-2.3.99pre8+lock/fs/coda/dir.c Sat May 20 04:14:33 2000 @@ -83,6 +83,7 @@ open: coda_open, release: coda_release, fsync: coda_fsync, + fasync: file_fasync, }; diff -urNX ../exclude linux-2.3.99pre8-linus/fs/cramfs/inode.c linux-2.3.99pre8+lock/fs/cramfs/inode.c --- linux-2.3.99pre8-linus/fs/cramfs/inode.c Mon May 15 07:59:24 2000 +++ linux-2.3.99pre8+lock/fs/cramfs/inode.c Sat May 20 04:15:45 2000 @@ -348,6 +348,7 @@ static struct file_operations cramfs_directory_operations = { read: generic_read_dir, readdir: cramfs_readdir, + fasync: file_fasync, }; static struct inode_operations cramfs_dir_inode_operations = { diff -urNX ../exclude linux-2.3.99pre8-linus/fs/devfs/base.c linux-2.3.99pre8+lock/fs/devfs/base.c --- linux-2.3.99pre8-linus/fs/devfs/base.c Mon May 15 07:59:24 2000 +++ linux-2.3.99pre8+lock/fs/devfs/base.c Sat May 20 04:16:26 2000 @@ -724,6 +724,7 @@ read: devfsd_read, ioctl: devfsd_ioctl, release: devfsd_close, + fasync: file_fasync, }; @@ -2546,6 +2547,7 @@ read: devfs_read, readdir: devfs_readdir, open: devfs_open, + fasync: file_fasync, }; diff -urNX ../exclude linux-2.3.99pre8-linus/fs/devpts/root.c linux-2.3.99pre8+lock/fs/devpts/root.c --- linux-2.3.99pre8-linus/fs/devpts/root.c Mon May 15 07:59:24 2000 +++ linux-2.3.99pre8+lock/fs/devpts/root.c Sat May 20 04:15:12 2000 @@ -23,6 +23,7 @@ struct file_operations devpts_root_operations = { read: generic_read_dir, readdir: devpts_root_readdir, + fasync: file_fasync, }; struct inode_operations devpts_root_inode_operations = { diff -urNX ../exclude linux-2.3.99pre8-linus/fs/efs/dir.c linux-2.3.99pre8+lock/fs/efs/dir.c --- linux-2.3.99pre8-linus/fs/efs/dir.c Sun Mar 12 12:03:14 2000 +++ linux-2.3.99pre8+lock/fs/efs/dir.c Sat May 20 04:15:18 2000 @@ -11,6 +11,7 @@ struct file_operations efs_dir_operations = { read: generic_read_dir, readdir: efs_readdir, + fasync: file_fasync, }; struct inode_operations efs_dir_inode_operations = { diff -urNX ../exclude linux-2.3.99pre8-linus/fs/ext2/dir.c linux-2.3.99pre8+lock/fs/ext2/dir.c --- linux-2.3.99pre8-linus/fs/ext2/dir.c Sun Mar 19 23:55:33 2000 +++ linux-2.3.99pre8+lock/fs/ext2/dir.c Sat May 20 03:47:17 2000 @@ -27,6 +27,7 @@ readdir: ext2_readdir, ioctl: ext2_ioctl, fsync: ext2_sync_file, + fasync: file_fasync, }; int ext2_check_dir_entry (const char * function, struct inode * dir, diff -urNX ../exclude linux-2.3.99pre8-linus/fs/fat/dir.c linux-2.3.99pre8+lock/fs/fat/dir.c --- linux-2.3.99pre8-linus/fs/fat/dir.c Sun Mar 12 12:03:14 2000 +++ linux-2.3.99pre8+lock/fs/fat/dir.c Sat May 20 04:00:06 2000 @@ -39,6 +39,7 @@ readdir: fat_readdir, ioctl: fat_dir_ioctl, fsync: file_fsync, + fasync: file__fasync, }; /* diff -urNX ../exclude linux-2.3.99pre8-linus/fs/hfs/dir_cap.c linux-2.3.99pre8+lock/fs/hfs/dir_cap.c --- linux-2.3.99pre8-linus/fs/hfs/dir_cap.c Sun Mar 12 12:03:14 2000 +++ linux-2.3.99pre8+lock/fs/hfs/dir_cap.c Sat May 20 04:14:40 2000 @@ -61,6 +61,7 @@ read: generic_read_dir, readdir: cap_readdir, fsync: file_fsync, + fasync: file_fasync, }; struct inode_operations hfs_cap_ndir_inode_operations = { diff -urNX ../exclude linux-2.3.99pre8-linus/fs/hfs/dir_dbl.c linux-2.3.99pre8+lock/fs/hfs/dir_dbl.c --- linux-2.3.99pre8-linus/fs/hfs/dir_dbl.c Sun Mar 12 12:03:14 2000 +++ linux-2.3.99pre8+lock/fs/hfs/dir_dbl.c Sat May 20 04:14:47 2000 @@ -60,6 +60,7 @@ read: generic_read_dir, readdir: dbl_readdir, fsync: file_fsync, + fasync: file_fasync, }; struct inode_operations hfs_dbl_dir_inode_operations = { diff -urNX ../exclude linux-2.3.99pre8-linus/fs/hfs/dir_nat.c linux-2.3.99pre8+lock/fs/hfs/dir_nat.c --- linux-2.3.99pre8-linus/fs/hfs/dir_nat.c Sun Mar 12 12:03:14 2000 +++ linux-2.3.99pre8+lock/fs/hfs/dir_nat.c Sat May 20 04:14:53 2000 @@ -66,6 +66,7 @@ read: generic_read_dir, readdir: nat_readdir, fsync: file_fsync, + fasync: file_fasync, }; struct inode_operations hfs_nat_ndir_inode_operations = { diff -urNX ../exclude linux-2.3.99pre8-linus/fs/hpfs/inode.c linux-2.3.99pre8+lock/fs/hpfs/inode.c --- linux-2.3.99pre8-linus/fs/hpfs/inode.c Thu Mar 16 02:05:37 2000 +++ linux-2.3.99pre8+lock/fs/hpfs/inode.c Sat May 20 04:00:28 2000 @@ -32,6 +32,7 @@ open: hpfs_open, release: hpfs_dir_release, fsync: hpfs_file_fsync, + fasync: file_fasync, }; static struct inode_operations hpfs_dir_iops = diff -urNX ../exclude linux-2.3.99pre8-linus/fs/isofs/dir.c linux-2.3.99pre8+lock/fs/isofs/dir.c --- linux-2.3.99pre8-linus/fs/isofs/dir.c Mon May 15 07:59:25 2000 +++ linux-2.3.99pre8+lock/fs/isofs/dir.c Sat May 20 04:00:35 2000 @@ -30,6 +30,7 @@ { read: generic_read_dir, readdir: isofs_readdir, + fasync: file_fasync, }; /* diff -urNX ../exclude linux-2.3.99pre8-linus/fs/minix/dir.c linux-2.3.99pre8+lock/fs/minix/dir.c --- linux-2.3.99pre8-linus/fs/minix/dir.c Sun Mar 12 12:03:14 2000 +++ linux-2.3.99pre8+lock/fs/minix/dir.c Sat May 20 04:00:40 2000 @@ -18,6 +18,7 @@ read: generic_read_dir, readdir: minix_readdir, fsync: file_fsync, + fasync: file_fasync; }; static int minix_readdir(struct file * filp, diff -urNX ../exclude linux-2.3.99pre8-linus/fs/namei.c linux-2.3.99pre8+lock/fs/namei.c --- linux-2.3.99pre8-linus/fs/namei.c Mon May 15 07:59:25 2000 +++ linux-2.3.99pre8+lock/fs/namei.c Sat May 20 04:42:06 2000 @@ -851,6 +851,9 @@ error = dir->i_op->create(dir, dentry, mode); exit_lock: up(&dir->i_zombie); + if (!error) { + inode_send_fasync(dir); + } return error; } @@ -1068,8 +1076,12 @@ DQUOT_INIT(dir); error = dir->i_op->mknod(dir, dentry, mode, dev); + exit_lock: up(&dir->i_zombie); + if (!error) { + inode_send_fasync(dir); + } return error; } @@ -1137,6 +1149,9 @@ exit_lock: up(&dir->i_zombie); + if (!error) { + inode_send_fasync(dir); + } return error; } @@ -1220,6 +1235,9 @@ dentry->d_inode->i_flags |= S_DEAD; double_up(&dir->i_zombie, &dentry->d_inode->i_zombie); dput(dentry); + if (!error) { + inode_send_fasync(dir); + } return error; } @@ -1279,6 +1297,9 @@ } } up(&dir->i_zombie); + if (!error) { + inode_send_fasync(dir); + } return error; } @@ -1345,6 +1366,9 @@ exit_lock: up(&dir->i_zombie); + if (!error) { + inode_send_fasync(dir); + } return error; } @@ -1417,6 +1441,9 @@ exit_lock: up(&dir->i_zombie); + if (!error) { + inode_send_fasync(dir); + } return error; } @@ -1615,10 +1642,16 @@ int vfs_rename(struct inode *old_dir, struct dentry *old_dentry, struct inode *new_dir, struct dentry *new_dentry) { + int error; if (S_ISDIR(old_dentry->d_inode->i_mode)) - return vfs_rename_dir(old_dir,old_dentry,new_dir,new_dentry); + error = vfs_rename_dir(old_dir,old_dentry,new_dir,new_dentry); else - return vfs_rename_other(old_dir,old_dentry,new_dir,new_dentry); + error = vfs_rename_other(old_dir,old_dentry,new_dir,new_dentry); + if (!error) { + inode_send_fasync(old_dir); + inode_send_fasync(new_dir); + } + return error; } static inline int do_rename(const char * oldname, const char * newname) diff -urNX ../exclude linux-2.3.99pre8-linus/fs/ncpfs/dir.c linux-2.3.99pre8+lock/fs/ncpfs/dir.c --- linux-2.3.99pre8-linus/fs/ncpfs/dir.c Sun Mar 12 12:03:45 2000 +++ linux-2.3.99pre8+lock/fs/ncpfs/dir.c Sat May 20 04:09:58 2000 @@ -49,6 +49,7 @@ read: generic_read_dir, readdir: ncp_readdir, ioctl: ncp_ioctl, + fasync: file_fasync, }; struct inode_operations ncp_dir_inode_operations = diff -urNX ../exclude linux-2.3.99pre8-linus/fs/nfs/dir.c linux-2.3.99pre8+lock/fs/nfs/dir.c --- linux-2.3.99pre8-linus/fs/nfs/dir.c Mon May 15 07:58:45 2000 +++ linux-2.3.99pre8+lock/fs/nfs/dir.c Sat May 20 04:00:34 2000 @@ -54,6 +54,7 @@ readdir: nfs_readdir, open: nfs_open, release: nfs_release, + fasync: file_fasync, }; struct inode_operations nfs_dir_inode_operations = { diff -urNX ../exclude linux-2.3.99pre8-linus/fs/ntfs/fs.c linux-2.3.99pre8+lock/fs/ntfs/fs.c --- linux-2.3.99pre8-linus/fs/ntfs/fs.c Mon May 15 07:59:25 2000 +++ linux-2.3.99pre8+lock/fs/ntfs/fs.c Sat May 20 04:15:07 2000 @@ -577,6 +577,7 @@ static struct file_operations ntfs_dir_operations = { read: generic_read_dir, readdir: ntfs_readdir, + fasync: file_fasync, }; static struct inode_operations ntfs_dir_inode_operations = { diff -urNX ../exclude linux-2.3.99pre8-linus/fs/open.c linux-2.3.99pre8+lock/fs/open.c --- linux-2.3.99pre8-linus/fs/open.c Mon May 15 07:59:25 2000 +++ linux-2.3.99pre8+lock/fs/open.c Sat May 20 04:34:08 2000 @@ -661,6 +661,7 @@ if (error) goto cleanup_all; } + inode_send_fasync(dentry->d_parent->d_inode); f->f_flags &= ~(O_CREAT | O_EXCL | O_NOCTTY | O_TRUNC); return f; @@ -817,6 +818,7 @@ retval = 0; if (filp->f_op && filp->f_op->flush) retval = filp->f_op->flush(filp); + file_fasync(-1, filp, 0); locks_remove_posix(filp, id); fput(filp); return retval; diff -urNX ../exclude linux-2.3.99pre8-linus/fs/openpromfs/inode.c linux-2.3.99pre8+lock/fs/openpromfs/inode.c --- linux-2.3.99pre8-linus/fs/openpromfs/inode.c Tue Apr 25 02:11:49 2000 +++ linux-2.3.99pre8+lock/fs/openpromfs/inode.c Sat May 20 04:15:39 2000 @@ -565,6 +565,7 @@ static struct file_operations openprom_operations = { read: generic_read_dir, readdir: openpromfs_readdir, + fasync: file_fasync, }; static struct inode_operations openprom_alias_inode_operations = { diff -urNX ../exclude linux-2.3.99pre8-linus/fs/pipe.c linux-2.3.99pre8+lock/fs/pipe.c --- linux-2.3.99pre8-linus/fs/pipe.c Mon May 15 07:59:25 2000 +++ linux-2.3.99pre8+lock/fs/pipe.c Sat May 20 04:00:59 2000 @@ -388,6 +388,7 @@ ioctl: pipe_ioctl, open: pipe_read_open, release: pipe_read_release, + fasync: file_fasync, }; struct file_operations write_fifo_fops = { @@ -398,6 +399,7 @@ ioctl: pipe_ioctl, open: pipe_write_open, release: pipe_write_release, + fasync: file_fasync, }; struct file_operations rdwr_fifo_fops = { @@ -408,6 +410,7 @@ ioctl: pipe_ioctl, open: pipe_rdwr_open, release: pipe_rdwr_release, + fasync: file_fasync, }; struct file_operations read_pipe_fops = { @@ -418,6 +421,7 @@ ioctl: pipe_ioctl, open: pipe_read_open, release: pipe_read_release, + fasync: file_fasync, }; struct file_operations write_pipe_fops = { @@ -438,6 +442,7 @@ ioctl: pipe_ioctl, open: pipe_rdwr_open, release: pipe_rdwr_release, + fasync: file_fasync, }; struct inode* pipe_new(struct inode* inode) diff -urNX ../exclude linux-2.3.99pre8-linus/fs/proc/base.c linux-2.3.99pre8+lock/fs/proc/base.c --- linux-2.3.99pre8-linus/fs/proc/base.c Mon May 15 07:59:25 2000 +++ linux-2.3.99pre8+lock/fs/proc/base.c Sat May 20 04:00:43 2000 @@ -855,6 +855,7 @@ static struct file_operations proc_base_operations = { read: generic_read_dir, readdir: proc_base_readdir, + fasync: file_fasync, }; static struct inode_operations proc_base_inode_operations = { diff -urNX ../exclude linux-2.3.99pre8-linus/fs/proc/generic.c linux-2.3.99pre8+lock/fs/proc/generic.c --- linux-2.3.99pre8-linus/fs/proc/generic.c Mon May 15 07:59:25 2000 +++ linux-2.3.99pre8+lock/fs/proc/generic.c Sat May 20 04:18:28 2000 @@ -331,6 +331,7 @@ */ static struct file_operations proc_dir_operations = { readdir: proc_readdir, + fasync: file_fasync, }; /* diff -urNX ../exclude linux-2.3.99pre8-linus/fs/proc/root.c linux-2.3.99pre8+lock/fs/proc/root.c --- linux-2.3.99pre8-linus/fs/proc/root.c Mon May 15 07:59:25 2000 +++ linux-2.3.99pre8+lock/fs/proc/root.c Sat May 20 04:00:45 2000 @@ -111,7 +111,8 @@ * directory handling functions for that.. */ static struct file_operations proc_root_operations = { - readdir: proc_root_readdir, + readdir: proc_root_readdir, + fasync: file_fasync, }; /* diff -urNX ../exclude linux-2.3.99pre8-linus/fs/qnx4/dir.c linux-2.3.99pre8+lock/fs/qnx4/dir.c --- linux-2.3.99pre8-linus/fs/qnx4/dir.c Sun Mar 12 12:03:15 2000 +++ linux-2.3.99pre8+lock/fs/qnx4/dir.c Sat May 20 04:14:25 2000 @@ -83,6 +83,7 @@ read: generic_read_dir, readdir: qnx4_readdir, fsync: file_fsync, + fasync: file_fasync, }; struct inode_operations qnx4_dir_inode_operations = diff -urNX ../exclude linux-2.3.99pre8-linus/fs/ramfs/inode.c linux-2.3.99pre8+lock/fs/ramfs/inode.c --- linux-2.3.99pre8-linus/fs/ramfs/inode.c Mon May 15 07:59:25 2000 +++ linux-2.3.99pre8+lock/fs/ramfs/inode.c Sat May 20 04:16:13 2000 @@ -336,6 +336,7 @@ static struct file_operations ramfs_dir_operations = { read: generic_read_dir, readdir: ramfs_readdir, + fasync: file_fasync, }; static struct inode_operations ramfs_dir_inode_operations = { diff -urNX ../exclude linux-2.3.99pre8-linus/fs/read_write.c linux-2.3.99pre8+lock/fs/read_write.c --- linux-2.3.99pre8-linus/fs/read_write.c Tue Apr 25 02:13:26 2000 +++ linux-2.3.99pre8+lock/fs/read_write.c Sat May 20 04:39:32 2000 @@ -132,6 +132,8 @@ ret = read(file, buf, count, &file->f_pos); } } + if (!ret) + inode_send_fasync(file->f_dentry->d_parent->d_inode); fput(file); } return ret; @@ -156,6 +158,8 @@ ret = write(file, buf, count, &file->f_pos); } } + if (!ret) + inode_send_fasync(file->f_dentry->d_parent->d_inode); fput(file); } return ret; @@ -264,6 +268,8 @@ if (file->f_op && (file->f_mode & FMODE_READ) && (file->f_op->readv || file->f_op->read)) ret = do_readv_writev(VERIFY_WRITE, file, vector, count); + if (!ret) + inode_send_fasync(file->f_dentry->d_parent->d_inode); fput(file); bad_file: @@ -284,6 +290,8 @@ if (file->f_op && (file->f_mode & FMODE_WRITE) && (file->f_op->writev || file->f_op->write)) ret = do_readv_writev(VERIFY_READ, file, vector, count); + if (!ret) + inode_send_fasync(file->f_dentry->d_parent->d_inode); fput(file); bad_file: @@ -317,6 +325,8 @@ if (pos < 0) goto out; ret = read(file, buf, count, &pos); + if (!ret) + inode_send_fasync(file->f_dentry->d_parent->d_inode); out: fput(file); bad_file: @@ -347,6 +357,8 @@ goto out; ret = write(file, buf, count, &pos); + if (!ret) + inode_send_fasync(file->f_dentry->d_parent->d_inode); out: fput(file); bad_file: diff -urNX ../exclude linux-2.3.99pre8-linus/fs/romfs/inode.c linux-2.3.99pre8+lock/fs/romfs/inode.c --- linux-2.3.99pre8-linus/fs/romfs/inode.c Mon May 15 07:59:25 2000 +++ linux-2.3.99pre8+lock/fs/romfs/inode.c Sat May 20 04:14:00 2000 @@ -434,6 +434,7 @@ static struct file_operations romfs_dir_operations = { read: generic_read_dir, readdir: romfs_readdir, + fasync: file_fasync, }; static struct inode_operations romfs_dir_inode_operations = { diff -urNX ../exclude linux-2.3.99pre8-linus/fs/smbfs/dir.c linux-2.3.99pre8+lock/fs/smbfs/dir.c --- linux-2.3.99pre8-linus/fs/smbfs/dir.c Sun Mar 12 12:03:45 2000 +++ linux-2.3.99pre8+lock/fs/smbfs/dir.c Sat May 20 04:00:14 2000 @@ -35,6 +35,7 @@ readdir: smb_readdir, ioctl: smb_ioctl, open: smb_dir_open, + fasync: file_fasync, }; struct inode_operations smb_dir_inode_operations = diff -urNX ../exclude linux-2.3.99pre8-linus/fs/sysv/dir.c linux-2.3.99pre8+lock/fs/sysv/dir.c --- linux-2.3.99pre8-linus/fs/sysv/dir.c Sun Mar 12 12:03:15 2000 +++ linux-2.3.99pre8+lock/fs/sysv/dir.c Sat May 20 04:00:22 2000 @@ -25,6 +25,7 @@ read: generic_read_dir, readdir: sysv_readdir, fsync: file_fsync, + fasync: file_fasync, }; static int sysv_readdir(struct file * filp, void * dirent, filldir_t filldir) diff -urNX ../exclude linux-2.3.99pre8-linus/fs/udf/dir.c linux-2.3.99pre8+lock/fs/udf/dir.c --- linux-2.3.99pre8-linus/fs/udf/dir.c Sun Mar 12 12:03:30 2000 +++ linux-2.3.99pre8+lock/fs/udf/dir.c Sat May 20 04:15:26 2000 @@ -53,6 +53,7 @@ readdir: udf_readdir, ioctl: udf_ioctl, fsync: udf_sync_file, + fasync: file_fasync, }; /* diff -urNX ../exclude linux-2.3.99pre8-linus/fs/ufs/dir.c linux-2.3.99pre8+lock/fs/ufs/dir.c --- linux-2.3.99pre8-linus/fs/ufs/dir.c Sun Mar 19 23:55:33 2000 +++ linux-2.3.99pre8+lock/fs/ufs/dir.c Sat May 20 04:10:11 2000 @@ -181,4 +181,5 @@ read: generic_read_dir, readdir: ufs_readdir, fsync: file_fsync, + fasync: file_fasync, }; diff -urNX ../exclude linux-2.3.99pre8-linus/fs/umsdos/dir.c linux-2.3.99pre8+lock/fs/umsdos/dir.c --- linux-2.3.99pre8-linus/fs/umsdos/dir.c Tue Apr 25 02:13:26 2000 +++ linux-2.3.99pre8+lock/fs/umsdos/dir.c Sat May 20 04:00:32 2000 @@ -789,6 +789,7 @@ read: generic_read_dir, readdir: UMSDOS_readdir, ioctl: UMSDOS_ioctl_dir, + fasync: file_fasync, }; struct inode_operations umsdos_dir_inode_operations = diff -urNX ../exclude linux-2.3.99pre8-linus/fs/umsdos/rdir.c linux-2.3.99pre8+lock/fs/umsdos/rdir.c --- linux-2.3.99pre8-linus/fs/umsdos/rdir.c Sun Mar 12 12:03:45 2000 +++ linux-2.3.99pre8+lock/fs/umsdos/rdir.c Sat May 20 04:00:30 2000 @@ -223,6 +223,7 @@ read: generic_read_dir, readdir: UMSDOS_rreaddir, ioctl: UMSDOS_ioctl_dir, + fasync: file_fasync, }; struct inode_operations umsdos_rdir_inode_operations = diff -urNX ../exclude linux-2.3.99pre8-linus/include/linux/fs.h linux-2.3.99pre8+lock/include/linux/fs.h --- linux-2.3.99pre8-linus/include/linux/fs.h Mon May 15 07:59:26 2000 +++ linux-2.3.99pre8+lock/include/linux/fs.h Sat May 20 04:32:48 2000 @@ -402,6 +403,7 @@ struct dquot *i_dquot[MAXQUOTAS]; struct pipe_inode_info *i_pipe; struct block_device *i_bdev; + struct fasync_struct *i_fasync; unsigned long i_state; @@ -554,6 +559,16 @@ struct file *fa_file; }; +extern void __kill_fasync(struct fasync_struct *, int, int); +extern void kill_fasync(struct fasync_struct **, int, int); +extern int file_fasync(int, struct file *, int); +#define inode_send_fasync(inode) \ + kill_fasync(&inode->i_fasync, SIGIO, POLL_MSG) +#define tty_send_fasync(fa) \ + kill_fasync(fa, SIGIO, POLL_IN) + +extern int fasync_helper(int, struct file *, int, struct fasync_struct **); + struct nameidata { struct dentry *dentry; struct vfsmount *mnt;