|
|
1.1 ! root 1: /* ! 2: * linux/fs/proc/inode.c ! 3: * ! 4: * Copyright (C) 1991, 1992 Linus Torvalds ! 5: */ ! 6: ! 7: #include <linux/sched.h> ! 8: #include <linux/proc_fs.h> ! 9: #include <linux/kernel.h> ! 10: #include <linux/mm.h> ! 11: #include <linux/string.h> ! 12: #include <linux/stat.h> ! 13: ! 14: #include <asm/system.h> ! 15: #include <asm/segment.h> ! 16: ! 17: void proc_put_inode(struct inode *inode) ! 18: { ! 19: inode->i_size = 0; ! 20: } ! 21: ! 22: void proc_put_super(struct super_block *sb) ! 23: { ! 24: lock_super(sb); ! 25: sb->s_dev = 0; ! 26: free_super(sb); ! 27: } ! 28: ! 29: static struct super_operations proc_sops = { ! 30: proc_read_inode, ! 31: proc_write_inode, ! 32: proc_put_inode, ! 33: proc_put_super, ! 34: NULL, ! 35: proc_statfs ! 36: }; ! 37: ! 38: struct super_block *proc_read_super(struct super_block *s,void *data) ! 39: { ! 40: int dev=s->s_dev; ! 41: ! 42: lock_super(s); ! 43: s->s_blocksize = 1024; ! 44: s->s_magic = PROC_SUPER_MAGIC; ! 45: s->s_dev = dev; ! 46: s->s_op = &proc_sops; ! 47: free_super(s); ! 48: if (!(s->s_mounted = iget(dev,PROC_ROOT_INO))) { ! 49: s->s_dev=0; ! 50: printk("get root inode failed\n"); ! 51: return NULL; ! 52: } ! 53: return s; ! 54: } ! 55: ! 56: void proc_statfs(struct super_block *sb, struct statfs *buf) ! 57: { ! 58: put_fs_long(PROC_SUPER_MAGIC, &buf->f_type); ! 59: put_fs_long(1024, &buf->f_bsize); ! 60: put_fs_long(0, &buf->f_blocks); ! 61: put_fs_long(0, &buf->f_bfree); ! 62: put_fs_long(0, &buf->f_bavail); ! 63: put_fs_long(0, &buf->f_files); ! 64: put_fs_long(0, &buf->f_ffree); ! 65: /* Don't know what value to put in buf->f_fsid */ ! 66: } ! 67: ! 68: int proc_bmap(struct inode * inode,int block) ! 69: { ! 70: return 0; ! 71: } ! 72: ! 73: int proc_create_block(struct inode * inode, int block) ! 74: { ! 75: return 0; ! 76: } ! 77: ! 78: void proc_read_inode(struct inode * inode) ! 79: { ! 80: unsigned long ino, pid; ! 81: struct task_struct * p; ! 82: int i; ! 83: ! 84: inode->i_op = NULL; ! 85: inode->i_mode = 0; ! 86: inode->i_uid = 0; ! 87: inode->i_gid = 0; ! 88: inode->i_nlink = 1; ! 89: inode->i_size = 0; ! 90: inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME; ! 91: inode->i_blocks = inode->i_blksize = 0; ! 92: ino = inode->i_ino; ! 93: pid = ino >> 16; ! 94: p = task[0]; ! 95: for (i = 0; i < NR_TASKS ; i++) ! 96: if ((p = task[i]) && (p->pid == pid)) ! 97: break; ! 98: if (!p || i >= NR_TASKS) ! 99: return; ! 100: if (ino == PROC_ROOT_INO) { ! 101: inode->i_mode = S_IFDIR | 0555; ! 102: inode->i_op = &proc_root_inode_operations; ! 103: return; ! 104: } ! 105: if (!pid) ! 106: return; ! 107: ino &= 0x0000ffff; ! 108: inode->i_uid = p->euid; ! 109: inode->i_gid = p->egid; ! 110: switch (ino) { ! 111: case 2: ! 112: inode->i_nlink = 2; ! 113: for (i = 1 ; i < NR_TASKS ; i++) ! 114: if (task[i]) ! 115: inode->i_nlink++; ! 116: inode->i_mode = S_IFDIR | 0500; ! 117: inode->i_op = &proc_base_inode_operations; ! 118: return; ! 119: case 3: ! 120: inode->i_op = &proc_mem_inode_operations; ! 121: inode->i_mode = S_IFCHR | 0600; ! 122: inode->i_rdev = 0x0101; ! 123: return; ! 124: case 4: ! 125: case 5: ! 126: case 6: ! 127: inode->i_op = &proc_link_inode_operations; ! 128: inode->i_size = 3; ! 129: inode->i_mode = S_IFLNK | 0700; ! 130: return; ! 131: case 7: ! 132: case 8: ! 133: inode->i_mode = S_IFDIR | 0500; ! 134: inode->i_op = &proc_fd_inode_operations; ! 135: inode->i_nlink = 2; ! 136: return; ! 137: } ! 138: switch (ino >> 8) { ! 139: case 1: ! 140: ino &= 0xff; ! 141: if (ino >= NR_OPEN || !p->filp[ino]) ! 142: return; ! 143: inode->i_op = &proc_link_inode_operations; ! 144: inode->i_size = 3; ! 145: inode->i_mode = S_IFLNK | 0700; ! 146: return; ! 147: case 2: ! 148: ino &= 0xff; ! 149: if (ino >= p->numlibraries) ! 150: return; ! 151: inode->i_op = &proc_link_inode_operations; ! 152: inode->i_size = 3; ! 153: inode->i_mode = S_IFLNK | 0700; ! 154: return; ! 155: } ! 156: return; ! 157: } ! 158: ! 159: void proc_write_inode(struct inode * inode) ! 160: { ! 161: inode->i_dirt=0; ! 162: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.