Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 352951
b: refs/heads/master
c: d564053
h: refs/heads/master
i:
  352949: d7c091e
  352947: 6483541
  352943: 37e62bc
v: v3
  • Loading branch information
Steven Whitehouse committed Jan 29, 2013
1 parent a6f3d26 commit a06e788
Show file tree
Hide file tree
Showing 6 changed files with 16 additions and 79 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: c76c4d96bdd89027306cebc80eb3397286d8da66
refs/heads/master: d564053f074634e7a966359dc97d26900fa5f52d
3 changes: 0 additions & 3 deletions trunk/fs/gfs2/incore.h
Original file line number Diff line number Diff line change
Expand Up @@ -757,10 +757,7 @@ struct gfs2_sbd {
unsigned int sd_replayed_blocks;

/* For quiescing the filesystem */

struct gfs2_holder sd_freeze_gh;
struct mutex sd_freeze_lock;
unsigned int sd_freeze_count;

char sd_fsname[GFS2_FSNAME_LEN];
char sd_table_name[GFS2_FSNAME_LEN];
Expand Down
2 changes: 0 additions & 2 deletions trunk/fs/gfs2/ops_fstype.c
Original file line number Diff line number Diff line change
Expand Up @@ -115,8 +115,6 @@ static struct gfs2_sbd *init_sbd(struct super_block *sb)

INIT_LIST_HEAD(&sdp->sd_revoke_list);

mutex_init(&sdp->sd_freeze_lock);

return sdp;
}

Expand Down
61 changes: 4 additions & 57 deletions trunk/fs/gfs2/super.c
Original file line number Diff line number Diff line change
Expand Up @@ -663,54 +663,6 @@ static int gfs2_lock_fs_check_clean(struct gfs2_sbd *sdp,
return error;
}

/**
* gfs2_freeze_fs - freezes the file system
* @sdp: the file system
*
* This function flushes data and meta data for all machines by
* acquiring the transaction log exclusively. All journals are
* ensured to be in a clean state as well.
*
* Returns: errno
*/

int gfs2_freeze_fs(struct gfs2_sbd *sdp)
{
int error = 0;

mutex_lock(&sdp->sd_freeze_lock);

if (!sdp->sd_freeze_count++) {
error = gfs2_lock_fs_check_clean(sdp, &sdp->sd_freeze_gh);
if (error)
sdp->sd_freeze_count--;
}

mutex_unlock(&sdp->sd_freeze_lock);

return error;
}

/**
* gfs2_unfreeze_fs - unfreezes the file system
* @sdp: the file system
*
* This function allows the file system to proceed by unlocking
* the exclusively held transaction lock. Other GFS2 nodes are
* now free to acquire the lock shared and go on with their lives.
*
*/

void gfs2_unfreeze_fs(struct gfs2_sbd *sdp)
{
mutex_lock(&sdp->sd_freeze_lock);

if (sdp->sd_freeze_count && !--sdp->sd_freeze_count)
gfs2_glock_dq_uninit(&sdp->sd_freeze_gh);

mutex_unlock(&sdp->sd_freeze_lock);
}

void gfs2_dinode_out(const struct gfs2_inode *ip, void *buf)
{
struct gfs2_dinode *str = buf;
Expand Down Expand Up @@ -888,13 +840,6 @@ static void gfs2_put_super(struct super_block *sb)
int error;
struct gfs2_jdesc *jd;

/* Unfreeze the filesystem, if we need to */

mutex_lock(&sdp->sd_freeze_lock);
if (sdp->sd_freeze_count)
gfs2_glock_dq_uninit(&sdp->sd_freeze_gh);
mutex_unlock(&sdp->sd_freeze_lock);

/* No more recovery requests */
set_bit(SDF_NORECOVERY, &sdp->sd_flags);
smp_mb();
Expand Down Expand Up @@ -985,7 +930,7 @@ static int gfs2_freeze(struct super_block *sb)
return -EINVAL;

for (;;) {
error = gfs2_freeze_fs(sdp);
error = gfs2_lock_fs_check_clean(sdp, &sdp->sd_freeze_gh);
if (!error)
break;

Expand Down Expand Up @@ -1013,7 +958,9 @@ static int gfs2_freeze(struct super_block *sb)

static int gfs2_unfreeze(struct super_block *sb)
{
gfs2_unfreeze_fs(sb->s_fs_info);
struct gfs2_sbd *sdp = sb->s_fs_info;

gfs2_glock_dq_uninit(&sdp->sd_freeze_gh);
return 0;
}

Expand Down
3 changes: 0 additions & 3 deletions trunk/fs/gfs2/super.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,6 @@ extern void update_statfs(struct gfs2_sbd *sdp, struct buffer_head *m_bh,
struct buffer_head *l_bh);
extern int gfs2_statfs_sync(struct super_block *sb, int type);

extern int gfs2_freeze_fs(struct gfs2_sbd *sdp);
extern void gfs2_unfreeze_fs(struct gfs2_sbd *sdp);

extern struct file_system_type gfs2_fs_type;
extern struct file_system_type gfs2meta_fs_type;
extern const struct export_operations gfs2_export_ops;
Expand Down
24 changes: 11 additions & 13 deletions trunk/fs/gfs2/sys.c
Original file line number Diff line number Diff line change
Expand Up @@ -91,39 +91,37 @@ static ssize_t uuid_show(struct gfs2_sbd *sdp, char *buf)

static ssize_t freeze_show(struct gfs2_sbd *sdp, char *buf)
{
unsigned int count;

mutex_lock(&sdp->sd_freeze_lock);
count = sdp->sd_freeze_count;
mutex_unlock(&sdp->sd_freeze_lock);
struct super_block *sb = sdp->sd_vfs;
int frozen = (sb->s_writers.frozen == SB_UNFROZEN) ? 0 : 1;

return snprintf(buf, PAGE_SIZE, "%u\n", count);
return snprintf(buf, PAGE_SIZE, "%u\n", frozen);
}

static ssize_t freeze_store(struct gfs2_sbd *sdp, const char *buf, size_t len)
{
ssize_t ret = len;
int error = 0;
int error;
int n = simple_strtol(buf, NULL, 0);

if (!capable(CAP_SYS_ADMIN))
return -EACCES;

switch (n) {
case 0:
gfs2_unfreeze_fs(sdp);
error = thaw_super(sdp->sd_vfs);
break;
case 1:
error = gfs2_freeze_fs(sdp);
error = freeze_super(sdp->sd_vfs);
break;
default:
ret = -EINVAL;
return -EINVAL;
}

if (error)
if (error) {
fs_warn(sdp, "freeze %d error %d", n, error);
return error;
}

return ret;
return len;
}

static ssize_t withdraw_show(struct gfs2_sbd *sdp, char *buf)
Expand Down

0 comments on commit a06e788

Please sign in to comment.