⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 file.c

📁 elinux jffs初始版本 具体了解JFFS的文件系统!
💻 C
字号:
/* *  linux/fs/nfs/file.c * *  Copyright (C) 1992  Rick Sladkey * *  Changes Copyright (C) 1994 by Florian La Roche *   - Do not copy data too often around in the kernel. *   - In nfs_file_read the return value of kmalloc wasn't checked. *   - Put in a better version of read look-ahead buffering. Original idea *     and implementation by Wai S Kok elekokws@ee.nus.sg. * *  Expire cache on write to a file by Wai S Kok (Oct 1994). * *  Total rewrite of read side for new NFS buffer cache.. Linus. * *  nfs regular file handling functions */#include <linux/sched.h>#include <linux/kernel.h>#include <linux/errno.h>#include <linux/fcntl.h>#include <linux/stat.h>#include <linux/mm.h>#include <linux/nfs_fs.h>#include <linux/malloc.h>#include <linux/pagemap.h>#include <asm/segment.h>#include <asm/system.h>static int nfs_file_mmap(struct inode *, struct file *, struct vm_area_struct *);static int nfs_file_read(struct inode *, struct file *, char *, int);static int nfs_file_write(struct inode *, struct file *, const char *, int);static int nfs_fsync(struct inode *, struct file *);static struct file_operations nfs_file_operations = {	NULL,			/* lseek - default */	nfs_file_read,		/* read */	nfs_file_write,		/* write */	NULL,			/* readdir - bad */	NULL,			/* select - default */	NULL,			/* ioctl - default */	nfs_file_mmap,		/* mmap */	NULL,			/* no special open is needed */	NULL,			/* release */	nfs_fsync,		/* fsync */};struct inode_operations nfs_file_inode_operations = {	&nfs_file_operations,	/* default file operations */	NULL,			/* create */	NULL,			/* lookup */	NULL,			/* link */	NULL,			/* unlink */	NULL,			/* symlink */	NULL,			/* mkdir */	NULL,			/* rmdir */	NULL,			/* mknod */	NULL,			/* rename */	NULL,			/* readlink */	NULL,			/* follow_link */	nfs_readpage,		/* readpage */	NULL,			/* writepage */	NULL,			/* bmap */	NULL			/* truncate */};static inline void revalidate_inode(struct nfs_server * server, struct inode * inode){	struct nfs_fattr fattr;	if (jiffies - NFS_READTIME(inode) < NFS_ATTRTIMEO(inode))		return;	NFS_READTIME(inode) = jiffies;	if (nfs_proc_getattr(server, NFS_FH(inode), &fattr) == 0) {		nfs_refresh_inode(inode, &fattr);		if (fattr.mtime.seconds == NFS_OLDMTIME(inode)) {			if ((NFS_ATTRTIMEO(inode) <<= 1) > server->acregmax)				NFS_ATTRTIMEO(inode) = server->acregmax;			return;		}		NFS_OLDMTIME(inode) = fattr.mtime.seconds;	}	invalidate_inode_pages(inode);}static int nfs_file_read(struct inode * inode, struct file * file,	char * buf, int count){	revalidate_inode(NFS_SERVER(inode), inode);	return generic_file_read(inode, file, buf, count);}static int nfs_file_mmap(struct inode * inode, struct file * file, struct vm_area_struct * vma){	revalidate_inode(NFS_SERVER(inode), inode);	return generic_file_mmap(inode, file, vma);}static int nfs_fsync(struct inode *inode, struct file *file){	return 0;}static int nfs_file_write(struct inode *inode, struct file *file, const char *buf,			  int count){	int result, written, wsize;	struct nfs_fattr fattr;	unsigned long pos;	if (!inode) {		printk("nfs_file_write: inode = NULL\n");		return -EINVAL;	}	if (!S_ISREG(inode->i_mode)) {		printk("nfs_file_write: write to non-file, mode %07o\n",			inode->i_mode);		return -EINVAL;	}	if (count <= 0)		return 0;	pos = file->f_pos;	if (file->f_flags & O_APPEND)		pos = inode->i_size;	wsize = NFS_SERVER(inode)->wsize;	result = 0;	written = 0;	while (written < count) {		int hunk = count - written;		if (hunk >= wsize)			hunk = wsize;		result = nfs_proc_write(inode,			pos, hunk, buf, &fattr);		if (result < 0)			break;		pos += hunk;		buf += hunk;		written += hunk;		if (hunk < wsize)			break;	}	if (!written)		return result;	file->f_pos = pos;	if (pos > inode->i_size)		inode->i_size = pos;	/* Avoid possible Solaris 2.5 nfsd bug */	if (inode->i_ino == fattr.fileid)		nfs_refresh_inode(inode, &fattr);	return written;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -