荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: GyeaonWoo (柏林恋人), 信区: Linux
标  题: Linus's Linux--fs/truncate.c
发信站: 荔园晨风BBS站 (Mon Aug 25 20:11:55 2003), 站内信件

#include <linux/sched.h>

#include <sys/stat.h>

static void free_ind(int dev,int block)
{
        struct buffer_head * bh;
        unsigned short * p;
        int i;

        if (!block)
                return;
        if (bh=bread(dev,block)) {
                p = (unsigned short *) bh->b_data;
                for (i=0;i<512;i++,p++)
                        if (*p)
                                free_block(dev,*p);
                brelse(bh);
        }
        free_block(dev,block);
}

static void free_dind(int dev,int block)
{
        struct buffer_head * bh;
        unsigned short * p;
        int i;

        if (!block)
                return;
        if (bh=bread(dev,block)) {
                p = (unsigned short *) bh->b_data;
                for (i=0;i<512;i++,p++)
                        if (*p)
                                free_ind(dev,*p);
                brelse(bh);
        }
        free_block(dev,block);
}

void truncate(struct m_inode * inode)
{
        int i;

        if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode)))
                return;
        for (i=0;i<7;i++)
                if (inode->i_zone[i]) {
                        free_block(inode->i_dev,inode->i_zone[i]);
                        inode->i_zone[i]=0;
                }
        free_ind(inode->i_dev,inode->i_zone[7]);
        free_dind(inode->i_dev,inode->i_zone[8]);
        inode->i_zone[7] = inode->i_zone[8] = 0;
        inode->i_size = 0;
        inode->i_dirt = 1;
        inode->i_mtime = inode->i_ctime = CURRENT_TIME;
}


--
 一个疯子的四大症状:
 一、崇拜悲剧的力量,爱慕美狄亚
 二、痛苦的时候不是发呆就是讲费话
 三、看到有人在赞美肉麻就要发狂
 四、像夸大自己的优点那样夸大自己的缺点活着就像皮影戏,一撤了幕,就什么都没了。

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.35.5]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店