github.com/swiftstack/ProxyFS@v0.0.0-20210203235616-4017c267d62f/inode/symlink.go (about)

     1  // Copyright (c) 2015-2021, NVIDIA CORPORATION.
     2  // SPDX-License-Identifier: Apache-2.0
     3  
     4  package inode
     5  
     6  import (
     7  	"fmt"
     8  
     9  	"github.com/swiftstack/ProxyFS/logger"
    10  	"github.com/swiftstack/ProxyFS/stats"
    11  )
    12  
    13  func (vS *volumeStruct) CreateSymlink(target string, filePerm InodeMode, userID InodeUserID, groupID InodeGroupID) (symlinkInodeNumber InodeNumber, err error) {
    14  	err = enforceRWMode(false)
    15  	if nil != err {
    16  		return
    17  	}
    18  
    19  	// Create file mode out of file permissions plus inode type
    20  	fileMode, err := determineMode(filePerm, SymlinkType)
    21  	if err != nil {
    22  		return
    23  	}
    24  
    25  	symlinkInode, err := vS.makeInMemoryInode(SymlinkType, fileMode, userID, groupID)
    26  	if err != nil {
    27  		return
    28  	}
    29  
    30  	symlinkInode.dirty = true
    31  
    32  	symlinkInode.SymlinkTarget = target
    33  	symlinkInodeNumber = symlinkInode.InodeNumber
    34  
    35  	ok, err := vS.inodeCacheInsert(symlinkInode)
    36  	if nil != err {
    37  		return
    38  	}
    39  	if !ok {
    40  		err = fmt.Errorf("inodeCacheInsert(symlinkInode) failed")
    41  		return
    42  	}
    43  
    44  	err = vS.flushInode(symlinkInode)
    45  	if err != nil {
    46  		logger.ErrorWithError(err)
    47  		return
    48  	}
    49  
    50  	stats.IncrementOperations(&stats.SymlinkCreateOps)
    51  
    52  	return
    53  }
    54  
    55  func (vS *volumeStruct) GetSymlink(symlinkInodeNumber InodeNumber) (target string, err error) {
    56  	symlinkInode, err := vS.fetchInodeType(symlinkInodeNumber, SymlinkType)
    57  	if err != nil {
    58  		logger.ErrorWithError(err)
    59  		return
    60  	}
    61  
    62  	target = symlinkInode.SymlinkTarget
    63  
    64  	stats.IncrementOperations(&stats.SymlinkReadOps)
    65  
    66  	return
    67  }