Changeset 630 for trunk/kernel/fs/vfs.c


Ignore:
Timestamp:
May 21, 2019, 6:00:06 PM (20 months ago)
Author:
alain
Message:

1) Fix a bug in the vfs_add_special_dentries() function:
The <.> and <..> dentries must not be created on IOC and on the mapper
for the VFS root directory.
2) Fix a bug in the hal_gpt_allocate_pt2 function, related to the
use of the TSAR_LOCKED attribute to avoid concurrent mapping of the PTD1.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/kernel/fs/vfs.c

    r629 r630  
    29152915    fs_type    = hal_remote_l32( XPTR( child_cxy , &ctx_ptr->type ) );
    29162916
    2917     //////////////////////////// create <.>
     2917    //////////////////////////// create <.> dentry //////////////////////
    29182918    if( child_cxy == local_cxy )     
    29192919    {
     
    29412941
    29422942#if(DEBUG_VFS_ADD_SPECIAL & 1)
     2943cycle = (uint32_t)hal_get_cycles();
    29432944if( DEBUG_VFS_ADD_SPECIAL < cycle )
    2944 printk("\n[%s] thread[%x,%x] created dentry <.> (%x,%x)\n",
    2945 __FUNCTION__, this->process->pid, this->trdid, child_cxy, dentry_ptr );
     2945printk("\n[%s] thread[%x,%x] created dentry <.> (%x,%x) / cycle %d\n",
     2946__FUNCTION__, this->process->pid, this->trdid, child_cxy, dentry_ptr, cycle );
    29462947#endif
    29472948
     
    29692970
    29702971#if(DEBUG_VFS_ADD_SPECIAL & 1)
     2972cycle = (uint32_t)hal_get_cycles();
    29712973if( DEBUG_VFS_ADD_SPECIAL < cycle )
    2972 printk("\n[%s] thread[%x,%x] linked dentry <.> to parent and child inodes\n",
    2973 __FUNCTION__, this->process->pid, this->trdid );
     2974printk("\n[%s] thread[%x,%x] linked dentry <.> to parent and child inodes / cycle %d\n",
     2975__FUNCTION__, this->process->pid, this->trdid, cycle );
    29742976#endif
    29752977
    29762978    // introduce <.> dentry into child directory mapper
    2977     if( child_cxy == local_cxy )
    2978     {
    2979         error = vfs_fs_add_dentry( child_ptr,
    2980                                    dentry_ptr );
    2981     }
    2982     else
    2983     {
    2984         rpc_vfs_fs_add_dentry_client( child_cxy,
    2985                                       child_ptr,
    2986                                       dentry_ptr,
    2987                                       &error );
    2988     }
    2989     if( error )
    2990     {
    2991         printk("\n[ERROR] in %s : cannot introduce dentry <..> in mapper %x\n",
    2992         __FUNCTION__ );
    2993         return -1;
    2994     }
     2979    // only if the target directory is not the root VFS
     2980    if( child_xp != parent_xp )
     2981    {
     2982        if( child_cxy == local_cxy )
     2983        {
     2984            error = vfs_fs_add_dentry( child_ptr,
     2985                                       dentry_ptr );
     2986        }
     2987        else
     2988        {
     2989            rpc_vfs_fs_add_dentry_client( child_cxy,
     2990                                          child_ptr,
     2991                                          dentry_ptr,
     2992                                          &error );
     2993        }
     2994        if( error )
     2995        {
     2996            printk("\n[ERROR] in %s : cannot introduce dentry <..> in mapper %x\n",
     2997            __FUNCTION__ );
     2998            return -1;
     2999        }
    29953000
    29963001#if(DEBUG_VFS_ADD_SPECIAL & 1)
     3002cycle = (uint32_t)hal_get_cycles();
    29973003if( DEBUG_VFS_ADD_SPECIAL < cycle )
    2998 printk("\n[%s] thread[%x,%x] registered dentry <.> in child mapper\n",
    2999 __FUNCTION__, this->process->pid, this->trdid );
    3000 #endif
    3001 
    3002     ///////////////////////////// create <..> dentry
     3004printk("\n[%s] thread[%x,%x] registered dentry <.> in child mapper / cycle %d\n",
     3005__FUNCTION__, this->process->pid, this->trdid, cycle );
     3006#endif
     3007
     3008    }
     3009
     3010    ///////////////////////////// create <..> dentry ///////////////////////
    30033011    if( child_cxy == local_cxy )     
    30043012    {
     
    30263034
    30273035#if(DEBUG_VFS_ADD_SPECIAL & 1)
     3036cycle = (uint32_t)hal_get_cycles();
    30283037if( DEBUG_VFS_ADD_SPECIAL < cycle )
    3029 printk("\n[%s] thread[%x,%x] created dentry <..> (%x,%x)\n",
    3030 __FUNCTION__, this->process->pid, this->trdid, child_cxy, dentry_ptr );
     3038printk("\n[%s] thread[%x,%x] created dentry <..> (%x,%x) / cycle %d\n",
     3039__FUNCTION__, this->process->pid, this->trdid, child_cxy, dentry_ptr, cycle );
    30313040#endif
    30323041
     
    30533062
    30543063#if(DEBUG_VFS_ADD_SPECIAL & 1)
     3064cycle = (uint32_t)hal_get_cycles();
    30553065if( DEBUG_VFS_ADD_SPECIAL < cycle )
    3056 printk("\n[%s] thread[%x,%x] linked dentry <..> to parent and child inodes\n",
    3057 __FUNCTION__, this->process->pid, this->trdid );
     3066printk("\n[%s] thread[%x,%x] linked dentry <..> to parent and child inodes / cycle %d\n",
     3067__FUNCTION__, this->process->pid, this->trdid, cycle );
    30583068#endif
    30593069
    30603070    // introduce <..> dentry into child directory mapper
    3061     if( child_cxy == local_cxy )
    3062     {
    3063         error = vfs_fs_add_dentry( child_ptr,
    3064                                    dentry_ptr );
    3065     }
    3066     else
    3067     {
    3068         rpc_vfs_fs_add_dentry_client( child_cxy,
    3069                                       child_ptr,
    3070                                       dentry_ptr,
    3071                                       &error );
    3072     }
    3073     if( error )
    3074     {
    3075         printk("\n[ERROR] in %s : cannot introduce dentry <..> in mapper %x\n",
    3076         __FUNCTION__ );
    3077         return -1;
    3078     }
     3071    // only if the target directory is not the root VFS
     3072    if( child_xp != parent_xp )
     3073    {
     3074        if( child_cxy == local_cxy )
     3075        {
     3076            error = vfs_fs_add_dentry( child_ptr,
     3077                                       dentry_ptr );
     3078        }
     3079        else
     3080        {
     3081            rpc_vfs_fs_add_dentry_client( child_cxy,
     3082                                          child_ptr,
     3083                                          dentry_ptr,
     3084                                          &error );
     3085        }
     3086        if( error )
     3087        {
     3088            printk("\n[ERROR] in %s : cannot introduce dentry <..> in mapper %x\n",
     3089            __FUNCTION__ );
     3090            return -1;
     3091        }
    30793092
    30803093#if(DEBUG_VFS_ADD_SPECIAL & 1)
     3094cycle = (uint32_t)hal_get_cycles();
    30813095if( DEBUG_VFS_ADD_SPECIAL < cycle )
    3082 printk("\n[%s] thread[%x,%x] registered dentry <..> in child mapper\n",
    3083 __FUNCTION__, this->process->pid, this->trdid );
    3084 #endif
     3096printk("\n[%s] thread[%x,%x] registered dentry <..> in child mapper / cycle %d\n",
     3097__FUNCTION__, this->process->pid, this->trdid, cycle );
     3098#endif
     3099
     3100    }
    30853101
    30863102#if DEBUG_VFS_ADD_SPECIAL
Note: See TracChangeset for help on using the changeset viewer.