Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/fs/mfs/mfs_ops.c

    rc2e50d7 r4c3ad56  
    664664        struct mfs_node *child = cfn->data;
    665665        struct mfs_sb_info *sbi = parent->instance->sbi;
    666         bool destroy_dentry = false;
    667666
    668667        mfsdebug("%s()\n", __FUNCTION__);
     
    673672        int r = mfs_insert_dentry(parent, name, child->ino_i->index);
    674673        if (r != EOK)
    675                 return r;
     674                goto exit_error;
     675
     676        child->ino_i->i_nlinks++;
     677        child->ino_i->dirty = true;
    676678
    677679        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                 }
    684680                r = mfs_insert_dentry(child, ".", child->ino_i->index);
    685                 if (r != EOK) {
    686                         destroy_dentry = true;
    687                         goto exit;
    688                 }
     681                if (r != EOK)
     682                        goto exit_error;
    689683
    690684                r = mfs_insert_dentry(child, "..", parent->ino_i->index);
    691                 if (r != EOK) {
    692                         destroy_dentry = true;
    693                         goto exit;
    694                 }
     685                if (r != EOK)
     686                        goto exit_error;
    695687
    696688                parent->ino_i->i_nlinks++;
     
    698690        }
    699691
    700 exit:
    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         }
     692exit_error:
    709693        return r;
    710694}
     
    837821found:
    838822                async_data_read_finalize(callid, d_info.d_name,
    839                     str_size(d_info.d_name) + 1);
     823                                        str_size(d_info.d_name) + 1);
    840824                bytes = ((pos - spos) + 1);
    841825        } else {
Note: See TracChangeset for help on using the changeset viewer.