Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 174698
b: refs/heads/master
c: ef7d475
h: refs/heads/master
v: v3
  • Loading branch information
Ryusuke Konishi committed Nov 20, 2009
1 parent 43ace53 commit 73d9bd6
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 39 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: aa474a220180d997caafcee372770d6ed6bf798a
refs/heads/master: ef7d4757a5b7b07a3a0d30d3ba6b587e574b28b9
31 changes: 9 additions & 22 deletions trunk/fs/nilfs2/sufile.c
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,15 @@ static void nilfs_sufile_mod_counter(struct buffer_head *header_bh,
nilfs_mdt_mark_buffer_dirty(header_bh);
}

/**
* nilfs_sufile_get_ncleansegs - return the number of clean segments
* @sufile: inode of segment usage file
*/
unsigned long nilfs_sufile_get_ncleansegs(struct inode *sufile)
{
return NILFS_SUI(sufile)->ncleansegs;
}

/**
* nilfs_sufile_updatev - modify multiple segment usages at a time
* @sufile: inode of segment usage file
Expand Down Expand Up @@ -540,28 +549,6 @@ int nilfs_sufile_get_stat(struct inode *sufile, struct nilfs_sustat *sustat)
return ret;
}

/**
* nilfs_sufile_get_ncleansegs - get the number of clean segments
* @sufile: inode of segment usage file
* @nsegsp: pointer to the number of clean segments
*
* Description: nilfs_sufile_get_ncleansegs() acquires the number of clean
* segments.
*
* Return Value: On success, 0 is returned and the number of clean segments is
* stored in the place pointed by @nsegsp. On error, one of the following
* negative error codes is returned.
*
* %-EIO - I/O error.
*
* %-ENOMEM - Insufficient amount of memory available.
*/
int nilfs_sufile_get_ncleansegs(struct inode *sufile, unsigned long *nsegsp)
{
*nsegsp = NILFS_SUI(sufile)->ncleansegs;
return 0;
}

void nilfs_sufile_do_set_error(struct inode *sufile, __u64 segnum,
struct buffer_head *header_bh,
struct buffer_head *su_bh)
Expand Down
3 changes: 2 additions & 1 deletion trunk/fs/nilfs2/sufile.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,15 @@ static inline unsigned long nilfs_sufile_get_nsegments(struct inode *sufile)
return NILFS_MDT(sufile)->mi_nilfs->ns_nsegments;
}

unsigned long nilfs_sufile_get_ncleansegs(struct inode *sufile);

int nilfs_sufile_alloc(struct inode *, __u64 *);
int nilfs_sufile_get_segment_usage(struct inode *, __u64,
struct nilfs_segment_usage **,
struct buffer_head **);
void nilfs_sufile_put_segment_usage(struct inode *, __u64,
struct buffer_head *);
int nilfs_sufile_get_stat(struct inode *, struct nilfs_sustat *);
int nilfs_sufile_get_ncleansegs(struct inode *, unsigned long *);
ssize_t nilfs_sufile_get_suinfo(struct inode *, __u64, void *, unsigned,
size_t);

Expand Down
23 changes: 8 additions & 15 deletions trunk/fs/nilfs2/the_nilfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -612,30 +612,23 @@ int nilfs_count_free_blocks(struct the_nilfs *nilfs, sector_t *nblocks)
{
struct inode *dat = nilfs_dat_inode(nilfs);
unsigned long ncleansegs;
int err;

down_read(&NILFS_MDT(dat)->mi_sem); /* XXX */
err = nilfs_sufile_get_ncleansegs(nilfs->ns_sufile, &ncleansegs);
ncleansegs = nilfs_sufile_get_ncleansegs(nilfs->ns_sufile);
up_read(&NILFS_MDT(dat)->mi_sem); /* XXX */
if (likely(!err))
*nblocks = (sector_t)ncleansegs * nilfs->ns_blocks_per_segment;
return err;
*nblocks = (sector_t)ncleansegs * nilfs->ns_blocks_per_segment;
return 0;
}

int nilfs_near_disk_full(struct the_nilfs *nilfs)
{
struct inode *sufile = nilfs->ns_sufile;
unsigned long ncleansegs, nincsegs;
int ret;

ret = nilfs_sufile_get_ncleansegs(sufile, &ncleansegs);
if (likely(!ret)) {
nincsegs = atomic_read(&nilfs->ns_ndirtyblks) /
nilfs->ns_blocks_per_segment + 1;
if (ncleansegs <= nilfs->ns_nrsvsegs + nincsegs)
ret++;
}
return ret;
ncleansegs = nilfs_sufile_get_ncleansegs(nilfs->ns_sufile);
nincsegs = atomic_read(&nilfs->ns_ndirtyblks) /
nilfs->ns_blocks_per_segment + 1;

return ncleansegs <= nilfs->ns_nrsvsegs + nincsegs;
}

/**
Expand Down

0 comments on commit 73d9bd6

Please sign in to comment.