From: Raj K. S. <raj...@gm...> - 2014-04-16 11:38:51
|
This is our getattr, and we haven't changed it in 3.0. This runs great till 2.9. I wonder why it says: " unique: 2, opcode: GETATTR (3), nodeid: 1, insize: 56, pid: 24608 unique: 2, error: -38 (Function not implemented), outsize: 16" static int my_getattr(const char *path, struct stat *stbuf) { Debug("\n%s path %s\n",__FUNCTION__,path); ifmFileNode* node = NULL; char linkName[PATH_MAX]; char* p=NULL; //Don't know why Samba looks for this but will strip to root dir if ((p=strstr(path,"/ifmFuseHandler")) != NULL) { // Must be a link name int n = p - path; memcpy(linkName,path,n); linkName[n]='\0'; node = (ifmFileNode* ) service->getNodeInfo(linkName); if (node == NULL) { //` ErrLog("%s() - path %s not found\n", __FUNCTION__, linkName); TODO return -ENOENT; } } else if ((p=strstr(path,"->")) != NULL) { // Must be a link name int n = p - path; memcpy(linkName,path,n); linkName[n]='\0'; node = (ifmFileNode* ) service->getNodeInfo(linkName); if (node == NULL) { //ErrLog("%s() - path %s not found\n", __FUNCTION__, linkName); //TODO return -ENOENT; } } else { node = (ifmFileNode* ) service->getNodeInfo(path); if (node == NULL) { //ErrLog("%s() - path %s not found\n", __FUNCTION__, path); //TODO return -ENOENT; } } if (node->isDeleted()) { ErrLog("%s() - ERROR: archive file %s is marked deleted\n", __FUNCTION__, path); return -ENOENT; } if (node->isTemp() && node->isFile()) { std::string tempName=node->getTempPhysicalPathName() +"/"; tempName += node->getTempPhysicalFileName(); int rc = stat(tempName.c_str(), stbuf); if (rc >= 0) { return 0; } } stbuf->st_mode = node->getPermissions(); stbuf->st_uid = node->getUid(); stbuf->st_gid = node->getGid(); stbuf->st_atim.tv_sec = node->getTimeLastAccessed(); stbuf->st_mtim.tv_sec = node->getTimeLastModified(); stbuf->st_ctim.tv_sec = node->getTimeLastChanged(); stbuf->st_nlink = 1; //stbuf->st_nlink = node->getLinks(); stbuf->st_ino = node->getINodeNo(); if (node->isFile()) { Debug("%s() - File inode %ld\n", __FUNCTION__, stbuf->st_ino); stbuf->st_size = node->getRealSize(); } else if (node->isDirectory()) { Debug("%s() - Directory inode %ld\n", __FUNCTION__, stbuf->st_ino); stbuf->st_size = IFM_DEFAULT_BLOCKSIZE; stbuf->st_blocks = 4; stbuf->st_blksize = 512; stbuf->st_nlink = 1; } else if (node->isSymlink() ) { Debug("%s() - Symlink inode %ld\n", __FUNCTION__, stbuf->st_ino); stbuf->st_size = getLinkNameSize(path); stbuf->st_nlink=1; } else if ( node->isLink()) { Debug("%s() - Link inode %ld\n", __FUNCTION__, stbuf->st_ino); stbuf->st_nlink=1; stbuf->st_size = node->getRealSize(); } else { ErrLog("%s() - ERROR: Invalid node type %s\n", __FUNCTION__, node->getINodeType().c_str()); delete node; return -1; } Debug("%s() - Return 0 %s\n", __FUNCTION__,node->toString().c_str()); delete node; return 0; } On Wed, Apr 16, 2014 at 4:12 PM, Raj Kumar Sanpui < raj...@gm...> wrote: > Hi Miklos, > > I enabled debug, and run this: > > ifmFuseHandler -d -o allow_other /opt/insiteone/fuse-mount > > There are no errors and fuse-mount not up either. Surprisingly it shows > library version as 2.9.3, where i compiled with the latest 3.0. Also, the > ifmFuseHandler code is a fully implemented one, with all supporting > functions including getattr (which debug says, as not implemented), which > used to work great earlier. > > FUSE library version: 2.9.3 > nullpath_ok: 0 > nopath: 0 > utime_omit_ok: 0 > unique: 1, opcode: INIT (26), nodeid: 0, insize: 56, pid: 0 > INIT: 7.16 > flags=0x0000007b > max_readahead=0x00080000 > INIT: 7.19 > flags=0x00000011 > max_readahead=0x00080000 > max_write=0x00020000 > max_background=0 > congestion_threshold=0 > unique: 1, success, outsize: 40 > unique: 2, opcode: GETATTR (3), nodeid: 1, insize: 56, pid: 24608 > unique: 2, error: -38 (Function not implemented), outsize: 16 > > > > > On Wed, Apr 16, 2014 at 3:36 PM, Miklos Szeredi <mi...@sz...> wrote: > >> >> >> >>Did you try running it with debugging enabled (-d)? If so, what is the >> output? >> >> >>Thanks, >> >> Miklos >> > > |