LINUX.ORG.RU

Удаление файла в s5fs

 


0

1

Всем привет! Кто-нибудь может подсказать, как происходит удаление файла в файловой системе s5fs. Я так понял, что в нужном иноде поле i_mode помечается как 0, это так?

Перемещено beastie из talks



Последнее исправление: matrasa (всего исправлений: 2)
                                                                                                                                               
static int sysv_unlink(struct inode * dir, struct dentry * dentry)                                                                             
{                                                                                                                                              
        struct inode * inode = dentry->d_inode;                                                                                                
        struct page * page;                                                                                                                    
        struct sysv_dir_entry * de;                                                                                                            
        int err = -ENOENT;                                                                                                                     
                                                                                                                                               
        de = sysv_find_entry(dentry, &page);                                                                                                   
        if (!de)                                                                                                                               
                goto out;                                                                                                                      
                                                                                                                                               
        err = sysv_delete_entry (de, page);                                                                                                    
        if (err)                                                                                                                               
                goto out;                                                                                                                      
                                                                                                                                               
        inode->i_ctime = dir->i_ctime;                                                                                                         
        inode_dec_link_count(inode);                                                                                                           
out:                                                                                                                                           
        return err;                                                                                                                            
}                  
dikiy ★★☆☆☆
()
Ответ на: комментарий от dikiy

а вот собсно и сама функция sysv_delete_entry

как видишь, записывается 0 и помечается как dirty.

 int sysv_delete_entry(struct sysv_dir_entry *de, struct page *page)                                                                            
{                                                                                                                                              
        struct inode *inode = page->mapping->host;                                                                                             
        char *kaddr = (char*)page_address(page);                                                                                               
        loff_t pos = page_offset(page) + (char *)de - kaddr;                                                                                   
        int err;                                                                                                                               
                                                                                                                                               
        lock_page(page);                                                                                                                       
        err = sysv_prepare_chunk(page, pos, SYSV_DIRSIZE);                                                                                     
        BUG_ON(err);                                                                                                                           
        de->inode = 0;                                                                                                                         
        err = dir_commit_chunk(page, pos, SYSV_DIRSIZE);                                                                                       
        dir_put_page(page);                                                                                                                    
        inode->i_ctime = inode->i_mtime = CURRENT_TIME_SEC;                                                                                    
        mark_inode_dirty(inode);                                                                                                               
        return err;                                                                                                                            
}             

dikiy ★★☆☆☆
()

В Development или General.

Xellos ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.