Lines Matching refs:inode
45 static void ncp_evict_inode(struct inode *);
52 static struct inode *ncp_alloc_inode(struct super_block *sb) in ncp_alloc_inode()
63 struct inode *inode = container_of(head, struct inode, i_rcu); in ncp_i_callback() local
64 kmem_cache_free(ncp_inode_cachep, NCP_FINFO(inode)); in ncp_i_callback()
67 static void ncp_destroy_inode(struct inode *inode) in ncp_destroy_inode() argument
69 call_rcu(&inode->i_rcu, ncp_i_callback); in ncp_destroy_inode()
124 static void ncp_update_dirent(struct inode *inode, struct ncp_entry_info *nwinfo) in ncp_update_dirent() argument
126 NCP_FINFO(inode)->DosDirNum = nwinfo->i.DosDirNum; in ncp_update_dirent()
127 NCP_FINFO(inode)->dirEntNum = nwinfo->i.dirEntNum; in ncp_update_dirent()
128 NCP_FINFO(inode)->volNumber = nwinfo->volume; in ncp_update_dirent()
131 void ncp_update_inode(struct inode *inode, struct ncp_entry_info *nwinfo) in ncp_update_inode() argument
133 ncp_update_dirent(inode, nwinfo); in ncp_update_inode()
134 NCP_FINFO(inode)->nwattr = nwinfo->i.attributes; in ncp_update_inode()
135 NCP_FINFO(inode)->access = nwinfo->access; in ncp_update_inode()
136 memcpy(NCP_FINFO(inode)->file_handle, nwinfo->file_handle, in ncp_update_inode()
139 nwinfo->i.entryName, NCP_FINFO(inode)->volNumber, in ncp_update_inode()
140 NCP_FINFO(inode)->dirEntNum); in ncp_update_inode()
143 static void ncp_update_dates(struct inode *inode, struct nw_info_struct *nwi) in ncp_update_dates() argument
149 inode->i_mode = nwi->nfs.mode; in ncp_update_dates()
152 inode->i_blocks = (i_size_read(inode) + NCP_BLOCK_SIZE - 1) >> NCP_BLOCK_SHIFT; in ncp_update_dates()
154 inode->i_mtime.tv_sec = ncp_date_dos2unix(nwi->modifyTime, nwi->modifyDate); in ncp_update_dates()
155 inode->i_ctime.tv_sec = ncp_date_dos2unix(nwi->creationTime, nwi->creationDate); in ncp_update_dates()
156 inode->i_atime.tv_sec = ncp_date_dos2unix(0, nwi->lastAccessDate); in ncp_update_dates()
157 inode->i_atime.tv_nsec = 0; in ncp_update_dates()
158 inode->i_mtime.tv_nsec = 0; in ncp_update_dates()
159 inode->i_ctime.tv_nsec = 0; in ncp_update_dates()
162 static void ncp_update_attrs(struct inode *inode, struct ncp_entry_info *nwinfo) in ncp_update_attrs() argument
165 struct ncp_server *server = NCP_SERVER(inode); in ncp_update_attrs()
168 inode->i_mode = server->m.dir_mode; in ncp_update_attrs()
171 i_size_write(inode, NCP_BLOCK_SIZE); in ncp_update_attrs()
175 inode->i_mode = server->m.file_mode; in ncp_update_attrs()
177 i_size_write(inode, size); in ncp_update_attrs()
186 inode->i_mode = (inode->i_mode & ~S_IFMT) | S_IFLNK; in ncp_update_attrs()
187 NCP_FINFO(inode)->flags |= NCPI_KLUDGE_SYMLINK; in ncp_update_attrs()
194 inode->i_mode |= S_IRUGO; in ncp_update_attrs()
198 inode->i_mode |= (inode->i_mode >> 2) & S_IXUGO; in ncp_update_attrs()
208 if (nwi->attributes & aRONLY) inode->i_mode &= ~S_IWUGO; in ncp_update_attrs()
211 void ncp_update_inode2(struct inode* inode, struct ncp_entry_info *nwinfo) in ncp_update_inode2() argument
213 NCP_FINFO(inode)->flags = 0; in ncp_update_inode2()
214 if (!atomic_read(&NCP_FINFO(inode)->opened)) { in ncp_update_inode2()
215 NCP_FINFO(inode)->nwattr = nwinfo->i.attributes; in ncp_update_inode2()
216 ncp_update_attrs(inode, nwinfo); in ncp_update_inode2()
219 ncp_update_dates(inode, &nwinfo->i); in ncp_update_inode2()
220 ncp_update_dirent(inode, nwinfo); in ncp_update_inode2()
226 static void ncp_set_attr(struct inode *inode, struct ncp_entry_info *nwinfo) in ncp_set_attr() argument
228 struct ncp_server *server = NCP_SERVER(inode); in ncp_set_attr()
230 NCP_FINFO(inode)->flags = 0; in ncp_set_attr()
232 ncp_update_attrs(inode, nwinfo); in ncp_set_attr()
234 ncp_dbg(2, "inode->i_mode = %u\n", inode->i_mode); in ncp_set_attr()
236 set_nlink(inode, 1); in ncp_set_attr()
237 inode->i_uid = server->m.uid; in ncp_set_attr()
238 inode->i_gid = server->m.gid; in ncp_set_attr()
240 ncp_update_dates(inode, &nwinfo->i); in ncp_set_attr()
241 ncp_update_inode(inode, nwinfo); in ncp_set_attr()
256 struct inode *
259 struct inode *inode; in ncp_iget() local
266 inode = new_inode(sb); in ncp_iget()
267 if (inode) { in ncp_iget()
268 atomic_set(&NCP_FINFO(inode)->opened, info->opened); in ncp_iget()
270 inode->i_ino = info->ino; in ncp_iget()
271 ncp_set_attr(inode, info); in ncp_iget()
272 if (S_ISREG(inode->i_mode)) { in ncp_iget()
273 inode->i_op = &ncp_file_inode_operations; in ncp_iget()
274 inode->i_fop = &ncp_file_operations; in ncp_iget()
275 } else if (S_ISDIR(inode->i_mode)) { in ncp_iget()
276 inode->i_op = &ncp_dir_inode_operations; in ncp_iget()
277 inode->i_fop = &ncp_dir_operations; in ncp_iget()
279 …} else if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode) || S_ISFIFO(inode->i_mode) || S_ISSOCK… in ncp_iget()
280 init_special_inode(inode, inode->i_mode, in ncp_iget()
284 } else if (S_ISLNK(inode->i_mode)) { in ncp_iget()
285 inode->i_op = &ncp_symlink_inode_operations; in ncp_iget()
286 inode->i_data.a_ops = &ncp_symlink_aops; in ncp_iget()
289 make_bad_inode(inode); in ncp_iget()
291 insert_inode_hash(inode); in ncp_iget()
294 return inode; in ncp_iget()
298 ncp_evict_inode(struct inode *inode) in ncp_evict_inode() argument
300 truncate_inode_pages_final(&inode->i_data); in ncp_evict_inode()
301 clear_inode(inode); in ncp_evict_inode()
303 if (S_ISDIR(inode->i_mode)) { in ncp_evict_inode()
304 ncp_dbg(2, "put directory %ld\n", inode->i_ino); in ncp_evict_inode()
307 if (ncp_make_closed(inode) != 0) { in ncp_evict_inode()
472 struct inode *root_inode; in ncp_fill_super()
803 struct inode* i; in ncp_statfs()
868 struct inode *inode = d_inode(dentry); in ncp_notify_change() local
876 server = NCP_SERVER(inode); in ncp_notify_change()
887 result = inode_change_ok(inode, attr); in ncp_notify_change()
913 if (S_ISDIR(inode->i_mode)) { in ncp_notify_change()
934 if (ncp_is_nfs_extras(server, NCP_FINFO(inode)->volNumber)) { in ncp_notify_change()
936 NCP_FINFO(inode)->volNumber, in ncp_notify_change()
937 NCP_FINFO(inode)->dirEntNum, in ncp_notify_change()
949 setattr_copy(inode, &tmpattr); in ncp_notify_change()
950 mark_inode_dirty(inode); in ncp_notify_change()
964 if ((result = ncp_make_open(inode, O_WRONLY)) < 0) { in ncp_notify_change()
968 ncp_write_kernel(NCP_SERVER(inode), NCP_FINFO(inode)->file_handle, in ncp_notify_change()
973 ncp_inode_close(inode); in ncp_notify_change()
974 result = ncp_make_closed(inode); in ncp_notify_change()
978 if (attr->ia_size != i_size_read(inode)) { in ncp_notify_change()
979 truncate_setsize(inode, attr->ia_size); in ncp_notify_change()
980 mark_inode_dirty(inode); in ncp_notify_change()
1000 result = ncp_modify_file_or_subdir_dos_info(NCP_SERVER(inode), in ncp_notify_change()
1001 inode, info_mask, &info); in ncp_notify_change()
1015 NCP_FINFO(inode)->nwattr = info.attributes; in ncp_notify_change()
1021 setattr_copy(inode, attr); in ncp_notify_change()
1022 mark_inode_dirty(inode); in ncp_notify_change()