Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset 89128f3 in mainline


Ignore:
Timestamp:
2011-12-08T23:12:14Z (10 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master
Children:
9c986d3
Parents:
b25199bc (diff), c40f385 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge mainline changes.

Files:
23 edited

Legend:

Unmodified
Added
Removed
  • boot/Makefile.grub

    rb25199bc r89128f3  
    8989                        echo "  $(MULTIBOOT_CMD) /boot/$$module" >> $(BOOT_CONFIG) ; \
    9090                else \
    91                         echo "  $(MODULE_CMD) /boot/$$module" >> $(BOOT_CONFIG) ; \
     91                        echo "  $(MODULE_CMD) /boot/$$module /boot/$$module" >> $(BOOT_CONFIG) ; \
    9292                fi \
    9393        done
  • kernel/arch/amd64/src/boot/multiboot2.S

    rb25199bc r89128f3  
    5555                .long MULTIBOOT2_TAG_MODULE
    5656                .long MULTIBOOT2_TAG_MEMMAP
     57#ifdef CONFIG_FB
    5758                .long MULTIBOOT2_TAG_FBINFO
     59#endif
    5860        tag_info_req_end:
    5961       
     
    8587        tag_flags_end:
    8688       
     89#ifdef CONFIG_FB
    8790        /* Framebuffer tag */
    8891        tag_framebuffer_start:
     
    9497                .long CONFIG_BFB_BPP
    9598        tag_framebuffer_end:
     99#endif
    96100       
    97101        /* Module alignment tag */
  • kernel/arch/ia32/src/boot/multiboot2.S

    rb25199bc r89128f3  
    5353                .long MULTIBOOT2_TAG_MODULE
    5454                .long MULTIBOOT2_TAG_MEMMAP
     55#ifdef CONFIG_FB
    5556                .long MULTIBOOT2_TAG_FBINFO
     57#endif
    5658        tag_info_req_end:
    5759       
     
    8385        tag_flags_end:
    8486       
     87#ifdef CONFIG_FB
    8588        /* Framebuffer tag */
    8689        tag_framebuffer_start:
     
    9295                .long CONFIG_BFB_BPP
    9396        tag_framebuffer_end:
     97#endif
    9498       
    9599        /* Module alignment tag */
  • kernel/genarch/src/drivers/i8042/i8042.c

    rb25199bc r89128f3  
    4444#include <mm/slab.h>
    4545#include <ddi/device.h>
     46#include <time/delay.h>
    4647
    4748#define i8042_SET_COMMAND  0x60
     
    5152#define i8042_BUFFER_FULL_MASK  0x01
    5253#define i8042_WAIT_MASK         0x02
     54
     55#define i8042_TIMEOUT  65536
    5356
    5457static irq_ownership_t i8042_claim(irq_t *irq)
     
    7780static void i8042_clear_buffer(i8042_t *dev)
    7881{
    79         while (pio_read_8(&dev->status) & i8042_BUFFER_FULL_MASK)
     82        for (uint32_t i = 0; i < i8042_TIMEOUT; i++) {
     83                if ((pio_read_8(&dev->status) & i8042_BUFFER_FULL_MASK) == 0)
     84                        break;
     85               
    8086                (void) pio_read_8(&dev->data);
     87                delay(50);  /* 50 us think time */
     88        }
     89}
     90
     91static void i8042_send_command(i8042_t *dev, uint8_t cmd)
     92{
     93        for (uint32_t i = 0; i < i8042_TIMEOUT; i++) {
     94                if ((pio_read_8(&dev->status) & i8042_WAIT_MASK) == 0)
     95                        break;
     96               
     97                delay(50);  /* 50 us think time */
     98        }
     99       
     100        pio_write_8(&dev->status, cmd);
     101        delay(10000);  /* 10 ms think time */
    81102}
    82103
     
    84105i8042_instance_t *i8042_init(i8042_t *dev, inr_t inr)
    85106{
    86         i8042_instance_t *instance
    87             = malloc(sizeof(i8042_instance_t), FRAME_ATOMIC);
     107        i8042_instance_t *instance =
     108            malloc(sizeof(i8042_instance_t), FRAME_ATOMIC);
    88109        if (instance) {
    89110                instance->i8042 = dev;
     
    96117                instance->irq.handler = i8042_irq_handler;
    97118                instance->irq.instance = instance;
    98                
    99119        }
    100120       
     
    107127        ASSERT(kbrdin);
    108128       
     129        i8042_clear_buffer(instance->i8042);
     130       
    109131        instance->kbrdin = kbrdin;
    110132        irq_register(&instance->irq);
    111         i8042_clear_buffer(instance->i8042);
    112133}
    113134
     
    116137{
    117138        interrupts_disable();
    118        
    119139        i8042_clear_buffer(dev);
    120        
    121         /* Reset CPU */
    122         pio_write_8(&dev->status, i8042_CPU_RESET);
     140        i8042_send_command(dev, i8042_CPU_RESET);
    123141}
    124142
  • kernel/genarch/src/fb/bfb.c

    rb25199bc r89128f3  
    4040#include <console/console.h>
    4141
    42 uintptr_t bfb_addr = (uintptr_t) -1;
     42uintptr_t bfb_addr = 0;
    4343uint32_t bfb_width = 0;
    4444uint32_t bfb_height = 0;
     
    5757bool bfb_init(void)
    5858{
    59         if ((bfb_width == 0) || (bfb_height == 0))
     59        if ((bfb_addr == 0) || (bfb_width == 0) || (bfb_height == 0) ||
     60            (bfb_bpp == 0) || (bfb_scanline == 0))
    6061                return false;
    6162       
  • kernel/genarch/src/multiboot/multiboot2.c

    rb25199bc r89128f3  
    7676static void multiboot2_fbinfo(const multiboot2_fbinfo_t *fbinfo)
    7777{
     78#ifdef CONFIG_FB
    7879        if (fbinfo->visual == MULTIBOOT2_VISUAL_RGB) {
    7980                bfb_addr = fbinfo->addr;
     
    9293                bfb_blue_size = fbinfo->rgb.blue_size;
    9394        }
     95#endif
    9496}
    9597
  • kernel/generic/src/main/main.c

    rb25199bc r89128f3  
    262262         * Create the first thread.
    263263         */
    264         thread_t *kinit_thread
    265                 = thread_create(kinit, NULL, kernel, 0, "kinit", true);
     264        thread_t *kinit_thread =
     265            thread_create(kinit, NULL, kernel, 0, "kinit", true);
    266266        if (!kinit_thread)
    267267                panic("Cannot create kinit thread.");
  • uspace/drv/bus/isa/isa.ma

    rb25199bc r89128f3  
    1 9       pci/ven=8086&dev=7000
     19 pci/ven=8086&dev=7000
  • uspace/drv/bus/usb/ehci/ehci.ma

    rb25199bc r89128f3  
    1 10 pci/ven=1002&dev=4345
    2 10 pci/ven=1002&dev=4386
    3 10 pci/ven=1002&dev=4396
    4 10 pci/ven=1002&dev=4373
    5 10 pci/ven=1022&dev=7463
    6 10 pci/ven=1022&dev=7808
    7 10 pci/ven=102f&dev=01b5
    8 10 pci/ven=10cf&dev=1415
    9 10 pci/ven=10de&dev=00e8
    10 10 pci/ven=10de&dev=055f
    11 10 pci/ven=10de&dev=056a
    12 10 pci/ven=10de&dev=077c
    13 10 pci/ven=10de&dev=077e
    14 10 pci/ven=10de&dev=0aa6
    15 10 pci/ven=10de&dev=0aa9
    16 10 pci/ven=10de&dev=0aaa
    17 10 pci/ven=10de&dev=0d9d
    18 10 pci/ven=1166&dev=0414
    19 10 pci/ven=1166&dev=0416
    20 10 pci/ven=1414&dev=5805
    21 10 pci/ven=1414&dev=5807
    22 10 pci/ven=15ad&dev=0770
    23 10 pci/ven=17a0&dev=8084
    24 10 pci/ven=8086&dev=24cd
    25 10 pci/ven=8086&dev=24dd
    26 10 pci/ven=8086&dev=265c
    27 10 pci/ven=8086&dev=268c
    28 10 pci/ven=8086&dev=27cc
    29 10 pci/ven=8086&dev=2836
    30 10 pci/ven=8086&dev=283a
    31 10 pci/ven=8086&dev=293a
    32 10 pci/ven=8086&dev=293c
    33 10 pci/ven=8086&dev=3a3a
    34 10 pci/ven=8086&dev=3a3c
    35 10 pci/ven=8086&dev=3a6a
    36 10 pci/ven=8086&dev=3a6c
    37 10 pci/ven=8086&dev=8117
    38 10 pci/ven=8086&dev=8807
    39 10 pci/ven=8086&dev=880f
     110 pci/class=0c&subclass=03&progif=20
  • uspace/drv/bus/usb/ohci/ohci.ma

    rb25199bc r89128f3  
    1 10 pci/ven=106b&dev=0026
    2 10 pci/ven=106b&dev=003f
    3 10 pci/ven=10de&dev=0aa5
    4 
    5 10 pci/ven=1002&dev=4374
    6 10 pci/ven=1002&dev=4375
    7 
    8 10 pci/ven=1002&dev=4387
    9 10 pci/ven=1002&dev=4388
    10 10 pci/ven=1002&dev=4389
    11 10 pci/ven=1002&dev=438a
    12 10 pci/ven=1002&dev=438b
    13 10 pci/ven=1002&dev=4397
    14 10 pci/ven=1002&dev=4398
    15 10 pci/ven=1002&dev=4399
     110 pci/class=0c&subclass=03&progif=10
  • uspace/drv/bus/usb/uhci/uhci.ma

    rb25199bc r89128f3  
    1 10 pci/ven=8086&dev=7020
    2 10 pci/ven=8086&dev=7112
    3 
    4 10 pci/ven=8086&dev=27c8
    5 10 pci/ven=8086&dev=27c9
    6 10 pci/ven=8086&dev=27ca
    7 10 pci/ven=8086&dev=27cb
    8 
    9 10 pci/ven=8086&dev=2830
    10 10 pci/ven=8086&dev=2831
    11 10 pci/ven=8086&dev=2832
    12 10 pci/ven=8086&dev=2834
    13 10 pci/ven=8086&dev=2835
    14 
    15 10 pci/ven=8086&dev=2934
    16 10 pci/ven=8086&dev=2935
    17 10 pci/ven=8086&dev=2936
    18 10 pci/ven=8086&dev=2937
    19 10 pci/ven=8086&dev=2938
    20 10 pci/ven=8086&dev=2939
    21 
    22 10 pci/ven=8086&dev=24c2
    23 10 pci/ven=8086&dev=24c4
    24 10 pci/ven=8086&dev=24c7
    25 
    26 10 pci/ven=8086&dev=2688
    27 10 pci/ven=8086&dev=2689
    28 10 pci/ven=8086&dev=268a
    29 10 pci/ven=8086&dev=268b
     110 pci/class=0c&subclass=03&progif=00
  • uspace/drv/bus/usb/vhc/vhc.ma

    rb25199bc r89128f3  
    1110 usb&hc=vhc
    2 
  • uspace/lib/c/generic/ddi.c

    rb25199bc r89128f3  
    5353}
    5454
    55 /** Map piece of physical memory to task.
     55/** Map a piece of physical memory to task.
    5656 *
    5757 * Caller of this function must have the CAP_MEM_MANAGER capability.
    5858 *
    59  * @param pf            Physical address of the starting frame.
    60  * @param vp            Virtual address of the starting page.
    61  * @param pages         Number of pages to map.
    62  * @param flags         Flags for the new address space area.
     59 * @param pf    Physical address of the starting frame.
     60 * @param vp    Virtual address of the starting page.
     61 * @param pages Number of pages to map.
     62 * @param flags Flags for the new address space area.
    6363 *
    64  * @return              0 on success, EPERM if the caller lacks the
    65  *                      CAP_MEM_MANAGER capability, ENOENT if there is no task
    66  *                      with specified ID and ENOMEM if there was some problem
    67  *                      in creating address space area.
     64 * @return EOK on success
     65 * @return EPERM if the caller lacks the CAP_MEM_MANAGER capability
     66 * @return ENOENT if there is no task with specified ID
     67 * @return ENOMEM if there was some problem in creating
     68 *         the address space area.
     69 *
    6870 */
    69 int physmem_map(void *pf, void *vp, unsigned long pages, int flags)
     71int physmem_map(void *pf, void *vp, size_t pages, unsigned int flags)
    7072{
    71         return __SYSCALL4(SYS_PHYSMEM_MAP, (sysarg_t) pf, (sysarg_t) vp, pages,
    72             flags);
     73        return __SYSCALL4(SYS_PHYSMEM_MAP, (sysarg_t) pf, (sysarg_t) vp,
     74            pages, flags);
    7375}
    7476
  • uspace/lib/c/include/ddi.h

    rb25199bc r89128f3  
    4141
    4242extern int device_assign_devno(void);
    43 extern int physmem_map(void *, void *, unsigned long, int);
     43extern int physmem_map(void *, void *, size_t, unsigned int);
    4444extern int iospace_enable(task_id_t, void *, unsigned long);
    4545extern int pio_enable(void *, size_t, void **);
  • uspace/lib/minix/minix.h

    rb25199bc r89128f3  
    3939#define S_ISDIR(m)              (((m) & S_IFMT) == S_IFDIR)
    4040#define S_ISREG(m)              (((m) & S_IFMT) == S_IFREG)
    41 #define S_IFDIR                 0040000         /*Directory*/
    42 #define S_IFREG                 0100000         /*Regular file*/
     41#define S_IFDIR                 0040000         /* Directory */
     42#define S_IFREG                 0100000         /* Regular file */
    4343#define S_IFMT                  00170000
    4444
    45 /*The following block sizes are valid only on V3 filesystem*/
     45/* The following block sizes are valid only on V3 filesystem */
    4646#define MFS_MIN_BLOCKSIZE       1024
    4747#define MFS_MAX_BLOCKSIZE       4096
     
    8888#define MFS_ERROR_FS            0x0002
    8989
    90 /*MFS V1/V2 superblock data on disk*/
     90/* MFS V1/V2 superblock data on disk */
    9191struct mfs_superblock {
    92         /*Total number of inodes on the device*/
     92        /* Total number of inodes on the device */
    9393        uint16_t        s_ninodes;
    94         /*Total number of zones on the device*/
     94        /* Total number of zones on the device */
    9595        uint16_t        s_nzones;
    96         /*Number of inode bitmap blocks*/
     96        /* Number of inode bitmap blocks */
    9797        uint16_t        s_ibmap_blocks;
    98         /*Number of zone bitmap blocks*/
     98        /* Number of zone bitmap blocks */
    9999        uint16_t        s_zbmap_blocks;
    100         /*First data zone on device*/
     100        /* First data zone on device */
    101101        uint16_t        s_first_data_zone;
    102         /*Base 2 logarithm of the zone to block ratio*/
     102        /* Base 2 logarithm of the zone to block ratio */
    103103        uint16_t        s_log2_zone_size;
    104         /*Maximum file size expressed in bytes*/
     104        /* Maximum file size expressed in bytes */
    105105        uint32_t        s_max_file_size;
    106106        /*
     
    109109         */
    110110        uint16_t        s_magic;
    111         /*Flag used to detect FS errors*/
     111        /* Flag used to detect FS errors*/
    112112        uint16_t        s_state;
    113         /*Total number of zones on the device (V2 only)*/
     113        /* Total number of zones on the device (V2 only) */
    114114        uint32_t        s_nzones2;
    115115} __attribute__ ((packed));
    116116
    117117
    118 /*MFS V3 superblock data on disk*/
     118/* MFS V3 superblock data on disk */
    119119struct mfs3_superblock {
    120         /*Total number of inodes on the device*/
     120        /* Total number of inodes on the device */
    121121        uint32_t        s_ninodes;
    122122        uint16_t        s_pad0;
    123         /*Number of inode bitmap blocks*/
     123        /* Number of inode bitmap blocks */
    124124        int16_t         s_ibmap_blocks;
    125         /*Number of zone bitmap blocks*/
     125        /* Number of zone bitmap blocks */
    126126        int16_t         s_zbmap_blocks;
    127         /*First data zone on device*/
     127        /* First data zone on device */
    128128        uint16_t        s_first_data_zone;
    129         /*Base 2 logarithm of the zone to block ratio*/
     129        /* Base 2 logarithm of the zone to block ratio */
    130130        int16_t         s_log2_zone_size;
    131131        int16_t         s_pad1;
    132         /*Maximum file size expressed in bytes*/
     132        /* Maximum file size expressed in bytes */
    133133        uint32_t        s_max_file_size;
    134         /*Total number of zones on the device*/
     134        /* Total number of zones on the device */
    135135        uint32_t        s_nzones;
    136136        /*
     
    140140        int16_t         s_magic;
    141141        int16_t         s_pad2;
    142         /*Filesystem block size expressed in bytes*/
     142        /* Filesystem block size expressed in bytes */
    143143        uint16_t        s_block_size;
    144         /*Filesystem disk format version*/
     144        /* Filesystem disk format version */
    145145        int8_t          s_disk_version;
    146146} __attribute__ ((packed));
    147147
    148 /*MinixFS V1 inode structure as it is on disk*/
     148/* MinixFS V1 inode structure as it is on disk */
    149149struct mfs_inode {
    150150        uint16_t        i_mode;
     
    154154        uint8_t         i_gid;
    155155        uint8_t         i_nlinks;
    156         /*Block numbers for direct zones*/
     156        /* Block numbers for direct zones */
    157157        uint16_t        i_dzone[V1_NR_DIRECT_ZONES];
    158         /*Block numbers for indirect zones*/
     158        /* Block numbers for indirect zones */
    159159        uint16_t        i_izone[V1_NR_INDIRECT_ZONES];
    160160} __attribute__ ((packed));
    161161
    162 /*MinixFS V2 inode structure as it is on disk (also valid for V3).*/
     162/* MinixFS V2 inode structure as it is on disk (also valid for V3). */
    163163struct mfs2_inode {
    164164        uint16_t        i_mode;
     
    170170        int32_t         i_mtime;
    171171        int32_t         i_ctime;
    172         /*Block numbers for direct zones*/
     172        /* Block numbers for direct zones */
    173173        uint32_t        i_dzone[V2_NR_DIRECT_ZONES];
    174         /*Block numbers for indirect zones*/
     174        /* Block numbers for indirect zones */
    175175        uint32_t        i_izone[V2_NR_INDIRECT_ZONES];
    176176} __attribute__ ((packed));
    177177
    178 /*MinixFS V1/V2 directory entry on-disk structure*/
     178/* MinixFS V1/V2 directory entry on-disk structure */
    179179struct mfs_dentry {
    180180        uint16_t d_inum;
     
    182182};
    183183
    184 /*MinixFS V3 directory entry on-disk structure*/
     184/* MinixFS V3 directory entry on-disk structure */
    185185struct mfs3_dentry {
    186186        uint32_t d_inum;
  • uspace/srv/bd/rd/rd.c

    rb25199bc r89128f3  
    5555#include <ipc/bd.h>
    5656#include <macros.h>
    57 
    58 #define NAME "rd"
     57#include <inttypes.h>
     58
     59#define NAME  "rd"
    5960
    6061/** Pointer to the ramdisk's image */
     
    208209static bool rd_init(void)
    209210{
    210         int ret = sysinfo_get_value("rd.size", &rd_size);
    211         if ((ret != EOK) || (rd_size == 0)) {
     211        sysarg_t size;
     212        int ret = sysinfo_get_value("rd.size", &size);
     213        if ((ret != EOK) || (size == 0)) {
    212214                printf("%s: No RAM disk found\n", NAME);
    213215                return false;
    214216        }
    215217       
    216         sysarg_t rd_ph_addr;
    217         ret = sysinfo_get_value("rd.address.physical", &rd_ph_addr);
    218         if ((ret != EOK) || (rd_ph_addr == 0)) {
     218        sysarg_t addr_phys;
     219        ret = sysinfo_get_value("rd.address.physical", &addr_phys);
     220        if ((ret != EOK) || (addr_phys == 0)) {
    219221                printf("%s: Invalid RAM disk physical address\n", NAME);
    220222                return false;
    221223        }
    222224       
     225        rd_size = ALIGN_UP(size, block_size);
    223226        rd_addr = as_get_mappable_page(rd_size);
    224227       
    225         int flags = AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE;
    226         int retval = physmem_map((void *) rd_ph_addr, rd_addr,
     228        unsigned int flags =
     229            AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE;
     230        ret = physmem_map((void *) addr_phys, rd_addr,
    227231            ALIGN_UP(rd_size, PAGE_SIZE) >> PAGE_WIDTH, flags);
    228        
    229         if (retval < 0) {
     232        if (ret < 0) {
    230233                printf("%s: Error mapping RAM disk\n", NAME);
    231234                return false;
    232235        }
    233236       
    234         printf("%s: Found RAM disk at %p, %zu bytes\n", NAME,
    235             (void *) rd_ph_addr, rd_size);
    236        
    237         int rc = loc_server_register(NAME, rd_connection);
    238         if (rc < 0) {
    239                 printf("%s: Unable to register driver (%d)\n", NAME, rc);
     237        printf("%s: Found RAM disk at %p, %" PRIun " bytes\n", NAME,
     238            (void *) addr_phys, size);
     239       
     240        ret = loc_server_register(NAME, rd_connection);
     241        if (ret < 0) {
     242                printf("%s: Unable to register driver (%d)\n", NAME, ret);
    240243                return false;
    241244        }
    242245       
    243246        service_id_t service_id;
    244         if (loc_service_register("bd/initrd", &service_id) != EOK) {
     247        ret = loc_service_register("bd/initrd", &service_id);
     248        if (ret != EOK) {
    245249                printf("%s: Unable to register device service\n", NAME);
    246250                return false;
  • uspace/srv/fs/exfat/exfat_directory.c

    rb25199bc r89128f3  
    101101{
    102102        uint32_t i;
    103         int rc;
     103        int rc = EOK;
    104104
    105105        i = (di->pos * sizeof(exfat_dentry_t)) / BPS(di->bs);
     
    108108
    109109        if (di->b && di->bnum != i) {
    110                 block_put(di->b);
     110                rc = block_put(di->b);
    111111                di->b = NULL;
    112112        }
     
    126126                di->bnum = i;
    127127        }
    128         return EOK;
     128        return rc;
    129129}
    130130
     
    434434        int rc, count;
    435435        exfat_dentry_t *de;
     436
     437        di->pos = pos;
    436438
    437439        rc = exfat_directory_get(di, &de);
  • uspace/srv/fs/mfs/mfs.h

    rb25199bc r89128f3  
    4848#define NAME            "mfs"
    4949
    50 //#define DEBUG_MODE
     50/* #define DEBUG_MODE */
    5151
    5252#define min(a, b)       ((a) < (b) ? (a) : (b))
     
    7171} mfs_version_t;
    7272
    73 /*Generic MinixFS superblock*/
     73/* Generic MinixFS superblock */
    7474struct mfs_sb_info {
    7575        uint32_t ninodes;
     
    8484        uint16_t state;
    8585
    86         /*The following fields do not exist on disk but only in memory*/
     86        /* The following fields do not exist on disk but only in memory */
    8787        unsigned long itable_size;
    8888        mfs_version_t fs_version;
     
    9797};
    9898
    99 /*Generic MinixFS inode*/
     99/* Generic MinixFS inode */
    100100struct mfs_ino_info {
    101101        uint16_t        i_mode;
     
    107107        int32_t         i_mtime;
    108108        int32_t         i_ctime;
    109         /*Block numbers for direct zones*/
     109        /* Block numbers for direct zones */
    110110        uint32_t        i_dzone[V2_NR_DIRECT_ZONES];
    111         /*Block numbers for indirect zones*/
     111        /* Block numbers for indirect zones */
    112112        uint32_t        i_izone[V2_NR_INDIRECT_ZONES];
    113113
    114         /*The following fields do not exist on disk but only in memory*/
     114        /* The following fields do not exist on disk but only in memory */
    115115        bool dirty;
    116116        fs_index_t index;
    117117};
    118118
    119 /*Generic MFS directory entry*/
     119/* Generic MFS directory entry */
    120120struct mfs_dentry_info {
    121121        uint32_t d_inum;
    122122        char d_name[MFS3_MAX_NAME_LEN + 1];
    123123
    124         /*The following fields do not exist on disk but only in memory*/
    125 
    126         /*Index of the dentry in the list*/
     124        /* The following fields do not exist on disk but only in memory */
     125
     126        /* Index of the dentry in the list */
    127127        unsigned index;
    128         /*Pointer to the node at witch the dentry belongs*/
     128        /* Pointer to the node at witch the dentry belongs */
    129129        struct mfs_node *node;
    130130};
     
    136136};
    137137
    138 /*MinixFS node in core*/
     138/* MinixFS node in core */
    139139struct mfs_node {
    140140        struct mfs_ino_info *ino_i;
     
    145145};
    146146
    147 /*mfs_ops.c*/
     147/* mfs_ops.c */
    148148extern vfs_out_ops_t mfs_ops;
    149149extern libfs_ops_t mfs_libfs_ops;
     
    152152mfs_global_init(void);
    153153
    154 /*mfs_inode.c*/
     154/* mfs_inode.c */
    155155extern int
    156156mfs_get_inode(struct mfs_instance *inst, struct mfs_ino_info **ino_i,
    157           fs_index_t index);
     157    fs_index_t index);
    158158
    159159extern int
     
    163163mfs_inode_shrink(struct mfs_node *mnode, size_t size_shrink);
    164164
    165 /*mfs_rw.c*/
     165/* mfs_rw.c */
    166166extern int
    167167mfs_read_map(uint32_t *b, const struct mfs_node *mnode, const uint32_t pos);
     
    169169extern int
    170170mfs_write_map(struct mfs_node *mnode, uint32_t pos, uint32_t new_zone,
    171           uint32_t *old_zone);
     171    uint32_t *old_zone);
    172172
    173173extern int
    174174mfs_prune_ind_zones(struct mfs_node *mnode, size_t new_size);
    175175
    176 /*mfs_dentry.c*/
     176/* mfs_dentry.c */
    177177extern int
    178178mfs_read_dentry(struct mfs_node *mnode,
    179                      struct mfs_dentry_info *d_info, unsigned index);
     179    struct mfs_dentry_info *d_info, unsigned index);
    180180
    181181extern int
     
    188188mfs_insert_dentry(struct mfs_node *mnode, const char *d_name, fs_index_t d_inum);
    189189
    190 /*mfs_balloc.c*/
     190/* mfs_balloc.c */
    191191extern int
    192192mfs_alloc_inode(struct mfs_instance *inst, uint32_t *inum);
     
    201201mfs_free_zone(struct mfs_instance *inst, uint32_t zone);
    202202
    203 /*mfs_utils.c*/
     203/* mfs_utils.c */
    204204extern uint16_t
    205205conv16(bool native, uint16_t n);
  • uspace/srv/fs/mfs/mfs_balloc.c

    rb25199bc r89128f3  
    198198                limit = sbi->nzones - sbi->firstdatazone - 1;
    199199        } else {
    200                 /*bid == BMAP_INODE*/
     200                /* bid == BMAP_INODE */
    201201                search = &sbi->isearch;
    202202                start_block = 2;
     
    212212        for (i = *search / bits_per_block; i < nblocks; ++i) {
    213213                r = block_get(&b, inst->service_id, i + start_block,
    214                               BLOCK_FLAGS_NONE);
     214                    BLOCK_FLAGS_NONE);
    215215
    216216                if (r != EOK)
  • uspace/srv/fs/mfs/mfs_dentry.c

    rb25199bc r89128f3  
    168168                return ENAMETOOLONG;
    169169
    170         /*Search the directory entry to be removed*/
     170        /* Search the directory entry to be removed */
    171171        unsigned i;
    172172        for (i = 0; i < mnode->ino_i->i_size / sbi->dirsize ; ++i) {
  • uspace/srv/fs/mfs/mfs_inode.c

    rb25199bc r89128f3  
    235235
    236236        r = block_get(&b, mnode->instance->service_id,
    237                       itable_off + inum / sbi->ino_per_block,
    238                       BLOCK_FLAGS_NONE);
     237            itable_off + inum / sbi->ino_per_block,
     238            BLOCK_FLAGS_NONE);
    239239
    240240        if (r != EOK)
     
    278278
    279279        r = block_get(&b, mnode->instance->service_id,
    280                       itable_off + inum / sbi->ino_per_block,
    281                       BLOCK_FLAGS_NONE);
     280            itable_off + inum / sbi->ino_per_block,
     281            BLOCK_FLAGS_NONE);
    282282
    283283        if (r != EOK)
  • uspace/srv/fs/mfs/mfs_ops.c

    rb25199bc r89128f3  
    664664        struct mfs_node *child = cfn->data;
    665665        struct mfs_sb_info *sbi = parent->instance->sbi;
     666        bool destroy_dentry = false;
    666667
    667668        mfsdebug("%s()\n", __FUNCTION__);
     
    672673        int r = mfs_insert_dentry(parent, name, child->ino_i->index);
    673674        if (r != EOK)
    674                 goto exit_error;
    675 
    676         child->ino_i->i_nlinks++;
    677         child->ino_i->dirty = true;
     675                return r;
    678676
    679677        if (S_ISDIR(child->ino_i->i_mode)) {
     678                if (child->ino_i->i_nlinks != 1) {
     679                        /* It's not possible to hardlink directories in MFS */
     680                        destroy_dentry = true;
     681                        r = EMLINK;
     682                        goto exit;
     683                }
    680684                r = mfs_insert_dentry(child, ".", child->ino_i->index);
    681                 if (r != EOK)
    682                         goto exit_error;
     685                if (r != EOK) {
     686                        destroy_dentry = true;
     687                        goto exit;
     688                }
    683689
    684690                r = mfs_insert_dentry(child, "..", parent->ino_i->index);
    685                 if (r != EOK)
    686                         goto exit_error;
     691                if (r != EOK) {
     692                        destroy_dentry = true;
     693                        goto exit;
     694                }
    687695
    688696                parent->ino_i->i_nlinks++;
     
    690698        }
    691699
    692 exit_error:
     700exit:
     701        if (destroy_dentry) {
     702                int r2 = mfs_remove_dentry(parent, name);
     703                if (r2 != EOK)
     704                        r = r2;
     705        } else {
     706                child->ino_i->i_nlinks++;
     707                child->ino_i->dirty = true;
     708        }
    693709        return r;
    694710}
     
    821837found:
    822838                async_data_read_finalize(callid, d_info.d_name,
    823                                         str_size(d_info.d_name) + 1);
     839                    str_size(d_info.d_name) + 1);
    824840                bytes = ((pos - spos) + 1);
    825841        } else {
  • uspace/srv/fs/mfs/mfs_rw.c

    rb25199bc r89128f3  
    147147                                ino_i->dirty = true;
    148148                        } else {
    149                                 /*Sparse block*/
     149                                /* Sparse block */
    150150                                *b = 0;
    151151                                return EOK;
     
    233233}
    234234
    235 /**Free unused indirect zones from a MINIX inode according to it's new size.
     235/**Free unused indirect zones from a MINIX inode according to its new size.
    236236 *
    237237 * @param mnode         Pointer to a generic MINIX inode in memory.
Note: See TracChangeset for help on using the changeset viewer.