void packetmgr_end( qqclient* qq ) { qqpacketmgr *mgr = &qq->packetmgr; pthread_join( mgr->thread_recv, NULL ); loop_cleanup( &mgr->recv_loop ); loop_cleanup( &mgr->sent_loop ); loop_cleanup( &mgr->ready_loop ); loop_cleanup( &mgr->temp_loop ); DBG("packetmgr_end"); }
static int clear_update_ondisk(char *source, struct lustre_disk_data *ldd) { char always_mountopts[512] = ""; char default_mountopts[512] = ""; struct mkfs_opts mkop; int ret; int ret2; memset(&mkop, 0, sizeof(mkop)); mkop.mo_ldd = *ldd; mkop.mo_ldd.ldd_flags &= ~LDD_F_UPDATE; if (strlen(source) > sizeof(mkop.mo_device)-1) { fatal(); fprintf(stderr, "Device name too long: %s\n", source); return -E2BIG; } strncpy(mkop.mo_device, source, sizeof(mkop.mo_device)); ret = osd_prepare_lustre(&mkop, default_mountopts, sizeof(default_mountopts), always_mountopts, sizeof(always_mountopts)); if (ret) { fatal(); fprintf(stderr, "Can't prepare device %s: %s\n", source, strerror(ret)); return ret; } /* Create the loopback file */ if (mkop.mo_flags & MO_IS_LOOP) { ret = access(mkop.mo_device, F_OK); if (ret) { ret = errno; fatal(); fprintf(stderr, "Can't access device %s: %s\n", source, strerror(ret)); return ret; } ret = loop_setup(&mkop); if (ret) { fatal(); fprintf(stderr, "Loop device setup for %s failed: %s\n", mkop.mo_device, strerror(ret)); return ret; } } ret = osd_write_ldd(&mkop); if (ret != 0) { fatal(); fprintf(stderr, "failed to write local files: %s\n", strerror(ret)); } ret2 = loop_cleanup(&mkop); if (ret == 0) ret = ret2; return ret; }
EXPORT void webqq_end() { DBG (("webqq_ending")); webqq_running = 0; pthread_join( thread_guarder, NULL ); loop_cleanup( &user_loop ); config_end(); // qqsocket_end(); DBG (("webqq_ended")); }
int main(int argc, char *const argv[]) { struct mkfs_opts mop; struct lustre_disk_data *ldd = &mop.mo_ldd; char *mountopts = NULL; char wanted_mountopts[512] = ""; unsigned mount_type; int ret = 0; int ret2 = 0; progname = strrchr(argv[0], '/'); if (progname != NULL) progname++; else progname = argv[0]; if ((argc < 2) || (argv[argc - 1][0] == '-')) { usage(stderr); return EINVAL; } memset(&mop, 0, sizeof(mop)); set_defaults(&mop); /* device is last arg */ strscpy(mop.mo_device, argv[argc - 1], sizeof(mop.mo_device)); ret = osd_init(); if (ret != 0) return ret; #ifdef TUNEFS /* For tunefs, we must read in the old values before parsing any new ones. */ /* Check whether the disk has already been formatted by mkfs.lustre */ ret = osd_is_lustre(mop.mo_device, &mount_type); if (ret == 0) { fatal(); fprintf(stderr, "Device %s has not been formatted with " "mkfs.lustre\n", mop.mo_device); ret = ENODEV; goto out; } ldd->ldd_mount_type = mount_type; ret = osd_read_ldd(mop.mo_device, ldd); if (ret != 0) { fatal(); fprintf(stderr, "Failed to read previous Lustre data from %s " "(%d)\n", mop.mo_device, ret); goto out; } ldd->ldd_flags &= ~(LDD_F_WRITECONF | LDD_F_VIRGIN); /* svname of the form lustre:OST1234 means never registered */ ret = strlen(ldd->ldd_svname); if (ldd->ldd_svname[ret - 8] == ':') { ldd->ldd_svname[ret - 8] = '-'; ldd->ldd_flags |= LDD_F_VIRGIN; } else if (ldd->ldd_svname[ret - 8] == '=') { ldd->ldd_svname[ret - 8] = '-'; ldd->ldd_flags |= LDD_F_WRITECONF; } if (strstr(ldd->ldd_params, PARAM_MGSNODE)) mop.mo_mgs_failnodes++; if (verbose > 0) print_ldd("Read previous values", ldd); #endif /* TUNEFS */ ret = parse_opts(argc, argv, &mop, &mountopts); if (ret != 0 || version) goto out; if (!IS_MDT(ldd) && !IS_OST(ldd) && !IS_MGS(ldd)) { fatal(); fprintf(stderr, "must set target type: MDT,OST,MGS\n"); ret = EINVAL; goto out; } if (((IS_MDT(ldd) || IS_MGS(ldd))) && IS_OST(ldd)) { fatal(); fprintf(stderr, "OST type is exclusive with MDT,MGS\n"); ret = EINVAL; goto out; } /* Stand alone MGS doesn't need an index */ if (!IS_MDT(ldd) && IS_MGS(ldd)) { #ifndef TUNEFS /* But if --index was specified flag an error */ if (!(ldd->ldd_flags & LDD_F_NEED_INDEX)) { badopt("index", "MDT,OST"); goto out; } #endif ldd->ldd_flags &= ~LDD_F_NEED_INDEX; } if ((ldd->ldd_flags & (LDD_F_NEED_INDEX | LDD_F_UPGRADE14)) == (LDD_F_NEED_INDEX | LDD_F_UPGRADE14)) { fatal(); fprintf(stderr, "Can't find the target index, " "specify with --index\n"); ret = EINVAL; goto out; } if (ldd->ldd_flags & LDD_F_NEED_INDEX) fprintf(stderr, "warning: %s: for Lustre 2.4 and later, the " "target index must be specified with --index\n", mop.mo_device); /* If no index is supplied for MDT by default set index to zero */ if (IS_MDT(ldd) && (ldd->ldd_svindex == INDEX_UNASSIGNED)) { ldd->ldd_flags &= ~LDD_F_NEED_INDEX; ldd->ldd_svindex = 0; } if (!IS_MGS(ldd) && (mop.mo_mgs_failnodes == 0)) { fatal(); if (IS_MDT(ldd)) fprintf(stderr, "Must specify --mgs or --mgsnode\n"); else fprintf(stderr, "Must specify --mgsnode\n"); ret = EINVAL; goto out; } if ((IS_MDT(ldd) || IS_OST(ldd)) && ldd->ldd_fsname[0] == '\0') { fatal(); fprintf(stderr, "Must specify --fsname for MDT/OST device\n"); ret = EINVAL; goto out; } /* These are the permanent mount options (always included) */ ret = osd_prepare_lustre(&mop, wanted_mountopts, sizeof(wanted_mountopts)); if (ret != 0) { fatal(); fprintf(stderr, "unable to prepare backend (%d)\n", ret); goto out; } if (mountopts) { trim_mountfsoptions(mountopts); if (check_mountfsoptions(mountopts, wanted_mountopts)) { ret = EINVAL; goto out; } snprintf(ldd->ldd_mount_opts, sizeof(ldd->ldd_mount_opts), "%s", mountopts); } else { #ifdef TUNEFS if (ldd->ldd_mount_opts[0] == 0) /* use the defaults unless old opts exist */ #endif { snprintf(ldd->ldd_mount_opts, sizeof(ldd->ldd_mount_opts), "%s", wanted_mountopts); trim_mountfsoptions(ldd->ldd_mount_opts); } } ret = osd_fix_mountopts(&mop, ldd->ldd_mount_opts, sizeof(ldd->ldd_mount_opts)); if (ret != 0) { fatal(); fprintf(stderr, "unable to fix mountfsoptions (%d)\n", ret); goto out; } server_make_name(ldd->ldd_flags, ldd->ldd_svindex, ldd->ldd_fsname, ldd->ldd_svname); if (verbose >= 0) print_ldd("Permanent disk data", ldd); if (print_only) { printf("exiting before disk write.\n"); goto out; } if (check_mtab_entry(mop.mo_device, mop.mo_device, NULL, NULL)) return(EEXIST); /* Create the loopback file */ if (mop.mo_flags & MO_IS_LOOP) { ret = access(mop.mo_device, F_OK); if (ret != 0) ret = errno; #ifndef TUNEFS /* Reformat the loopback file */ if (ret != 0 || (mop.mo_flags & MO_FORCEFORMAT)) { ret = loop_format(&mop); if (ret != 0) goto out; } #endif if (ret == 0) ret = loop_setup(&mop); if (ret != 0) { fatal(); fprintf(stderr, "Loop device setup for %s failed: %s\n", mop.mo_device, strerror(ret)); goto out; } } #ifndef TUNEFS /* Check whether the disk has already been formatted by mkfs.lustre */ if (!(mop.mo_flags & MO_FORCEFORMAT)) { ret = osd_is_lustre(mop.mo_device, &mount_type); if (ret != 0) { fatal(); fprintf(stderr, "Device %s was previously formatted " "for lustre. Use --reformat to reformat it, " "or tunefs.lustre to modify.\n", mop.mo_device); goto out; } } /* Format the backing filesystem */ ret = osd_make_lustre(&mop); if (ret != 0) { fatal(); fprintf(stderr, "mkfs failed %d\n", ret); goto out; } #else /* !TUNEFS */ /* update svname with '=' to refresh config */ if (ldd->ldd_flags & LDD_F_WRITECONF) { struct mount_opts opts; opts.mo_ldd = *ldd; opts.mo_source = mop.mo_device; (void) osd_label_lustre(&opts); } /* Enable quota accounting */ if (mop.mo_flags & MO_QUOTA) { ret = osd_enable_quota(&mop); goto out; } #endif /* !TUNEFS */ /* Write our config files */ ret = osd_write_ldd(&mop); if (ret != 0) { fatal(); fprintf(stderr, "failed to write local files\n"); goto out; } out: osd_fini(); ret2 = loop_cleanup(&mop); if (ret == 0) ret = ret2; /* Fix any crazy return values from system() */ if (ret != 0 && ((ret & 255) == 0)) return 1; if (ret != 0) verrprint("%s: exiting with %d (%s)\n", progname, ret, strerror(ret)); return ret; }