X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=fs%2Fnfs%2Finternal.h;h=a28f6ce2e131e4df24e40223ebdc36d7d986da6f;hb=refs%2Fheads%2Fvserver;hp=18febb4c24c17fb9c274f63900a5a923501bb695;hpb=76828883507a47dae78837ab5dec5a5b4513c667;p=linux-2.6.git diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h index 18febb4c2..a28f6ce2e 100644 --- a/fs/nfs/internal.h +++ b/fs/nfs/internal.h @@ -4,30 +4,6 @@ #include -#define NFS_PAGE_WRITING 0 -#define NFS_PAGE_CACHED 1 - -#define PageNfsBit(bit, page) test_bit(bit, &(page)->private) - -#define SetPageNfsBit(bit, page) \ -do { \ - SetPagePrivate((page)); \ - set_bit(bit, &(page)->private); \ -} while(0) - -#define ClearPageNfsBit(bit, page) \ -do { \ - clear_bit(bit, &(page)->private); \ -} while(0) - -#define PageNfsWriting(page) PageNfsBit(NFS_PAGE_WRITING, (page)) -#define SetPageNfsWriting(page) SetPageNfsBit(NFS_PAGE_WRITING, (page)) -#define ClearPageNfsWriting(page) ClearPageNfsBit(NFS_PAGE_WRITING, (page)) - -#define PageNfsCached(page) PageNfsBit(NFS_PAGE_CACHED, (page)) -#define SetPageNfsCached(page) SetPageNfsBit(NFS_PAGE_CACHED, (page)) -#define ClearPageNfsCached(page) ClearPageNfsBit(NFS_PAGE_CACHED, (page)) - struct nfs_string; struct nfs_mount_data; struct nfs4_mount_data; @@ -51,11 +27,6 @@ struct nfs_clone_mount { rpc_authflavor_t authflavor; }; -/* - * include filesystem caching stuff here - */ -#include "fscache.h" - /* client.c */ extern struct rpc_program nfs_program; @@ -122,15 +93,15 @@ extern void nfs_destroy_directcache(void); /* nfs2xdr.c */ extern int nfs_stat_to_errno(int); extern struct rpc_procinfo nfs_procedures[]; -extern u32 * nfs_decode_dirent(u32 *, struct nfs_entry *, int); +extern __be32 * nfs_decode_dirent(__be32 *, struct nfs_entry *, int); /* nfs3xdr.c */ extern struct rpc_procinfo nfs3_procedures[]; -extern u32 *nfs3_decode_dirent(u32 *, struct nfs_entry *, int); +extern __be32 *nfs3_decode_dirent(__be32 *, struct nfs_entry *, int); /* nfs4xdr.c */ #ifdef CONFIG_NFS_V4 -extern u32 *nfs4_decode_dirent(u32 *p, struct nfs_entry *entry, int plus); +extern __be32 *nfs4_decode_dirent(__be32 *p, struct nfs_entry *entry, int plus); #endif /* nfs4proc.c */ @@ -142,6 +113,9 @@ extern int nfs4_proc_fs_locations(struct inode *dir, struct dentry *dentry, struct page *page); #endif +/* dir.c */ +extern int nfs_access_cache_shrinker(int nr_to_scan, gfp_t gfp_mask); + /* inode.c */ extern struct inode *nfs_alloc_inode(struct super_block *sb); extern void nfs_destroy_inode(struct inode *); @@ -179,9 +153,6 @@ extern int nfs4_path_walk(struct nfs_server *server, const char *path); #endif -/* read.c */ -extern int nfs_readpage_async(struct nfs_open_context *, struct inode *, struct page *); - /* * Determine the device name as a string */ @@ -246,3 +217,21 @@ void nfs_super_set_maxbytes(struct super_block *sb, __u64 maxfilesize) if (sb->s_maxbytes > MAX_LFS_FILESIZE || sb->s_maxbytes <= 0) sb->s_maxbytes = MAX_LFS_FILESIZE; } + +/* + * Determine the number of bytes of data the page contains + */ +static inline +unsigned int nfs_page_length(struct page *page) +{ + loff_t i_size = i_size_read(page->mapping->host); + + if (i_size > 0) { + pgoff_t end_index = (i_size - 1) >> PAGE_CACHE_SHIFT; + if (page->index < end_index) + return PAGE_CACHE_SIZE; + if (page->index == end_index) + return ((i_size - 1) & ~PAGE_CACHE_MASK) + 1; + } + return 0; +}