ioctl.c (d2e7ad19229f982fc1eb731827d82ceac90abfb3) ioctl.c (365e215ce1f154e288ff0f7c9acbdf5421f57949)
1/*
2 * ioctl.c - NILFS ioctl operations.
3 *
4 * Copyright (C) 2007, 2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or

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

228
229static ssize_t
230nilfs_ioctl_do_get_vinfo(struct the_nilfs *nilfs, __u64 *posp, int flags,
231 void *buf, size_t size, size_t nmembs)
232{
233 int ret;
234
235 down_read(&nilfs->ns_segctor_sem);
1/*
2 * ioctl.c - NILFS ioctl operations.
3 *
4 * Copyright (C) 2007, 2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or

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

228
229static ssize_t
230nilfs_ioctl_do_get_vinfo(struct the_nilfs *nilfs, __u64 *posp, int flags,
231 void *buf, size_t size, size_t nmembs)
232{
233 int ret;
234
235 down_read(&nilfs->ns_segctor_sem);
236 ret = nilfs_dat_get_vinfo(nilfs_dat_inode(nilfs), buf, size, nmembs);
236 ret = nilfs_dat_get_vinfo(nilfs->ns_dat, buf, size, nmembs);
237 up_read(&nilfs->ns_segctor_sem);
238 return ret;
239}
240
241static ssize_t
242nilfs_ioctl_do_get_bdescs(struct the_nilfs *nilfs, __u64 *posp, int flags,
243 void *buf, size_t size, size_t nmembs)
244{
237 up_read(&nilfs->ns_segctor_sem);
238 return ret;
239}
240
241static ssize_t
242nilfs_ioctl_do_get_bdescs(struct the_nilfs *nilfs, __u64 *posp, int flags,
243 void *buf, size_t size, size_t nmembs)
244{
245 struct inode *dat = nilfs_dat_inode(nilfs);
246 struct nilfs_bmap *bmap = NILFS_I(dat)->i_bmap;
245 struct nilfs_bmap *bmap = NILFS_I(nilfs->ns_dat)->i_bmap;
247 struct nilfs_bdesc *bdescs = buf;
248 int ret, i;
249
250 down_read(&nilfs->ns_segctor_sem);
251 for (i = 0; i < nmembs; i++) {
252 ret = nilfs_bmap_lookup_at_level(bmap,
253 bdescs[i].bd_offset,
254 bdescs[i].bd_level + 1,

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

416}
417
418static int nilfs_ioctl_free_vblocknrs(struct the_nilfs *nilfs,
419 struct nilfs_argv *argv, void *buf)
420{
421 size_t nmembs = argv->v_nmembs;
422 int ret;
423
246 struct nilfs_bdesc *bdescs = buf;
247 int ret, i;
248
249 down_read(&nilfs->ns_segctor_sem);
250 for (i = 0; i < nmembs; i++) {
251 ret = nilfs_bmap_lookup_at_level(bmap,
252 bdescs[i].bd_offset,
253 bdescs[i].bd_level + 1,

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

415}
416
417static int nilfs_ioctl_free_vblocknrs(struct the_nilfs *nilfs,
418 struct nilfs_argv *argv, void *buf)
419{
420 size_t nmembs = argv->v_nmembs;
421 int ret;
422
424 ret = nilfs_dat_freev(nilfs_dat_inode(nilfs), buf, nmembs);
423 ret = nilfs_dat_freev(nilfs->ns_dat, buf, nmembs);
425
426 return (ret < 0) ? ret : nmembs;
427}
428
429static int nilfs_ioctl_mark_blocks_dirty(struct the_nilfs *nilfs,
430 struct nilfs_argv *argv, void *buf)
431{
432 size_t nmembs = argv->v_nmembs;
424
425 return (ret < 0) ? ret : nmembs;
426}
427
428static int nilfs_ioctl_mark_blocks_dirty(struct the_nilfs *nilfs,
429 struct nilfs_argv *argv, void *buf)
430{
431 size_t nmembs = argv->v_nmembs;
433 struct inode *dat = nilfs_dat_inode(nilfs);
434 struct nilfs_bmap *bmap = NILFS_I(dat)->i_bmap;
432 struct nilfs_bmap *bmap = NILFS_I(nilfs->ns_dat)->i_bmap;
435 struct nilfs_bdesc *bdescs = buf;
436 int ret, i;
437
438 for (i = 0; i < nmembs; i++) {
439 /* XXX: use macro or inline func to check liveness */
440 ret = nilfs_bmap_lookup_at_level(bmap,
441 bdescs[i].bd_offset,
442 bdescs[i].bd_level + 1,
443 &bdescs[i].bd_blocknr);
444 if (ret < 0) {
445 if (ret != -ENOENT)
446 return ret;
447 bdescs[i].bd_blocknr = 0;
448 }
449 if (bdescs[i].bd_blocknr != bdescs[i].bd_oblocknr)
450 /* skip dead block */
451 continue;
452 if (bdescs[i].bd_level == 0) {
433 struct nilfs_bdesc *bdescs = buf;
434 int ret, i;
435
436 for (i = 0; i < nmembs; i++) {
437 /* XXX: use macro or inline func to check liveness */
438 ret = nilfs_bmap_lookup_at_level(bmap,
439 bdescs[i].bd_offset,
440 bdescs[i].bd_level + 1,
441 &bdescs[i].bd_blocknr);
442 if (ret < 0) {
443 if (ret != -ENOENT)
444 return ret;
445 bdescs[i].bd_blocknr = 0;
446 }
447 if (bdescs[i].bd_blocknr != bdescs[i].bd_oblocknr)
448 /* skip dead block */
449 continue;
450 if (bdescs[i].bd_level == 0) {
453 ret = nilfs_mdt_mark_block_dirty(dat,
451 ret = nilfs_mdt_mark_block_dirty(nilfs->ns_dat,
454 bdescs[i].bd_offset);
455 if (ret < 0) {
456 WARN_ON(ret == -ENOENT);
457 return ret;
458 }
459 } else {
460 ret = nilfs_bmap_mark(bmap, bdescs[i].bd_offset,
461 bdescs[i].bd_level);

--- 239 unchanged lines hidden ---
452 bdescs[i].bd_offset);
453 if (ret < 0) {
454 WARN_ON(ret == -ENOENT);
455 return ret;
456 }
457 } else {
458 ret = nilfs_bmap_mark(bmap, bdescs[i].bd_offset,
459 bdescs[i].bd_level);

--- 239 unchanged lines hidden ---