Changeset 4b6635a7 in mainline


Ignore:
Timestamp:
2015-10-12T15:42:23Z (9 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
edebb4a1
Parents:
6a0db524
Message:

Volsrv empty partition detection.

Location:
uspace
Files:
3 added
10 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/fdisk/fdisk.c

    r6a0db524 r4b6635a7  
    262262}
    263263
    264 static int fdsk_select_fstype(fdisk_fstype_t *fstype)
     264static int fdsk_select_fstype(vol_fstype_t *fstype)
    265265{
    266266        nchoice_t *choice = NULL;
     
    284284        }
    285285
    286         for (i = FDFS_CREATE_LO; i < FDFS_CREATE_HI; i++) {
     286        for (i = 0; i < VOL_FSTYPE_LIMIT; i++) {
    287287                rc = fdisk_fstype_format(i, &sfstype);
    288288                if (rc != EOK)
     
    307307
    308308        nchoice_destroy(choice);
    309         *fstype = (fdisk_fstype_t)sel;
     309        *fstype = (vol_fstype_t)sel;
    310310        return EOK;
    311311error:
     
    321321        fdisk_part_spec_t pspec;
    322322        fdisk_cap_t cap;
    323         fdisk_fstype_t fstype = fdfs_none;
     323        vol_fstype_t fstype = 0;
    324324        tinput_t *tinput = NULL;
    325325        char *scap;
     
    577577                }
    578578
    579                 if (pinfo.pkind != lpk_extended)
    580                         printf(", %s", sfstype);
     579                if (pinfo.pkind != lpk_extended) {
     580                        switch (pinfo.pcnt) {
     581                        case vpc_empty:
     582                                printf(", Empty");
     583                                break;
     584                        case vpc_fs:
     585                                printf(", %s", sfstype);
     586                                break;
     587                        case vpc_unknown:
     588                                printf(", Unknown");
     589                                break;
     590                        }
     591                }
     592
    581593                printf("\n");
    582594
  • uspace/lib/c/include/vbd.h

    r6a0db524 r4b6635a7  
    8787        /** Number of blocks */
    8888        aoff64_t nblocks;
     89        /** Service ID */
     90        service_id_t svc_id;
    8991} vbd_part_info_t;
    9092
  • uspace/lib/c/include/vol.h

    r6a0db524 r4b6635a7  
    4040#include <stdint.h>
    4141#include <types/label.h>
     42#include <types/vol.h>
    4243
    4344/** Volume service */
     
    4647        async_sess_t *sess;
    4748} vol_t;
    48 
    49 typedef enum {
    50         /** Partition is empty */
    51         vpc_empty,
    52         /** Partition contains a recognized filesystem */
    53         vpc_fs,
    54         /** Partition contains unrecognized data */
    55         vpc_unknown
    56 } vol_part_cnt_t;
    57 
    58 /** File system type */
    59 typedef enum {
    60         fs_exfat,
    61         fs_fat,
    62         fs_minix,
    63         fs_ext4
    64 } vol_fstype_t;
    6549
    6650/** Partition information */
  • uspace/lib/fdisk/include/fdisk.h

    r6a0db524 r4b6635a7  
    7171extern int fdisk_cap_parse(const char *, fdisk_cap_t *);
    7272extern int fdisk_ltype_format(label_type_t, char **);
    73 extern int fdisk_fstype_format(fdisk_fstype_t, char **);
     73extern int fdisk_fstype_format(vol_fstype_t, char **);
    7474extern int fdisk_pkind_format(label_pkind_t, char **);
    7575
  • uspace/lib/fdisk/include/types/fdisk.h

    r6a0db524 r4b6635a7  
    4141#include <stdint.h>
    4242#include <types/label.h>
     43#include <types/vol.h>
    4344#include <vbd.h>
    4445#include <vol.h>
     
    5758
    5859#define CU_LIMIT (cu_ybyte + 1)
    59 
    60 /** File system type */
    61 typedef enum {
    62         fdfs_none = 0,
    63         fdfs_unknown,
    64         fdfs_exfat,
    65         fdfs_fat,
    66         fdfs_minix,
    67         fdfs_ext4
    68 } fdisk_fstype_t;
    69 
    70 /** Highest fstype value + 1 */
    71 #define FDFS_LIMIT (fdfs_ext4 + 1)
    72 /** Lowest fstype allowed for creation */
    73 #define FDFS_CREATE_LO fdfs_exfat
    74 /** Highest fstype allowed for creation + 1 */
    75 #define FDFS_CREATE_HI (fdfs_ext4 + 1)
    7660
    7761/** Partition capacity */
     
    143127        /** Partition kind */
    144128        label_pkind_t pkind;
     129        /** Partition contents */
     130        vol_part_cnt_t pcnt;
    145131        /** File system type */
    146         fdisk_fstype_t fstype;
     132        vol_fstype_t fstype;
    147133        /** Partition ID */
    148134        vbd_part_id_t part_id;
     
    153139        /** Number of blocks */
    154140        aoff64_t nblocks;
     141        /** Service ID */
     142        service_id_t svc_id;
    155143} fdisk_part_t;
    156144
     
    162150        label_pkind_t pkind;
    163151        /** File system type */
    164         fdisk_fstype_t fstype;
     152        vol_fstype_t fstype;
    165153} fdisk_part_spec_t;
    166154
     
    171159        /** Partition kind */
    172160        label_pkind_t pkind;
     161        /** Partition contents */
     162        vol_part_cnt_t pcnt;
    173163        /** File system type */
    174         fdisk_fstype_t fstype;
     164        vol_fstype_t fstype;
    175165} fdisk_part_info_t;
    176166
  • uspace/lib/fdisk/src/fdisk.c

    r6a0db524 r4b6635a7  
    261261        fdisk_part_t *part;
    262262        vbd_part_info_t pinfo;
     263        vol_part_info_t vpinfo;
    263264        int rc;
    264265
     
    268269
    269270        rc = vbd_part_get_info(dev->fdisk->vbd, partid, &pinfo);
     271        if (rc != EOK) {
     272                rc = EIO;
     273                goto error;
     274        }
     275
     276        rc = vol_part_info(dev->fdisk->vol, pinfo.svc_id, &vpinfo);
    270277        if (rc != EOK) {
    271278                rc = EIO;
     
    278285        part->nblocks = pinfo.nblocks;
    279286        part->pkind = pinfo.pkind;
     287        part->svc_id = pinfo.svc_id;
     288        part->pcnt = vpinfo.pcnt;
     289        part->fstype = vpinfo.fstype;
    280290
    281291        switch (part->pkind) {
     
    551561{
    552562        info->capacity = part->capacity;
     563        info->pcnt = part->pcnt;
    553564        info->fstype = part->fstype;
    554565        info->pkind = part->pkind;
     
    589600
    590601        printf("fdisk_part_create() - done\n");
     602        part->pcnt = vpc_fs;
    591603        part->fstype = pspec->fstype;
    592604        part->capacity = pspec->capacity;
     
    700712}
    701713
    702 int fdisk_fstype_format(fdisk_fstype_t fstype, char **rstr)
     714int fdisk_fstype_format(vol_fstype_t fstype, char **rstr)
    703715{
    704716        const char *sfstype;
     
    707719        sfstype = NULL;
    708720        switch (fstype) {
    709         case fdfs_none:
    710                 sfstype = "None";
    711                 break;
    712         case fdfs_unknown:
    713                 sfstype = "Unknown";
    714                 break;
    715         case fdfs_exfat:
     721        case fs_exfat:
    716722                sfstype = "ExFAT";
    717723                break;
    718         case fdfs_fat:
     724        case fs_fat:
    719725                sfstype = "FAT";
    720726                break;
    721         case fdfs_minix:
     727        case fs_minix:
    722728                sfstype = "MINIX";
    723729                break;
    724         case fdfs_ext4:
     730        case fs_ext4:
    725731                sfstype = "Ext4";
    726732                break;
     
    916922        int rc;
    917923
    918 //      pspec->fstype
    919924        printf("fdisk_part_spec_prepare() - dev=%p pspec=%p vpspec=%p\n", dev, pspec,
    920925            vpspec);
     
    935940
    936941        switch (pspec->fstype) {
    937         case fdfs_none:
    938         case fdfs_unknown:
    939                 break;
    940         case fdfs_exfat:
     942        case fs_exfat:
    941943                pcnt = lpc_exfat;
    942944                break;
    943         case fdfs_fat:
     945        case fs_fat:
    944946                pcnt = lpc_fat32; /* XXX Detect FAT12/16 vs FAT32 */
    945947                break;
    946         case fdfs_minix:
     948        case fs_minix:
    947949                pcnt = lpc_minix;
    948950                break;
    949         case fdfs_ext4:
     951        case fs_ext4:
    950952                pcnt = lpc_ext4;
    951953                break;
  • uspace/srv/bd/vbd/disk.c

    r6a0db524 r4b6635a7  
    647647        pinfo->block0 = lpinfo.block0;
    648648        pinfo->nblocks = lpinfo.nblocks;
     649        pinfo->svc_id = part->svc_id;
    649650        return EOK;
    650651}
  • uspace/srv/volsrv/Makefile

    r6a0db524 r4b6635a7  
    2828
    2929USPACE_PREFIX = ../..
     30
     31LIBS = $(LIBBLOCK_PREFIX)/libblock.a
     32EXTRA_CFLAGS = -I $(LIBBLOCK_PREFIX)
     33
    3034BINARY = volsrv
    3135
    3236SOURCES = \
     37        empty.c \
    3338        part.c \
    3439        volsrv.c
  • uspace/srv/volsrv/part.c

    r6a0db524 r4b6635a7  
    4343#include <str.h>
    4444
     45#include "empty.h"
    4546#include "part.h"
    4647#include "types/part.h"
     
    130131{
    131132        vol_part_t *part;
     133        bool empty;
    132134        int rc;
    133135
     
    148150
    149151        log_msg(LOG_DEFAULT, LVL_NOTE, "Probe partition %s", part->svc_name);
    150 
    151         part->pcnt = vpc_unknown;
     152        rc = vol_part_is_empty(sid, &empty);
     153        if (rc != EOK) {
     154                log_msg(LOG_DEFAULT, LVL_ERROR, "Failed determining if "
     155                    "partition is empty.");
     156                goto error;
     157        }
     158
     159        part->pcnt = empty ? vpc_empty : vpc_unknown;
    152160        list_append(&part->lparts, &vol_parts);
    153161
  • uspace/srv/volsrv/part.h

    r6a0db524 r4b6635a7  
    3636
    3737#ifndef PART_H_
    38 #define pART_H_
     38#define PART_H_
    3939
     40#include <loc.h>
    4041#include <sys/types.h>
    4142#include <vol.h>
Note: See TracChangeset for help on using the changeset viewer.