O que são valores nlink do arquivo falso?

3

Estou usando arquivos de um compartilhamento SMB no meu Raspberry Pi, executando o Raspbian. Sempre que eu acessar esses arquivos, recebo a seguinte mensagem no meu syslog:

CIFS VFS: bogus file nlink value 0

O que isso realmente significa e como posso me livrar dele?

O servidor SMB é um TimeCapsule da Apple.

    
por Arne 16.02.2015 / 17:12

1 resposta

1

Parece ser uma situação "falsa", na qual você tem um arquivo exibido em um ponto de montagem, e esse arquivo tem um número menor que um no Inode Links.

Aqui está a estrutura cifs . cf_nlink é o número de links de inode que um arquivo específico possui.

Esta parte do código mostra que ele preencherá todas as informações sobre o arquivos para cifs

     if (symlink) {
             fattr->cf_mode = S_IFLNK;
             fattr->cf_dtype = DT_LNK;
     } else if (fattr->cf_cifsattrs & ATTR_DIRECTORY) {
             fattr->cf_mode = S_IFDIR | cifs_sb->mnt_dir_mode;
             fattr->cf_dtype = DT_DIR;
             /*
              * Server can return wrong NumberOfLinks value for directories
              * when Unix extensions are disabled - fake it.
              */
             if (!tcon->unix_ext)
                     fattr->cf_flags |= CIFS_FATTR_UNKNOWN_NLINK;
     } else {
             fattr->cf_mode = S_IFREG | cifs_sb->mnt_file_mode;
             fattr->cf_dtype = DT_REG;

             /* clear write bits if ATTR_READONLY is set */
             if (fattr->cf_cifsattrs & ATTR_READONLY)
                     fattr->cf_mode &= ~(S_IWUGO);

             /*
              * Don't accept zero nlink from non-unix servers unless
              * delete is pending.  Instead mark it as unknown.
              */
             if ((fattr->cf_nlink < 1) && !tcon->unix_ext &&
                 !info->DeletePending) {
                     cifs_dbg(1, "bogus file nlink value %u\n",
                             fattr->cf_nlink);
                     fattr->cf_flags |= CIFS_FATTR_UNKNOWN_NLINK;
             }
     }

Significa : se é um link simbólico, basta definir os atributos. Se é um diretório, o servidor pode retornar um número errado de links quando as extensões Unix são desativadas, então, apenas mascare-o com "não sei quantos nlinks eu tenho" CIFS_FATTR_UNKNOWN_NLINK no lado do cliente do Linux CIFS. / p>

No entanto, pode acontecer que um ficheiro tenha cf_nlink < 1 e não seja um ficheiro com uma acção de eliminação a decorrer ( !info->DeletePending ), nem as extensões Unix disponíveis ( tcon->unix_ext ) são estranhas. Um arquivo sem hardlinks e que não está sendo excluído, você receberá a mensagem: CIFS VFS: bogus file nlink value 0

Compreendo perfeitamente a situação, mas não posso fornecer uma solução para isso. Talvez forçando extensões unix, já que você tem um unix no cliente e no site do servidor pode mascarar o problema.

    
por 24.12.2015 / 12:13