Lines Matching refs:inode
8 * inode.c
14 * Inodes in Squashfs are identified by a 48-bit inode which encodes the
15 * location of the compressed metadata block containing the inode, and the byte
16 * offset into that block where the inode is placed (<block, offset>).
19 * (regular file, directory, device, etc.), the inode contents and length
22 * To further maximise compression, two types of regular file inode and
23 * directory inode are defined: inodes optimised for frequently occurring
40 * Initialise VFS inode with the base inode information common to all
41 * Squashfs inode types. Sqsh_ino contains the unswapped base inode
44 static int squashfs_new_inode(struct super_block *sb, struct inode *inode,
59 i_uid_write(inode, i_uid);
60 i_gid_write(inode, i_gid);
61 inode->i_ino = le32_to_cpu(sqsh_ino->inode_number);
62 inode->i_mtime.tv_sec = le32_to_cpu(sqsh_ino->mtime);
63 inode->i_atime.tv_sec = inode->i_mtime.tv_sec;
64 inode_set_ctime(inode, inode->i_mtime.tv_sec, 0);
65 inode->i_mode = le16_to_cpu(sqsh_ino->mode);
66 inode->i_size = 0;
72 struct inode *squashfs_iget(struct super_block *sb, long long ino,
75 struct inode *inode = iget_locked(sb, ino_number);
80 if (!inode)
82 if (!(inode->i_state & I_NEW))
83 return inode;
85 err = squashfs_read_inode(inode, ino);
87 iget_failed(inode);
91 unlock_new_inode(inode);
92 return inode;
97 * Initialise VFS inode by reading inode from inode table (compressed
100 int squashfs_read_inode(struct inode *inode, long long ino)
102 struct super_block *sb = inode->i_sb;
113 * Read inode base common to all inode types.
120 err = squashfs_new_inode(sb, inode, sqshb_ino);
154 set_nlink(inode, 1);
155 inode->i_size = le32_to_cpu(sqsh_ino->file_size);
156 inode->i_fop = &generic_ro_fops;
157 inode->i_mode |= S_IFREG;
158 inode->i_blocks = ((inode->i_size - 1) >> 9) + 1;
159 squashfs_i(inode)->fragment_block = frag_blk;
160 squashfs_i(inode)->fragment_size = frag_size;
161 squashfs_i(inode)->fragment_offset = frag_offset;
162 squashfs_i(inode)->start = le32_to_cpu(sqsh_ino->start_block);
163 squashfs_i(inode)->block_list_start = block;
164 squashfs_i(inode)->offset = offset;
165 inode->i_data.a_ops = &squashfs_aops;
167 TRACE("File inode %x:%x, start_block %llx, block_list_start "
169 offset, squashfs_i(inode)->start, block, offset);
198 set_nlink(inode, le32_to_cpu(sqsh_ino->nlink));
199 inode->i_size = le64_to_cpu(sqsh_ino->file_size);
200 inode->i_op = &squashfs_inode_ops;
201 inode->i_fop = &generic_ro_fops;
202 inode->i_mode |= S_IFREG;
203 inode->i_blocks = (inode->i_size -
206 squashfs_i(inode)->fragment_block = frag_blk;
207 squashfs_i(inode)->fragment_size = frag_size;
208 squashfs_i(inode)->fragment_offset = frag_offset;
209 squashfs_i(inode)->start = le64_to_cpu(sqsh_ino->start_block);
210 squashfs_i(inode)->block_list_start = block;
211 squashfs_i(inode)->offset = offset;
212 inode->i_data.a_ops = &squashfs_aops;
214 TRACE("File inode %x:%x, start_block %llx, block_list_start "
216 offset, squashfs_i(inode)->start, block, offset);
227 set_nlink(inode, le32_to_cpu(sqsh_ino->nlink));
228 inode->i_size = le16_to_cpu(sqsh_ino->file_size);
229 inode->i_op = &squashfs_dir_inode_ops;
230 inode->i_fop = &squashfs_dir_ops;
231 inode->i_mode |= S_IFDIR;
232 squashfs_i(inode)->start = le32_to_cpu(sqsh_ino->start_block);
233 squashfs_i(inode)->offset = le16_to_cpu(sqsh_ino->offset);
234 squashfs_i(inode)->dir_idx_cnt = 0;
235 squashfs_i(inode)->parent = le32_to_cpu(sqsh_ino->parent_inode);
237 TRACE("Directory inode %x:%x, start_block %llx, offset %x\n",
239 squashfs_i(inode)->start,
252 set_nlink(inode, le32_to_cpu(sqsh_ino->nlink));
253 inode->i_size = le32_to_cpu(sqsh_ino->file_size);
254 inode->i_op = &squashfs_dir_inode_ops;
255 inode->i_fop = &squashfs_dir_ops;
256 inode->i_mode |= S_IFDIR;
257 squashfs_i(inode)->start = le32_to_cpu(sqsh_ino->start_block);
258 squashfs_i(inode)->offset = le16_to_cpu(sqsh_ino->offset);
259 squashfs_i(inode)->dir_idx_start = block;
260 squashfs_i(inode)->dir_idx_offset = offset;
261 squashfs_i(inode)->dir_idx_cnt = le16_to_cpu(sqsh_ino->i_count);
262 squashfs_i(inode)->parent = le32_to_cpu(sqsh_ino->parent_inode);
264 TRACE("Long directory inode %x:%x, start_block %llx, offset "
266 squashfs_i(inode)->start,
279 set_nlink(inode, le32_to_cpu(sqsh_ino->nlink));
280 inode->i_size = le32_to_cpu(sqsh_ino->symlink_size);
281 inode->i_op = &squashfs_symlink_inode_ops;
282 inode_nohighmem(inode);
283 inode->i_data.a_ops = &squashfs_symlink_aops;
284 inode->i_mode |= S_IFLNK;
285 squashfs_i(inode)->start = block;
286 squashfs_i(inode)->offset = offset;
292 &offset, inode->i_size);
302 TRACE("Symbolic link inode %x:%x, start_block %llx, offset "
318 inode->i_mode |= S_IFCHR;
320 inode->i_mode |= S_IFBLK;
321 set_nlink(inode, le32_to_cpu(sqsh_ino->nlink));
323 init_special_inode(inode, inode->i_mode, new_decode_dev(rdev));
325 TRACE("Device inode %x:%x, rdev %x\n",
340 inode->i_mode |= S_IFCHR;
342 inode->i_mode |= S_IFBLK;
344 inode->i_op = &squashfs_inode_ops;
345 set_nlink(inode, le32_to_cpu(sqsh_ino->nlink));
347 init_special_inode(inode, inode->i_mode, new_decode_dev(rdev));
349 TRACE("Device inode %x:%x, rdev %x\n",
363 inode->i_mode |= S_IFIFO;
365 inode->i_mode |= S_IFSOCK;
366 set_nlink(inode, le32_to_cpu(sqsh_ino->nlink));
367 init_special_inode(inode, inode->i_mode, 0);
380 inode->i_mode |= S_IFIFO;
382 inode->i_mode |= S_IFSOCK;
384 inode->i_op = &squashfs_inode_ops;
385 set_nlink(inode, le32_to_cpu(sqsh_ino->nlink));
386 init_special_inode(inode, inode->i_mode, 0);
390 ERROR("Unknown inode type %d in squashfs_iget!\n", type);
396 &squashfs_i(inode)->xattr_count,
397 &squashfs_i(inode)->xattr_size,
398 &squashfs_i(inode)->xattr);
401 inode->i_blocks += ((squashfs_i(inode)->xattr_size - 1) >> 9)
404 squashfs_i(inode)->xattr_count = 0;
409 ERROR("Unable to read inode 0x%llx\n", ino);