nilfs2: simplify life cycle management of nilfs object
This stops pre-allocating nilfs object in nilfs_get_sb routine, and stops managing its life cycle by reference counting. nilfs_find_or_create_nilfs() function, nilfs->ns_mount_mutex, nilfs_objects list, and the reference counter will be removed through the simplification. Signed-off-by: Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
Este commit está contenido en:
@@ -46,13 +46,10 @@ enum {
|
||||
/**
|
||||
* struct the_nilfs - struct to supervise multiple nilfs mount points
|
||||
* @ns_flags: flags
|
||||
* @ns_count: reference count
|
||||
* @ns_list: list head for nilfs_list
|
||||
* @ns_bdev: block device
|
||||
* @ns_bdi: backing dev info
|
||||
* @ns_writer: back pointer to writable nilfs_sb_info
|
||||
* @ns_sem: semaphore for shared states
|
||||
* @ns_mount_mutex: mutex protecting mount process of nilfs
|
||||
* @ns_writer_sem: semaphore protecting ns_writer attach/detach
|
||||
* @ns_sbh: buffer heads of on-disk super blocks
|
||||
* @ns_sbp: pointers to super block data
|
||||
@@ -94,14 +91,11 @@ enum {
|
||||
*/
|
||||
struct the_nilfs {
|
||||
unsigned long ns_flags;
|
||||
atomic_t ns_count;
|
||||
struct list_head ns_list;
|
||||
|
||||
struct block_device *ns_bdev;
|
||||
struct backing_dev_info *ns_bdi;
|
||||
struct nilfs_sb_info *ns_writer;
|
||||
struct rw_semaphore ns_sem;
|
||||
struct mutex ns_mount_mutex;
|
||||
struct rw_semaphore ns_writer_sem;
|
||||
|
||||
/*
|
||||
@@ -239,8 +233,8 @@ static inline int nilfs_sb_will_flip(struct the_nilfs *nilfs)
|
||||
}
|
||||
|
||||
void nilfs_set_last_segment(struct the_nilfs *, sector_t, u64, __u64);
|
||||
struct the_nilfs *find_or_create_nilfs(struct block_device *);
|
||||
void put_nilfs(struct the_nilfs *);
|
||||
struct the_nilfs *alloc_nilfs(struct block_device *bdev);
|
||||
void destroy_nilfs(struct the_nilfs *nilfs);
|
||||
int init_nilfs(struct the_nilfs *, struct nilfs_sb_info *, char *);
|
||||
int load_nilfs(struct the_nilfs *, struct nilfs_sb_info *);
|
||||
int nilfs_discard_segments(struct the_nilfs *, __u64 *, size_t);
|
||||
@@ -256,12 +250,6 @@ void nilfs_fall_back_super_block(struct the_nilfs *);
|
||||
void nilfs_swap_super_block(struct the_nilfs *);
|
||||
|
||||
|
||||
static inline void get_nilfs(struct the_nilfs *nilfs)
|
||||
{
|
||||
/* Caller must have at least one reference of the_nilfs. */
|
||||
atomic_inc(&nilfs->ns_count);
|
||||
}
|
||||
|
||||
static inline void nilfs_get_root(struct nilfs_root *root)
|
||||
{
|
||||
atomic_inc(&root->count);
|
||||
|
Referencia en una nueva incidencia
Block a user