亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? inode.c

?? elinux jffs初始版本 具體了解JFFS的文件系統!
?? C
字號:
/* *  inode.c * *  Copyright (C) 1995, 1996 by Paal-Kr. Engstad and Volker Lendecke * */#include <linux/module.h>#include <asm/system.h>#include <asm/segment.h>#include <linux/sched.h>#include <linux/smb_fs.h>#include <linux/smbno.h>#include <linux/kernel.h>#include <linux/mm.h>#include <linux/string.h>#include <linux/stat.h>#include <linux/errno.h>#include <linux/locks.h>#include <linux/fcntl.h>#include <linux/malloc.h>extern int close_fp(struct file *filp);static void smb_put_inode(struct inode *);static void smb_read_inode(struct inode *);static void smb_put_super(struct super_block *);static void smb_statfs(struct super_block *, struct statfs *, int bufsiz);static struct super_operations smb_sops ={	smb_read_inode,		/* read inode */	smb_notify_change,	/* notify change */	NULL,			/* write inode */	smb_put_inode,		/* put inode */	smb_put_super,		/* put superblock */	NULL,			/* write superblock */	smb_statfs,		/* stat filesystem */	NULL};/* smb_read_inode: Called from iget, it only traverses the allocated   smb_inode_info's and initializes the inode from the data found   there.  It does not allocate or deallocate anything. */static voidsmb_read_inode(struct inode *inode){	/* Our task should be extremely simple here. We only have to	   look up the information somebody else (smb_iget) put into	   the inode tree. */	struct smb_server *server = SMB_SERVER(inode);	struct smb_inode_info *inode_info	= smb_find_inode(server, inode->i_ino);	if (inode_info == NULL)	{		/* Ok, now we're in trouble. The inode info is not		   there. What should we do now??? */		printk("smb_read_inode: inode %ld info not found\n",			inode->i_ino);		return;	}	inode_info->state = SMB_INODE_VALID;	SMB_INOP(inode) = inode_info;	inode->i_mode = inode_info->finfo.f_mode;	inode->i_nlink = inode_info->finfo.f_nlink;	inode->i_uid = inode_info->finfo.f_uid;	inode->i_gid = inode_info->finfo.f_gid;	inode->i_rdev = inode_info->finfo.f_rdev;	inode->i_size = inode_info->finfo.f_size;	inode->i_mtime = inode_info->finfo.f_mtime;	inode->i_ctime = inode_info->finfo.f_ctime;	inode->i_atime = inode_info->finfo.f_atime;	inode->i_blksize = inode_info->finfo.f_blksize;	inode->i_blocks = inode_info->finfo.f_blocks;	if (S_ISREG(inode->i_mode))	{		inode->i_op = &smb_file_inode_operations;	} else if (S_ISDIR(inode->i_mode))	{		inode->i_op = &smb_dir_inode_operations;	} else	{		inode->i_op = NULL;	}}static voidsmb_put_inode(struct inode *inode){	struct smb_server *server = SMB_SERVER(inode);	struct smb_inode_info *info = SMB_INOP(inode);	__u32 mtime = inode->i_mtime;	if (inode->i_count > 1) {		printk("smb_put_inode: in use device %s, inode %ld count=%ld\n",			kdevname(inode->i_dev), inode->i_ino, inode->i_count);		return;	}	if (S_ISDIR(inode->i_mode))	{		smb_invalid_dir_cache(inode->i_ino);	} else	{		/*		 * Clear the length so the info structure can't be found.		 */		info->finfo.len = 0;	}	clear_inode(inode);	/*	 * We don't want the inode to be reused as free if we block here,	 * so temporarily increment i_count.	 */	inode->i_count++;	if (info) {		if (info->finfo.opened != 0)		{			if (smb_proc_close(server, info->finfo.fileid, mtime))			{				/* We can't do anything but complain. */				printk("smb_put_inode: could not close %s\n",					info->finfo.name);			}		}		smb_free_inode_info(info);	} else		printk("smb_put_inode: no inode info??\n");	inode->i_count--;}static voidsmb_put_super(struct super_block *sb){	struct smb_server *server = &(SMB_SBP(sb)->s_server);	smb_proc_disconnect(server);	smb_dont_catch_keepalive(server);	close_fp(server->sock_file);	lock_super(sb);	smb_free_all_inodes(server);	smb_vfree(server->packet);	server->packet = NULL;	sb->s_dev = 0;	smb_kfree_s(SMB_SBP(sb), sizeof(struct smb_sb_info));	unlock_super(sb);	MOD_DEC_USE_COUNT;}struct smb_mount_data_v4{	int version;	unsigned int fd;	uid_t mounted_uid;	struct sockaddr_in addr;	char server_name[17];	char client_name[17];	char service[64];	char root_path[64];	char username[64];	char password[64];	unsigned short max_xmit;	uid_t uid;	gid_t gid;	mode_t file_mode;	mode_t dir_mode;};static intsmb_get_mount_data(struct smb_mount_data *target, void *source){	struct smb_mount_data_v4 *v4 = (struct smb_mount_data_v4 *) source;	struct smb_mount_data *cur = (struct smb_mount_data *) source;	if (source == NULL)	{		return 1;	}	if (cur->version == SMB_MOUNT_VERSION)	{		memcpy(target, cur, sizeof(struct smb_mount_data));		return 0;	}	if (v4->version == 4)	{		target->version = 5;		target->fd = v4->fd;		target->mounted_uid = v4->mounted_uid;		target->addr = v4->addr;		memcpy(target->server_name, v4->server_name, 17);		memcpy(target->client_name, v4->client_name, 17);		memcpy(target->service, v4->service, 64);		memcpy(target->root_path, v4->root_path, 64);		memcpy(target->username, v4->username, 64);		memcpy(target->password, v4->password, 64);		target->max_xmit = v4->max_xmit;		target->uid = v4->uid;		target->gid = v4->gid;		target->file_mode = v4->file_mode;		target->dir_mode = v4->dir_mode;		memset(target->domain, 0, 64);		strcpy(target->domain, "?");		return 0;	}	return 1;}struct super_block *smb_read_super(struct super_block *sb, void *raw_data, int silent){	struct smb_mount_data data;	struct smb_server *server;	struct smb_sb_info *smb_sb;	unsigned int fd;	struct file *filp;	kdev_t dev = sb->s_dev;	int error;	MOD_INC_USE_COUNT;	if (smb_get_mount_data(&data, raw_data) != 0)	{		printk("smb_read_super: wrong data argument\n");		sb->s_dev = 0;		MOD_DEC_USE_COUNT;		return NULL;	}	fd = data.fd;	if (fd >= NR_OPEN || !(filp = current->files->fd[fd]))	{		printk("smb_read_super: invalid file descriptor\n");		sb->s_dev = 0;		MOD_DEC_USE_COUNT;		return NULL;	}	if (!S_ISSOCK(filp->f_inode->i_mode))	{		printk("smb_read_super: not a socket!\n");		sb->s_dev = 0;		MOD_DEC_USE_COUNT;		return NULL;	}	/* We must malloc our own super-block info */	smb_sb = (struct smb_sb_info *) smb_kmalloc(sizeof(struct smb_sb_info),						    GFP_KERNEL);	if (smb_sb == NULL)	{		printk("smb_read_super: could not alloc smb_sb_info\n");		sb->s_dev = 0;		MOD_DEC_USE_COUNT;		return NULL;	}	filp->f_count += 1;	lock_super(sb);	SMB_SBP(sb) = smb_sb;	sb->s_blocksize = 1024;	/* Eh...  Is this correct? */	sb->s_blocksize_bits = 10;	sb->s_magic = SMB_SUPER_MAGIC;	sb->s_dev = dev;	sb->s_op = &smb_sops;	server = &(SMB_SBP(sb)->s_server);	server->sock_file = filp;	server->lock = 0;	server->wait = NULL;	server->packet = NULL;	server->max_xmit = data.max_xmit;	if (server->max_xmit <= 0)	{		server->max_xmit = SMB_DEF_MAX_XMIT;	}	server->tid = 0;	server->pid = current->pid;	server->mid = current->pid + 20;	server->m = data;	server->m.file_mode = (server->m.file_mode &			       (S_IRWXU | S_IRWXG | S_IRWXO)) | S_IFREG;	server->m.dir_mode = (server->m.dir_mode &			      (S_IRWXU | S_IRWXG | S_IRWXO)) | S_IFDIR;	smb_init_root(server);	error = smb_proc_connect(server);	unlock_super(sb);	if (error < 0)	{		sb->s_dev = 0;		DPRINTK("smb_read_super: Failed connection, bailing out "			"(error = %d).\n", -error);		goto fail;	}	if (server->protocol >= PROTOCOL_LANMAN2)	{		server->case_handling = CASE_DEFAULT;	} else	{		server->case_handling = CASE_LOWER;	}	if ((error = smb_proc_dskattr(sb, &(SMB_SBP(sb)->s_attr))) < 0)	{		sb->s_dev = 0;		printk("smb_read_super: could not get super block "		       "attributes\n");		goto fail;	}	smb_init_root_dirent(server, &(server->root.finfo));	if (!(sb->s_mounted = iget(sb, smb_info_ino(&(server->root)))))	{		sb->s_dev = 0;		printk("smb_read_super: get root inode failed\n");		goto fail;	}	return sb;      fail:	if (server->packet != NULL)	{		smb_vfree(server->packet);		server->packet = NULL;	}	filp->f_count -= 1;	smb_dont_catch_keepalive(server);	smb_kfree_s(SMB_SBP(sb), sizeof(struct smb_sb_info));	MOD_DEC_USE_COUNT;	return NULL;}static voidsmb_statfs(struct super_block *sb, struct statfs *buf, int bufsiz){	int error;	struct smb_dskattr attr;	struct statfs tmp;	error = smb_proc_dskattr(sb, &attr);	if (error)	{		printk("smb_statfs: dskattr error = %d\n", -error);		attr.total = attr.allocblocks = attr.blocksize =		    attr.free = 0;	}	tmp.f_type = SMB_SUPER_MAGIC;	tmp.f_bsize = attr.blocksize * attr.allocblocks;	tmp.f_blocks = attr.total;	tmp.f_bfree = attr.free;	tmp.f_bavail = attr.free;	tmp.f_files = -1;	tmp.f_ffree = -1;	tmp.f_namelen = SMB_MAXPATHLEN;	memcpy_tofs(buf, &tmp, bufsiz);}intsmb_notify_change(struct inode *inode, struct iattr *attr){	int error = 0;	if ((error = inode_change_ok(inode, attr)) < 0)		return error;	if (((attr->ia_valid & ATTR_UID) &&	     (attr->ia_uid != SMB_SERVER(inode)->m.uid)))		return -EPERM;	if (((attr->ia_valid & ATTR_GID) &&	     (attr->ia_gid != SMB_SERVER(inode)->m.gid)))		return -EPERM;	if (attr->ia_valid & ATTR_MODE) {		struct smb_dirent *fold = SMB_FINFO(inode);		struct smb_dirent finfo;		if (attr->ia_mode & ~(S_IFREG | S_IFDIR |				      S_IRWXU | S_IRWXG | S_IRWXO))			return -EPERM;		memset((char *)&finfo, 0, sizeof(finfo));		finfo.attr = fold->attr;		if((attr->ia_mode & 0200) == 0)		    finfo.attr |= aRONLY;		else		    finfo.attr &= ~aRONLY;		if ((error = smb_proc_setattr(SMB_SERVER(inode),					      inode, &finfo)) >= 0)		{			fold->attr = finfo.attr;			if ((attr->ia_mode & 0200) == 0)				inode->i_mode &= ~0222;			else				inode->i_mode |= 0222;		}	}	if ((attr->ia_valid & ATTR_SIZE) != 0)	{		if ((error = smb_make_open(inode, O_WRONLY)) < 0)			goto fail;		if ((error = smb_proc_trunc(SMB_SERVER(inode),					    SMB_FINFO(inode)->fileid,					    attr->ia_size)) < 0)			goto fail;	}	/* ATTR_CTIME and ATTR_ATIME can not be set via SMB, so ignore it. */	if (attr->ia_valid & ATTR_MTIME)	{		if (smb_make_open(inode, O_WRONLY) != 0)			error = -EACCES;		else			inode->i_mtime = attr->ia_mtime;	}      fail:	smb_invalid_dir_cache(smb_info_ino(SMB_INOP(inode)->dir));	return error;}#ifdef DEBUG_SMB_MALLOCint smb_malloced;int smb_current_kmalloced;int smb_current_vmalloced;#endifstatic struct file_system_type smb_fs_type ={	smb_read_super, "smbfs", 0, NULL};intinit_smb_fs(void){	return register_filesystem(&smb_fs_type);}#ifdef MODULEintinit_module(void){	int status;	DPRINTK("smbfs: init_module called\n");#ifdef DEBUG_SMB_MALLOC	smb_malloced = 0;	smb_current_kmalloced = 0;	smb_current_vmalloced = 0;#endif	smb_init_dir_cache();	if ((status = init_smb_fs()) == 0)		register_symtab(0);	return status;}voidcleanup_module(void){	DPRINTK("smbfs: cleanup_module called\n");	smb_free_dir_cache();	unregister_filesystem(&smb_fs_type);#ifdef DEBUG_SMB_MALLOC	printk("smb_malloced: %d\n", smb_malloced);	printk("smb_current_kmalloced: %d\n", smb_current_kmalloced);	printk("smb_current_vmalloced: %d\n", smb_current_vmalloced);#endif}#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产乱码久久久久久老虎| 午夜精品免费在线观看| 亚洲尤物在线视频观看| 国内精品嫩模私拍在线| 欧美在线免费播放| 国产香蕉久久精品综合网| 亚洲一区在线观看免费观看电影高清| 国产一区二区伦理| 欧美二区乱c少妇| 亚洲精品水蜜桃| 成人午夜私人影院| 精品久久久久久久久久久久久久久久久 | 欧美高清dvd| 亚洲视频免费在线观看| 国产91在线观看| 日韩三级精品电影久久久| 亚洲国产精品久久不卡毛片| 99re这里都是精品| 国产精品视频一二三| 韩国v欧美v日本v亚洲v| 日韩精品中午字幕| 美女视频第一区二区三区免费观看网站 | 国产一区二区三区免费看 | 日本丰满少妇一区二区三区| 国产日韩欧美综合一区| 国产在线不卡视频| 精品欧美一区二区三区精品久久| 日韩电影在线观看电影| 欧美精品在线观看播放| 日韩精品亚洲一区| 7777精品久久久大香线蕉| 亚洲一区二区三区四区在线免费观看| 99精品久久只有精品| 一区在线观看视频| 色综合色狠狠综合色| 成人免费在线观看入口| 91在线国内视频| 亚洲精品第1页| 欧美日本视频在线| 美女视频黄免费的久久| 精品欧美乱码久久久久久| 国内精品国产成人国产三级粉色| 久久综合资源网| 盗摄精品av一区二区三区| 中文字幕中文字幕在线一区 | 欧美日韩久久一区二区| 日韩精品一二三区| 久久综合九色综合97婷婷女人 | 青青青伊人色综合久久| 日韩一区二区在线观看视频| 国内精品久久久久影院薰衣草| 国产女人18毛片水真多成人如厕| 成人午夜av在线| 亚洲国产精品麻豆| 日韩欧美电影一区| 丰满亚洲少妇av| 亚洲制服丝袜av| 精品国产亚洲在线| 91香蕉视频黄| 美女一区二区久久| 一区二区中文字幕在线| 欧美久久免费观看| 国产盗摄精品一区二区三区在线 | 久久蜜桃一区二区| www.成人在线| 日本成人在线看| 国产精品福利电影一区二区三区四区| 欧美优质美女网站| 国产一区不卡精品| 亚洲一区av在线| 久久色在线观看| 精品视频一区三区九区| 国产精品中文字幕一区二区三区| 亚洲精品高清视频在线观看| 欧美不卡一区二区三区| 日本韩国精品在线| 国产福利精品一区二区| 亚洲成人免费观看| 国产精品成人网| 日韩精品一区二区三区四区视频 | 91精品久久久久久蜜臀| 成人av资源下载| 裸体在线国模精品偷拍| 亚洲人精品一区| 久久久久久久一区| 91精品欧美综合在线观看最新| 99久久夜色精品国产网站| 精品亚洲成av人在线观看| 亚洲综合色区另类av| 中文字幕免费观看一区| 欧美大片拔萝卜| 777奇米成人网| 在线观看日韩毛片| 91色在线porny| 懂色av一区二区三区蜜臀| 久久69国产一区二区蜜臀| 亚洲地区一二三色| 亚洲精品第1页| 18欧美亚洲精品| 日本一区二区成人在线| 久久久久久久久久久久久女国产乱| 欧美日韩日日夜夜| 欧美视频在线一区| 91行情网站电视在线观看高清版| 丰满亚洲少妇av| 国产福利精品一区二区| 国产老妇另类xxxxx| 精品影院一区二区久久久| 日本aⅴ精品一区二区三区| 香蕉久久一区二区不卡无毒影院 | 日本一二三四高清不卡| 久久久精品影视| 国产亚洲视频系列| 久久精品亚洲乱码伦伦中文| 制服丝袜亚洲色图| 日韩一级片网站| 精品黑人一区二区三区久久| 欧美成人精品福利| 精品国产一区二区三区四区四| 欧美成人国产一区二区| 久久嫩草精品久久久精品| 国产人妖乱国产精品人妖| 欧美国产激情二区三区 | 99九九99九九九视频精品| av中文字幕一区| 色婷婷综合激情| 欧美在线三级电影| 制服丝袜日韩国产| 精品999在线播放| 国产精品日产欧美久久久久| 中文字幕亚洲一区二区va在线| 亚洲免费观看视频| 亚洲va天堂va国产va久| 日韩av电影免费观看高清完整版在线观看| 奇米一区二区三区| 国产精品一二三区在线| av电影在线观看完整版一区二区| 色先锋久久av资源部| 91精品国产色综合久久不卡电影| 亚洲精品在线观看网站| 国产精品超碰97尤物18| 日日夜夜精品视频天天综合网| 国内精品伊人久久久久影院对白| 成人免费毛片嘿嘿连载视频| 欧美自拍偷拍午夜视频| 欧美一区二区久久久| 欧美国产97人人爽人人喊| 亚洲综合色自拍一区| 狠狠色丁香婷婷综合久久片| a4yy欧美一区二区三区| 日本韩国精品在线| 久久影音资源网| 亚洲高清免费在线| 国产91精品久久久久久久网曝门| 欧美曰成人黄网| 久久久久久久久99精品| 性久久久久久久| 波多野结衣91| 日韩视频123| 亚洲欧美一区二区不卡| 麻豆久久一区二区| 在线观看av一区二区| 亚洲精品一区二区在线观看| 亚洲一级在线观看| 成人一级视频在线观看| 欧美一区二区三区免费| 一区二区三区在线免费视频| 国产夫妻精品视频| 91精品欧美综合在线观看最新 | 免费观看成人av| 欧洲激情一区二区| 亚洲国产精品激情在线观看| 免费久久99精品国产| 欧美日韩在线直播| 中文字幕亚洲一区二区va在线| 九九视频精品免费| 欧美高清www午色夜在线视频| 亚洲精品国产精品乱码不99| 东方aⅴ免费观看久久av| 欧美精品一区二区久久婷婷 | 亚洲一区二区在线免费观看视频| 国产精品18久久久久久vr| 777亚洲妇女| 午夜伊人狠狠久久| 欧美亚一区二区| 一区二区三区四区视频精品免费 | 一区二区三区精品在线观看| 成人精品免费看| 国产色91在线| 国产激情一区二区三区| 精品福利视频一区二区三区| 蜜臀av国产精品久久久久| 欧美日韩国产大片| 亚洲成va人在线观看| 欧美在线播放高清精品| 亚洲自拍都市欧美小说| 色哟哟精品一区| 亚洲精品久久久久久国产精华液| 色综合久久精品| 亚洲黄色录像片|