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

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

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

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

    return ret;
}
示例#2
0
static void gfs2_write_super_lockfs(struct super_block *sb)
{
	struct gfs2_sbd *sdp = sb->s_fs_info;
	int error;

	if (test_bit(SDF_SHUTDOWN, &sdp->sd_flags))
		return;

	for (;;) {
		error = gfs2_freeze_fs(sdp);
		if (!error)
			break;

		switch (error) {
		case -EBUSY:
			fs_err(sdp, "waiting for recovery before freeze\n");
			break;

		default:
			fs_err(sdp, "error freezing FS: %d\n", error);
			break;
		}

		fs_err(sdp, "retrying...\n");
		msleep(1000);
	}
}