inode.c (c58310bf4933986513020fa90b4190c7492995ae) inode.c (dca3c33652e437ed02c30ed3eca3cecd0cc00838)
1/*
2 * linux/fs/affs/inode.c
3 *
4 * (c) 1996 Hans-Joachim Widmaier - Rewritten
5 *
6 * (C) 1993 Ray Burr - Modified for Amiga FFS filesystem.
7 *
8 * (C) 1992 Eric Youngdale Modified for ISO9660 filesystem.

--- 44 unchanged lines hidden (view full) ---

53 prot = be32_to_cpu(tail->protect);
54
55 inode->i_size = 0;
56 inode->i_nlink = 1;
57 inode->i_mode = 0;
58 AFFS_I(inode)->i_extcnt = 1;
59 AFFS_I(inode)->i_ext_last = ~1;
60 AFFS_I(inode)->i_protect = prot;
1/*
2 * linux/fs/affs/inode.c
3 *
4 * (c) 1996 Hans-Joachim Widmaier - Rewritten
5 *
6 * (C) 1993 Ray Burr - Modified for Amiga FFS filesystem.
7 *
8 * (C) 1992 Eric Youngdale Modified for ISO9660 filesystem.

--- 44 unchanged lines hidden (view full) ---

53 prot = be32_to_cpu(tail->protect);
54
55 inode->i_size = 0;
56 inode->i_nlink = 1;
57 inode->i_mode = 0;
58 AFFS_I(inode)->i_extcnt = 1;
59 AFFS_I(inode)->i_ext_last = ~1;
60 AFFS_I(inode)->i_protect = prot;
61 AFFS_I(inode)->i_opencnt = 0;
61 atomic_set(&AFFS_I(inode)->i_opencnt, 0);
62 AFFS_I(inode)->i_blkcnt = 0;
63 AFFS_I(inode)->i_lc = NULL;
64 AFFS_I(inode)->i_lc_size = 0;
65 AFFS_I(inode)->i_lc_shift = 0;
66 AFFS_I(inode)->i_lc_mask = 0;
67 AFFS_I(inode)->i_ac = NULL;
68 AFFS_I(inode)->i_ext_bh = NULL;
69 AFFS_I(inode)->mmu_private = 0;

--- 33 unchanged lines hidden (view full) ---

103 inode->i_mode |= S_IXUSR;
104 if (inode->i_mode & S_IRGRP)
105 inode->i_mode |= S_IXGRP;
106 if (inode->i_mode & S_IROTH)
107 inode->i_mode |= S_IXOTH;
108 inode->i_mode |= S_IFDIR;
109 } else
110 inode->i_mode = S_IRUGO | S_IXUGO | S_IWUSR | S_IFDIR;
62 AFFS_I(inode)->i_blkcnt = 0;
63 AFFS_I(inode)->i_lc = NULL;
64 AFFS_I(inode)->i_lc_size = 0;
65 AFFS_I(inode)->i_lc_shift = 0;
66 AFFS_I(inode)->i_lc_mask = 0;
67 AFFS_I(inode)->i_ac = NULL;
68 AFFS_I(inode)->i_ext_bh = NULL;
69 AFFS_I(inode)->mmu_private = 0;

--- 33 unchanged lines hidden (view full) ---

103 inode->i_mode |= S_IXUSR;
104 if (inode->i_mode & S_IRGRP)
105 inode->i_mode |= S_IXGRP;
106 if (inode->i_mode & S_IROTH)
107 inode->i_mode |= S_IXOTH;
108 inode->i_mode |= S_IFDIR;
109 } else
110 inode->i_mode = S_IRUGO | S_IXUGO | S_IWUSR | S_IFDIR;
111 if (tail->link_chain)
112 inode->i_nlink = 2;
113 /* Maybe it should be controlled by mount parameter? */
114 //inode->i_mode |= S_ISVTX;
115 inode->i_op = &affs_dir_inode_operations;
116 inode->i_fop = &affs_dir_operations;
117 break;
118 case ST_LINKDIR:
119#if 0
120 affs_warning(sb, "read_inode", "inode is LINKDIR");

--- 119 unchanged lines hidden (view full) ---

240 error = inode_setattr(inode, attr);
241 if (!error && (attr->ia_valid & ATTR_MODE))
242 mode_to_prot(inode);
243out:
244 return error;
245}
246
247void
111 /* Maybe it should be controlled by mount parameter? */
112 //inode->i_mode |= S_ISVTX;
113 inode->i_op = &affs_dir_inode_operations;
114 inode->i_fop = &affs_dir_operations;
115 break;
116 case ST_LINKDIR:
117#if 0
118 affs_warning(sb, "read_inode", "inode is LINKDIR");

--- 119 unchanged lines hidden (view full) ---

238 error = inode_setattr(inode, attr);
239 if (!error && (attr->ia_valid & ATTR_MODE))
240 mode_to_prot(inode);
241out:
242 return error;
243}
244
245void
248affs_put_inode(struct inode *inode)
249{
250 pr_debug("AFFS: put_inode(ino=%lu, nlink=%u)\n", inode->i_ino, inode->i_nlink);
251 affs_free_prealloc(inode);
252}
253
254void
255affs_drop_inode(struct inode *inode)
256{
257 mutex_lock(&inode->i_mutex);
258 if (inode->i_size != AFFS_I(inode)->mmu_private)
259 affs_truncate(inode);
260 mutex_unlock(&inode->i_mutex);
261
262 generic_drop_inode(inode);
263}
264
265void
266affs_delete_inode(struct inode *inode)
267{
268 pr_debug("AFFS: delete_inode(ino=%lu, nlink=%u)\n", inode->i_ino, inode->i_nlink);
269 truncate_inode_pages(&inode->i_data, 0);
270 inode->i_size = 0;
246affs_delete_inode(struct inode *inode)
247{
248 pr_debug("AFFS: delete_inode(ino=%lu, nlink=%u)\n", inode->i_ino, inode->i_nlink);
249 truncate_inode_pages(&inode->i_data, 0);
250 inode->i_size = 0;
271 if (S_ISREG(inode->i_mode))
272 affs_truncate(inode);
251 affs_truncate(inode);
273 clear_inode(inode);
274 affs_free_block(inode->i_sb, inode->i_ino);
275}
276
277void
278affs_clear_inode(struct inode *inode)
279{
252 clear_inode(inode);
253 affs_free_block(inode->i_sb, inode->i_ino);
254}
255
256void
257affs_clear_inode(struct inode *inode)
258{
280 unsigned long cache_page = (unsigned long) AFFS_I(inode)->i_lc;
259 unsigned long cache_page;
281
282 pr_debug("AFFS: clear_inode(ino=%lu, nlink=%u)\n", inode->i_ino, inode->i_nlink);
260
261 pr_debug("AFFS: clear_inode(ino=%lu, nlink=%u)\n", inode->i_ino, inode->i_nlink);
262
263 affs_free_prealloc(inode);
264 cache_page = (unsigned long)AFFS_I(inode)->i_lc;
283 if (cache_page) {
284 pr_debug("AFFS: freeing ext cache\n");
285 AFFS_I(inode)->i_lc = NULL;
286 AFFS_I(inode)->i_ac = NULL;
287 free_page(cache_page);
288 }
289 affs_brelse(AFFS_I(inode)->i_ext_bh);
290 AFFS_I(inode)->i_ext_last = ~1;

--- 20 unchanged lines hidden (view full) ---

311 mark_buffer_dirty_inode(bh, inode);
312 affs_brelse(bh);
313
314 inode->i_uid = current->fsuid;
315 inode->i_gid = current->fsgid;
316 inode->i_ino = block;
317 inode->i_nlink = 1;
318 inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME_SEC;
265 if (cache_page) {
266 pr_debug("AFFS: freeing ext cache\n");
267 AFFS_I(inode)->i_lc = NULL;
268 AFFS_I(inode)->i_ac = NULL;
269 free_page(cache_page);
270 }
271 affs_brelse(AFFS_I(inode)->i_ext_bh);
272 AFFS_I(inode)->i_ext_last = ~1;

--- 20 unchanged lines hidden (view full) ---

293 mark_buffer_dirty_inode(bh, inode);
294 affs_brelse(bh);
295
296 inode->i_uid = current->fsuid;
297 inode->i_gid = current->fsgid;
298 inode->i_ino = block;
299 inode->i_nlink = 1;
300 inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME_SEC;
319 AFFS_I(inode)->i_opencnt = 0;
301 atomic_set(&AFFS_I(inode)->i_opencnt, 0);
320 AFFS_I(inode)->i_blkcnt = 0;
321 AFFS_I(inode)->i_lc = NULL;
322 AFFS_I(inode)->i_lc_size = 0;
323 AFFS_I(inode)->i_lc_shift = 0;
324 AFFS_I(inode)->i_lc_mask = 0;
325 AFFS_I(inode)->i_ac = NULL;
326 AFFS_I(inode)->i_ext_bh = NULL;
327 AFFS_I(inode)->mmu_private = 0;

--- 36 unchanged lines hidden (view full) ---

364 bh = affs_bread(sb, inode->i_ino);
365 if (!bh)
366 goto done;
367
368 affs_lock_link(inode);
369 switch (type) {
370 case ST_LINKFILE:
371 case ST_LINKDIR:
302 AFFS_I(inode)->i_blkcnt = 0;
303 AFFS_I(inode)->i_lc = NULL;
304 AFFS_I(inode)->i_lc_size = 0;
305 AFFS_I(inode)->i_lc_shift = 0;
306 AFFS_I(inode)->i_lc_mask = 0;
307 AFFS_I(inode)->i_ac = NULL;
308 AFFS_I(inode)->i_ext_bh = NULL;
309 AFFS_I(inode)->mmu_private = 0;

--- 36 unchanged lines hidden (view full) ---

346 bh = affs_bread(sb, inode->i_ino);
347 if (!bh)
348 goto done;
349
350 affs_lock_link(inode);
351 switch (type) {
352 case ST_LINKFILE:
353 case ST_LINKDIR:
372 inode_bh = bh;
373 retval = -ENOSPC;
374 block = affs_alloc_block(dir, dir->i_ino);
375 if (!block)
376 goto err;
377 retval = -EIO;
354 retval = -ENOSPC;
355 block = affs_alloc_block(dir, dir->i_ino);
356 if (!block)
357 goto err;
358 retval = -EIO;
359 inode_bh = bh;
378 bh = affs_getzeroblk(sb, block);
379 if (!bh)
380 goto err;
381 break;
382 default:
383 break;
384 }
385

--- 38 unchanged lines hidden ---
360 bh = affs_getzeroblk(sb, block);
361 if (!bh)
362 goto err;
363 break;
364 default:
365 break;
366 }
367

--- 38 unchanged lines hidden ---