Eu finalmente resolvi o problema.
Vou tentar escrever essa resposta mais quando tiver tempo.
O problema está ligado a compartilhar novamente um sistema de arquivos cifs e depois acessá-lo de um computador Windows7.
O erro do samba está aqui: link
Isto aparentemente decorre da forma como as informações são definidas no inode em cifs.
Veja o bug aqui: link
Assim, o modo como o Samba determina (para seus clientes Windows) é contando o número de hardlinks, em vez de testar o atributo. Como cifs (por algum motivo obscuro) sempre define isso como zero, onde um diretório sempre terá pelo menos dois, o diretório aparecerá como um arquivo para clientes Windows.
Então, para "consertar" isso eu instalei meus cabeçalhos de kernel atuais e o código-fonte do Linux:
sudo apt-get install linux-headers-$(uname -r) linux-source
Eu fui então para /usr/src/linux-source-3.5.0
e extraí o arquivo lá.
Encontrando a pasta /usr/src/linux-source-3.5.0/linux-source-3.5.0/fs/cifs
Eu mudo o seguinte no arquivo inode.c
(linha 135):
set_nlink(inode, fattr->cf_nlink);
para:
if(fattr->cf_cifsattrs & ATTR_DIRECTORY)
set_nlink(inode, 2);
else
set_nlink(inode, fattr->cf_nlink);
Eu então criei um makefile para facilitar a compilação (e evitar erros insmod irritantes):
Makefile2
:
obm-m := cifs.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
Isso nos permite fazer (na mesma pasta):
sudo make -f Makefile2
Isso nos dá um arquivo chamado cifs.ko
.
Então, agora podemos parar o Samba, desmontar quaisquer compartilhamentos que tenhamos, remover os cifs atuais e instalar o nosso recompilado.
sudo service smbd stop
sudo umount /path/to/share
sudo rmmod cifs
sudo insmod cifs.ko
sudo mount -a
sudo service smbd start
Para mim, o truque é que, se você reiniciar a caixa, essa alteração não persistirá. Vou adicionar a este post quando descobri uma boa maneira de fazer isso.
Por favor, jogue todas as perguntas ou esclarecimentos que você precisar do meu jeito, eu provavelmente vou aprender com isso:)
Também graças ao kukks em #samba na freenode, eu aprendi muitas coisas lá, embora eu acabei indo em outra direção.