diff -urN -X dontdiff linux/fs/buffer.c vmalloc/fs/buffer.c --- linux/fs/buffer.c Mon Dec 20 22:52:57 1999 +++ vmalloc/fs/buffer.c Wed Dec 22 09:02:18 1999 @@ -345,7 +345,6 @@ struct inode * inode; int err; - lock_kernel(); err = -EBADF; file = fget(fd); if (!file) @@ -365,13 +364,14 @@ /* We need to protect against concurrent writers.. */ down(&inode->i_sem); + lock_kernel(); err = file->f_op->fsync(file, dentry); + unlock_kernel(); up(&inode->i_sem); out_putf: fput(file); out: - unlock_kernel(); return err; } @@ -382,7 +382,6 @@ struct inode * inode; int err; - lock_kernel(); err = -EBADF; file = fget(fd); if (!file) @@ -402,13 +401,14 @@ /* this needs further work, at the moment it is identical to fsync() */ down(&inode->i_sem); + lock_kernel(); err = file->f_op->fsync(file, dentry); + unlock_kernel(); up(&inode->i_sem); out_putf: fput(file); out: - unlock_kernel(); return err; } diff -urN -X dontdiff linux/include/linux/mm.h vmalloc/include/linux/mm.h --- linux/include/linux/mm.h Tue Dec 21 00:01:14 1999 +++ vmalloc/include/linux/mm.h Wed Dec 22 09:05:53 1999 @@ -244,8 +244,14 @@ * The following discussion applies only to them. * * A page may belong to an inode's memory mapping. In this case, - * page->inode is the pointer to the inode, and page->offset is the - * file offset of the page (not necessarily a multiple of PAGE_SIZE). + * page->inode is the pointer to the inode, and page->index is the + * file offset of the page in PAGE_CACHE_SIZE (not PAGE_SIZE!) units. + * Although currently (2.3.34) PAGE_SIZE == PAGE_CACHE_SIZE, i.e. there + * happens to be one page per page cache entry and MM code can't hanlde + * anything else, this may well change. The link to the old page->offset + * is given by: + * + * page->index == (page->offset >> PAGE_CACHE_SHIFT); * * A page may have buffers allocated to it. In this case, * page->buffers is a circular list of these buffer heads. Else, .