Commit a49520cb authored by James Simmons's avatar James Simmons

Merge maxwell.earthlink.net:/usr/src/linus-2.5

into maxwell.earthlink.net:/usr/src/fbdev-2.5
parents beecec57 29ceefc7
...@@ -233,6 +233,7 @@ nfs_xdr_readargs(struct rpc_rqst *req, u32 *p, struct nfs_readargs *args) ...@@ -233,6 +233,7 @@ nfs_xdr_readargs(struct rpc_rqst *req, u32 *p, struct nfs_readargs *args)
static int static int
nfs_xdr_readres(struct rpc_rqst *req, u32 *p, struct nfs_readres *res) nfs_xdr_readres(struct rpc_rqst *req, u32 *p, struct nfs_readres *res)
{ {
struct xdr_buf *rcvbuf = &req->rq_rcv_buf;
struct iovec *iov = req->rq_rvec; struct iovec *iov = req->rq_rvec;
int status, count, recvd, hdrlen; int status, count, recvd, hdrlen;
...@@ -241,25 +242,33 @@ nfs_xdr_readres(struct rpc_rqst *req, u32 *p, struct nfs_readres *res) ...@@ -241,25 +242,33 @@ nfs_xdr_readres(struct rpc_rqst *req, u32 *p, struct nfs_readres *res)
p = xdr_decode_fattr(p, res->fattr); p = xdr_decode_fattr(p, res->fattr);
count = ntohl(*p++); count = ntohl(*p++);
res->eof = 0;
if (rcvbuf->page_len) {
u32 end = page_offset(rcvbuf->pages[0]) + rcvbuf->page_base + count;
if (end >= res->fattr->size)
res->eof = 1;
}
hdrlen = (u8 *) p - (u8 *) iov->iov_base; hdrlen = (u8 *) p - (u8 *) iov->iov_base;
if (iov->iov_len > hdrlen) { if (iov->iov_len < hdrlen) {
printk(KERN_WARNING "NFS: READ reply header overflowed:"
"length %d > %d\n", hdrlen, iov->iov_len);
return -errno_NFSERR_IO;
} else if (iov->iov_len != hdrlen) {
dprintk("NFS: READ header is short. iovec will be shifted.\n"); dprintk("NFS: READ header is short. iovec will be shifted.\n");
xdr_shift_buf(&req->rq_rcv_buf, iov->iov_len - hdrlen); xdr_shift_buf(&req->rq_rcv_buf, iov->iov_len - hdrlen);
} }
recvd = req->rq_rlen - hdrlen; recvd = req->rq_received - hdrlen;
if (count > recvd) { if (count > recvd) {
printk(KERN_WARNING "NFS: server cheating in read reply: " printk(KERN_WARNING "NFS: server cheating in read reply: "
"count %d > recvd %d\n", count, recvd); "count %d > recvd %d\n", count, recvd);
count = recvd; count = recvd;
res->eof = 0;
} }
dprintk("RPC: readres OK count %d\n", count); dprintk("RPC: readres OK count %d\n", count);
if (count < res->count) { if (count < res->count)
res->count = count; res->count = count;
res->eof = 1; /* Silly NFSv3ism which can't be helped */
} else
res->eof = 0;
return count; return count;
} }
...@@ -384,7 +393,7 @@ nfs_xdr_readdirres(struct rpc_rqst *req, u32 *p, void *dummy) ...@@ -384,7 +393,7 @@ nfs_xdr_readdirres(struct rpc_rqst *req, u32 *p, void *dummy)
struct xdr_buf *rcvbuf = &req->rq_rcv_buf; struct xdr_buf *rcvbuf = &req->rq_rcv_buf;
struct iovec *iov = rcvbuf->head; struct iovec *iov = rcvbuf->head;
struct page **page; struct page **page;
int hdrlen; int hdrlen, recvd;
int status, nr; int status, nr;
unsigned int len, pglen; unsigned int len, pglen;
u32 *end, *entry; u32 *end, *entry;
...@@ -393,17 +402,24 @@ nfs_xdr_readdirres(struct rpc_rqst *req, u32 *p, void *dummy) ...@@ -393,17 +402,24 @@ nfs_xdr_readdirres(struct rpc_rqst *req, u32 *p, void *dummy)
return -nfs_stat_to_errno(status); return -nfs_stat_to_errno(status);
hdrlen = (u8 *) p - (u8 *) iov->iov_base; hdrlen = (u8 *) p - (u8 *) iov->iov_base;
if (iov->iov_len > hdrlen) { if (iov->iov_len < hdrlen) {
printk(KERN_WARNING "NFS: READDIR reply header overflowed:"
"length %d > %d\n", hdrlen, iov->iov_len);
return -errno_NFSERR_IO;
} else if (iov->iov_len != hdrlen) {
dprintk("NFS: READDIR header is short. iovec will be shifted.\n"); dprintk("NFS: READDIR header is short. iovec will be shifted.\n");
xdr_shift_buf(rcvbuf, iov->iov_len - hdrlen); xdr_shift_buf(rcvbuf, iov->iov_len - hdrlen);
} }
pglen = rcvbuf->page_len; pglen = rcvbuf->page_len;
recvd = req->rq_received - hdrlen;
if (pglen > recvd)
pglen = recvd;
page = rcvbuf->pages; page = rcvbuf->pages;
p = kmap(*page); p = kmap(*page);
end = (u32 *)((char *)p + pglen); end = (u32 *)((char *)p + pglen);
entry = p;
for (nr = 0; *p++; nr++) { for (nr = 0; *p++; nr++) {
entry = p - 1;
if (p + 2 > end) if (p + 2 > end)
goto short_pkt; goto short_pkt;
p++; /* fileid */ p++; /* fileid */
...@@ -416,14 +432,21 @@ nfs_xdr_readdirres(struct rpc_rqst *req, u32 *p, void *dummy) ...@@ -416,14 +432,21 @@ nfs_xdr_readdirres(struct rpc_rqst *req, u32 *p, void *dummy)
} }
if (p + 2 > end) if (p + 2 > end)
goto short_pkt; goto short_pkt;
entry = p;
} }
if (!nr)
goto short_pkt;
out:
kunmap(*page); kunmap(*page);
return nr; return nr;
short_pkt: short_pkt:
printk(KERN_NOTICE "NFS: short packet in readdir reply!\n");
entry[0] = entry[1] = 0; entry[0] = entry[1] = 0;
kunmap(*page); /* truncate listing ? */
return nr; if (!nr) {
printk(KERN_NOTICE "NFS: readdir reply truncated!\n");
entry[1] = 1;
}
goto out;
err_unmap: err_unmap:
kunmap(*page); kunmap(*page);
return -errno_NFSERR_IO; return -errno_NFSERR_IO;
......
...@@ -504,7 +504,7 @@ nfs3_xdr_readdirres(struct rpc_rqst *req, u32 *p, struct nfs3_readdirres *res) ...@@ -504,7 +504,7 @@ nfs3_xdr_readdirres(struct rpc_rqst *req, u32 *p, struct nfs3_readdirres *res)
struct xdr_buf *rcvbuf = &req->rq_rcv_buf; struct xdr_buf *rcvbuf = &req->rq_rcv_buf;
struct iovec *iov = rcvbuf->head; struct iovec *iov = rcvbuf->head;
struct page **page; struct page **page;
int hdrlen; int hdrlen, recvd;
int status, nr; int status, nr;
unsigned int len, pglen; unsigned int len, pglen;
u32 *entry, *end; u32 *entry, *end;
...@@ -523,17 +523,24 @@ nfs3_xdr_readdirres(struct rpc_rqst *req, u32 *p, struct nfs3_readdirres *res) ...@@ -523,17 +523,24 @@ nfs3_xdr_readdirres(struct rpc_rqst *req, u32 *p, struct nfs3_readdirres *res)
} }
hdrlen = (u8 *) p - (u8 *) iov->iov_base; hdrlen = (u8 *) p - (u8 *) iov->iov_base;
if (iov->iov_len > hdrlen) { if (iov->iov_len < hdrlen) {
printk(KERN_WARNING "NFS: READDIR reply header overflowed:"
"length %d > %d\n", hdrlen, iov->iov_len);
return -errno_NFSERR_IO;
} else if (iov->iov_len != hdrlen) {
dprintk("NFS: READDIR header is short. iovec will be shifted.\n"); dprintk("NFS: READDIR header is short. iovec will be shifted.\n");
xdr_shift_buf(rcvbuf, iov->iov_len - hdrlen); xdr_shift_buf(rcvbuf, iov->iov_len - hdrlen);
} }
pglen = rcvbuf->page_len; pglen = rcvbuf->page_len;
recvd = req->rq_received - hdrlen;
if (pglen > recvd)
pglen = recvd;
page = rcvbuf->pages; page = rcvbuf->pages;
p = kmap(*page); p = kmap(*page);
end = (u32 *)((char *)p + pglen); end = (u32 *)((char *)p + pglen);
entry = p;
for (nr = 0; *p++; nr++) { for (nr = 0; *p++; nr++) {
entry = p - 1;
if (p + 3 > end) if (p + 3 > end)
goto short_pkt; goto short_pkt;
p += 2; /* inode # */ p += 2; /* inode # */
...@@ -570,15 +577,21 @@ nfs3_xdr_readdirres(struct rpc_rqst *req, u32 *p, struct nfs3_readdirres *res) ...@@ -570,15 +577,21 @@ nfs3_xdr_readdirres(struct rpc_rqst *req, u32 *p, struct nfs3_readdirres *res)
if (p + 2 > end) if (p + 2 > end)
goto short_pkt; goto short_pkt;
entry = p;
} }
if (!nr)
goto short_pkt;
out:
kunmap(*page); kunmap(*page);
return nr; return nr;
short_pkt: short_pkt:
printk(KERN_NOTICE "NFS: short packet in readdir reply!\n");
/* truncate listing */
entry[0] = entry[1] = 0; entry[0] = entry[1] = 0;
kunmap(*page); /* truncate listing ? */
return nr; if (!nr) {
printk(KERN_NOTICE "NFS: readdir reply truncated!\n");
entry[1] = 1;
}
goto out;
err_unmap: err_unmap:
kunmap(*page); kunmap(*page);
return -errno_NFSERR_IO; return -errno_NFSERR_IO;
...@@ -793,16 +806,21 @@ nfs3_xdr_readres(struct rpc_rqst *req, u32 *p, struct nfs_readres *res) ...@@ -793,16 +806,21 @@ nfs3_xdr_readres(struct rpc_rqst *req, u32 *p, struct nfs_readres *res)
} }
hdrlen = (u8 *) p - (u8 *) iov->iov_base; hdrlen = (u8 *) p - (u8 *) iov->iov_base;
if (iov->iov_len > hdrlen) { if (iov->iov_len < hdrlen) {
printk(KERN_WARNING "NFS: READ reply header overflowed:"
"length %d > %d\n", hdrlen, iov->iov_len);
return -errno_NFSERR_IO;
} else if (iov->iov_len != hdrlen) {
dprintk("NFS: READ header is short. iovec will be shifted.\n"); dprintk("NFS: READ header is short. iovec will be shifted.\n");
xdr_shift_buf(&req->rq_rcv_buf, iov->iov_len - hdrlen); xdr_shift_buf(&req->rq_rcv_buf, iov->iov_len - hdrlen);
} }
recvd = req->rq_rlen - hdrlen; recvd = req->rq_received - hdrlen;
if (count > recvd) { if (count > recvd) {
printk(KERN_WARNING "NFS: server cheating in read reply: " printk(KERN_WARNING "NFS: server cheating in read reply: "
"count %d > recvd %d\n", count, recvd); "count %d > recvd %d\n", count, recvd);
count = recvd; count = recvd;
res->eof = 0;
} }
if (count < res->count) if (count < res->count)
......
...@@ -424,9 +424,14 @@ nfs_readpage_result(struct rpc_task *task) ...@@ -424,9 +424,14 @@ nfs_readpage_result(struct rpc_task *task)
memset(p + count, 0, PAGE_CACHE_SIZE - count); memset(p + count, 0, PAGE_CACHE_SIZE - count);
kunmap(page); kunmap(page);
count = 0; count = 0;
} else if (data->res.eof)
SetPageUptodate(page);
else
SetPageError(page);
} else {
count -= PAGE_CACHE_SIZE; count -= PAGE_CACHE_SIZE;
SetPageUptodate(page); SetPageUptodate(page);
}
} else } else
SetPageError(page); SetPageError(page);
flush_dcache_page(page); flush_dcache_page(page);
......
...@@ -83,6 +83,12 @@ struct romfs_inode_info { ...@@ -83,6 +83,12 @@ struct romfs_inode_info {
struct inode vfs_inode; struct inode vfs_inode;
}; };
/* instead of private superblock data */
static inline unsigned long romfs_maxsize(struct super_block *sb)
{
return (unsigned long)sb->u.generic_sbp;
}
static inline struct romfs_inode_info *ROMFS_I(struct inode *inode) static inline struct romfs_inode_info *ROMFS_I(struct inode *inode)
{ {
return list_entry(inode, struct romfs_inode_info, vfs_inode); return list_entry(inode, struct romfs_inode_info, vfs_inode);
...@@ -113,7 +119,6 @@ static int romfs_fill_super(struct super_block *s, void *data, int silent) ...@@ -113,7 +119,6 @@ static int romfs_fill_super(struct super_block *s, void *data, int silent)
/* I would parse the options here, but there are none.. :) */ /* I would parse the options here, but there are none.. :) */
sb_set_blocksize(s, ROMBSIZE); sb_set_blocksize(s, ROMBSIZE);
s->u.generic_sbp = (void *) 0;
s->s_maxbytes = 0xFFFFFFFF; s->s_maxbytes = 0xFFFFFFFF;
bh = sb_bread(s, 0); bh = sb_bread(s, 0);
...@@ -139,7 +144,7 @@ static int romfs_fill_super(struct super_block *s, void *data, int silent) ...@@ -139,7 +144,7 @@ static int romfs_fill_super(struct super_block *s, void *data, int silent)
} }
s->s_magic = ROMFS_MAGIC; s->s_magic = ROMFS_MAGIC;
s->u.romfs_sb.s_maxsize = sz; s->u.generic_sbp = (void *)sz;
s->s_flags |= MS_RDONLY; s->s_flags |= MS_RDONLY;
...@@ -175,7 +180,7 @@ romfs_statfs(struct super_block *sb, struct statfs *buf) ...@@ -175,7 +180,7 @@ romfs_statfs(struct super_block *sb, struct statfs *buf)
buf->f_type = ROMFS_MAGIC; buf->f_type = ROMFS_MAGIC;
buf->f_bsize = ROMBSIZE; buf->f_bsize = ROMBSIZE;
buf->f_bfree = buf->f_bavail = buf->f_ffree; buf->f_bfree = buf->f_bavail = buf->f_ffree;
buf->f_blocks = (sb->u.romfs_sb.s_maxsize+ROMBSIZE-1)>>ROMBSBITS; buf->f_blocks = (romfs_maxsize(sb)+ROMBSIZE-1)>>ROMBSBITS;
buf->f_namelen = ROMFS_MAXFN; buf->f_namelen = ROMFS_MAXFN;
return 0; return 0;
} }
...@@ -188,7 +193,7 @@ romfs_strnlen(struct inode *i, unsigned long offset, unsigned long count) ...@@ -188,7 +193,7 @@ romfs_strnlen(struct inode *i, unsigned long offset, unsigned long count)
struct buffer_head *bh; struct buffer_head *bh;
unsigned long avail, maxsize, res; unsigned long avail, maxsize, res;
maxsize = i->i_sb->u.romfs_sb.s_maxsize; maxsize = romfs_maxsize(i->i_sb);
if (offset >= maxsize) if (offset >= maxsize)
return -1; return -1;
...@@ -230,7 +235,7 @@ romfs_copyfrom(struct inode *i, void *dest, unsigned long offset, unsigned long ...@@ -230,7 +235,7 @@ romfs_copyfrom(struct inode *i, void *dest, unsigned long offset, unsigned long
struct buffer_head *bh; struct buffer_head *bh;
unsigned long avail, maxsize, res; unsigned long avail, maxsize, res;
maxsize = i->i_sb->u.romfs_sb.s_maxsize; maxsize = romfs_maxsize(i->i_sb);
if (offset >= maxsize || count > maxsize || offset+count>maxsize) if (offset >= maxsize || count > maxsize || offset+count>maxsize)
return -1; return -1;
...@@ -276,7 +281,7 @@ romfs_readdir(struct file *filp, void *dirent, filldir_t filldir) ...@@ -276,7 +281,7 @@ romfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
lock_kernel(); lock_kernel();
maxoff = i->i_sb->u.romfs_sb.s_maxsize; maxoff = romfs_maxsize(i->i_sb);
offset = filp->f_pos; offset = filp->f_pos;
if (!offset) { if (!offset) {
...@@ -339,7 +344,7 @@ romfs_lookup(struct inode *dir, struct dentry *dentry) ...@@ -339,7 +344,7 @@ romfs_lookup(struct inode *dir, struct dentry *dentry)
if (romfs_copyfrom(dir, &ri, offset, ROMFH_SIZE) <= 0) if (romfs_copyfrom(dir, &ri, offset, ROMFH_SIZE) <= 0)
goto out; goto out;
maxoff = dir->i_sb->u.romfs_sb.s_maxsize; maxoff = romfs_maxsize(dir->i_sb);
offset = ntohl(ri.spec) & ROMFH_MASK; offset = ntohl(ri.spec) & ROMFH_MASK;
/* OK, now find the file whose name is in "dentry" in the /* OK, now find the file whose name is in "dentry" in the
......
...@@ -47,7 +47,7 @@ void ufs_free_fragments (struct inode * inode, unsigned fragment, unsigned count ...@@ -47,7 +47,7 @@ void ufs_free_fragments (struct inode * inode, unsigned fragment, unsigned count
unsigned cgno, bit, end_bit, bbase, blkmap, i, blkno, cylno; unsigned cgno, bit, end_bit, bbase, blkmap, i, blkno, cylno;
sb = inode->i_sb; sb = inode->i_sb;
uspi = sb->u.ufs_sb.s_uspi; uspi = UFS_SB(sb)->s_uspi;
usb1 = ubh_get_usb_first(USPI_UBH); usb1 = ubh_get_usb_first(USPI_UBH);
UFSD(("ENTER, fragment %u, count %u\n", fragment, count)) UFSD(("ENTER, fragment %u, count %u\n", fragment, count))
...@@ -89,7 +89,7 @@ void ufs_free_fragments (struct inode * inode, unsigned fragment, unsigned count ...@@ -89,7 +89,7 @@ void ufs_free_fragments (struct inode * inode, unsigned fragment, unsigned count
fs32_add(sb, &ucg->cg_cs.cs_nffree, count); fs32_add(sb, &ucg->cg_cs.cs_nffree, count);
fs32_add(sb, &usb1->fs_cstotal.cs_nffree, count); fs32_add(sb, &usb1->fs_cstotal.cs_nffree, count);
fs32_add(sb, &sb->fs_cs(cgno).cs_nffree, count); fs32_add(sb, &UFS_SB(sb)->fs_cs(cgno).cs_nffree, count);
blkmap = ubh_blkmap (UCPI_UBH, ucpi->c_freeoff, bbase); blkmap = ubh_blkmap (UCPI_UBH, ucpi->c_freeoff, bbase);
ufs_fragacct(sb, blkmap, ucg->cg_frsum, 1); ufs_fragacct(sb, blkmap, ucg->cg_frsum, 1);
...@@ -100,12 +100,12 @@ void ufs_free_fragments (struct inode * inode, unsigned fragment, unsigned count ...@@ -100,12 +100,12 @@ void ufs_free_fragments (struct inode * inode, unsigned fragment, unsigned count
if (ubh_isblockset(UCPI_UBH, ucpi->c_freeoff, blkno)) { if (ubh_isblockset(UCPI_UBH, ucpi->c_freeoff, blkno)) {
fs32_sub(sb, &ucg->cg_cs.cs_nffree, uspi->s_fpb); fs32_sub(sb, &ucg->cg_cs.cs_nffree, uspi->s_fpb);
fs32_sub(sb, &usb1->fs_cstotal.cs_nffree, uspi->s_fpb); fs32_sub(sb, &usb1->fs_cstotal.cs_nffree, uspi->s_fpb);
fs32_sub(sb, &sb->fs_cs(cgno).cs_nffree, uspi->s_fpb); fs32_sub(sb, &UFS_SB(sb)->fs_cs(cgno).cs_nffree, uspi->s_fpb);
if ((sb->u.ufs_sb.s_flags & UFS_CG_MASK) == UFS_CG_44BSD) if ((UFS_SB(sb)->s_flags & UFS_CG_MASK) == UFS_CG_44BSD)
ufs_clusteracct (sb, ucpi, blkno, 1); ufs_clusteracct (sb, ucpi, blkno, 1);
fs32_add(sb, &ucg->cg_cs.cs_nbfree, 1); fs32_add(sb, &ucg->cg_cs.cs_nbfree, 1);
fs32_add(sb, &usb1->fs_cstotal.cs_nbfree, 1); fs32_add(sb, &usb1->fs_cstotal.cs_nbfree, 1);
fs32_add(sb, &sb->fs_cs(cgno).cs_nbfree, 1); fs32_add(sb, &UFS_SB(sb)->fs_cs(cgno).cs_nbfree, 1);
cylno = ufs_cbtocylno (bbase); cylno = ufs_cbtocylno (bbase);
fs16_add(sb, &ubh_cg_blks(ucpi, cylno, ufs_cbtorpos(bbase)), 1); fs16_add(sb, &ubh_cg_blks(ucpi, cylno, ufs_cbtorpos(bbase)), 1);
fs32_add(sb, &ubh_cg_blktot(ucpi, cylno), 1); fs32_add(sb, &ubh_cg_blktot(ucpi, cylno), 1);
...@@ -141,7 +141,7 @@ void ufs_free_blocks (struct inode * inode, unsigned fragment, unsigned count) { ...@@ -141,7 +141,7 @@ void ufs_free_blocks (struct inode * inode, unsigned fragment, unsigned count) {
unsigned overflow, cgno, bit, end_bit, blkno, i, cylno; unsigned overflow, cgno, bit, end_bit, blkno, i, cylno;
sb = inode->i_sb; sb = inode->i_sb;
uspi = sb->u.ufs_sb.s_uspi; uspi = UFS_SB(sb)->s_uspi;
usb1 = ubh_get_usb_first(USPI_UBH); usb1 = ubh_get_usb_first(USPI_UBH);
UFSD(("ENTER, fragment %u, count %u\n", fragment, count)) UFSD(("ENTER, fragment %u, count %u\n", fragment, count))
...@@ -184,13 +184,13 @@ void ufs_free_blocks (struct inode * inode, unsigned fragment, unsigned count) { ...@@ -184,13 +184,13 @@ void ufs_free_blocks (struct inode * inode, unsigned fragment, unsigned count) {
ufs_error(sb, "ufs_free_blocks", "freeing free fragment"); ufs_error(sb, "ufs_free_blocks", "freeing free fragment");
} }
ubh_setblock(UCPI_UBH, ucpi->c_freeoff, blkno); ubh_setblock(UCPI_UBH, ucpi->c_freeoff, blkno);
if ((sb->u.ufs_sb.s_flags & UFS_CG_MASK) == UFS_CG_44BSD) if ((UFS_SB(sb)->s_flags & UFS_CG_MASK) == UFS_CG_44BSD)
ufs_clusteracct (sb, ucpi, blkno, 1); ufs_clusteracct (sb, ucpi, blkno, 1);
DQUOT_FREE_BLOCK(inode, uspi->s_fpb); DQUOT_FREE_BLOCK(inode, uspi->s_fpb);
fs32_add(sb, &ucg->cg_cs.cs_nbfree, 1); fs32_add(sb, &ucg->cg_cs.cs_nbfree, 1);
fs32_add(sb, &usb1->fs_cstotal.cs_nbfree, 1); fs32_add(sb, &usb1->fs_cstotal.cs_nbfree, 1);
fs32_add(sb, &sb->fs_cs(cgno).cs_nbfree, 1); fs32_add(sb, &UFS_SB(sb)->fs_cs(cgno).cs_nbfree, 1);
cylno = ufs_cbtocylno(i); cylno = ufs_cbtocylno(i);
fs16_add(sb, &ubh_cg_blks(ucpi, cylno, ufs_cbtorpos(i)), 1); fs16_add(sb, &ubh_cg_blks(ucpi, cylno, ufs_cbtorpos(i)), 1);
fs32_add(sb, &ubh_cg_blktot(ucpi, cylno), 1); fs32_add(sb, &ubh_cg_blktot(ucpi, cylno), 1);
...@@ -247,7 +247,7 @@ unsigned ufs_new_fragments (struct inode * inode, u32 * p, unsigned fragment, ...@@ -247,7 +247,7 @@ unsigned ufs_new_fragments (struct inode * inode, u32 * p, unsigned fragment,
UFSD(("ENTER, ino %lu, fragment %u, goal %u, count %u\n", inode->i_ino, fragment, goal, count)) UFSD(("ENTER, ino %lu, fragment %u, goal %u, count %u\n", inode->i_ino, fragment, goal, count))
sb = inode->i_sb; sb = inode->i_sb;
uspi = sb->u.ufs_sb.s_uspi; uspi = UFS_SB(sb)->s_uspi;
usb1 = ubh_get_usb_first(USPI_UBH); usb1 = ubh_get_usb_first(USPI_UBH);
*err = -ENOSPC; *err = -ENOSPC;
...@@ -407,12 +407,12 @@ unsigned ufs_add_fragments (struct inode * inode, unsigned fragment, ...@@ -407,12 +407,12 @@ unsigned ufs_add_fragments (struct inode * inode, unsigned fragment,
UFSD(("ENTER, fragment %u, oldcount %u, newcount %u\n", fragment, oldcount, newcount)) UFSD(("ENTER, fragment %u, oldcount %u, newcount %u\n", fragment, oldcount, newcount))
sb = inode->i_sb; sb = inode->i_sb;
uspi = sb->u.ufs_sb.s_uspi; uspi = UFS_SB(sb)->s_uspi;
usb1 = ubh_get_usb_first (USPI_UBH); usb1 = ubh_get_usb_first (USPI_UBH);
count = newcount - oldcount; count = newcount - oldcount;
cgno = ufs_dtog(fragment); cgno = ufs_dtog(fragment);
if (sb->fs_cs(cgno).cs_nffree < count) if (UFS_SB(sb)->fs_cs(cgno).cs_nffree < count)
return 0; return 0;
if ((ufs_fragnum (fragment) + newcount) > uspi->s_fpb) if ((ufs_fragnum (fragment) + newcount) > uspi->s_fpb)
return 0; return 0;
...@@ -453,7 +453,7 @@ unsigned ufs_add_fragments (struct inode * inode, unsigned fragment, ...@@ -453,7 +453,7 @@ unsigned ufs_add_fragments (struct inode * inode, unsigned fragment,
} }
fs32_sub(sb, &ucg->cg_cs.cs_nffree, count); fs32_sub(sb, &ucg->cg_cs.cs_nffree, count);
fs32_sub(sb, &sb->fs_cs(cgno).cs_nffree, count); fs32_sub(sb, &UFS_SB(sb)->fs_cs(cgno).cs_nffree, count);
fs32_sub(sb, &usb1->fs_cstotal.cs_nffree, count); fs32_sub(sb, &usb1->fs_cstotal.cs_nffree, count);
ubh_mark_buffer_dirty (USPI_UBH); ubh_mark_buffer_dirty (USPI_UBH);
...@@ -470,7 +470,7 @@ unsigned ufs_add_fragments (struct inode * inode, unsigned fragment, ...@@ -470,7 +470,7 @@ unsigned ufs_add_fragments (struct inode * inode, unsigned fragment,
} }
#define UFS_TEST_FREE_SPACE_CG \ #define UFS_TEST_FREE_SPACE_CG \
ucg = (struct ufs_cylinder_group *) sb->u.ufs_sb.s_ucg[cgno]->b_data; \ ucg = (struct ufs_cylinder_group *) UFS_SB(sb)->s_ucg[cgno]->b_data; \
if (fs32_to_cpu(sb, ucg->cg_cs.cs_nbfree)) \ if (fs32_to_cpu(sb, ucg->cg_cs.cs_nbfree)) \
goto cg_found; \ goto cg_found; \
for (k = count; k < uspi->s_fpb; k++) \ for (k = count; k < uspi->s_fpb; k++) \
...@@ -490,7 +490,7 @@ unsigned ufs_alloc_fragments (struct inode * inode, unsigned cgno, ...@@ -490,7 +490,7 @@ unsigned ufs_alloc_fragments (struct inode * inode, unsigned cgno,
UFSD(("ENTER, ino %lu, cgno %u, goal %u, count %u\n", inode->i_ino, cgno, goal, count)) UFSD(("ENTER, ino %lu, cgno %u, goal %u, count %u\n", inode->i_ino, cgno, goal, count))
sb = inode->i_sb; sb = inode->i_sb;
uspi = sb->u.ufs_sb.s_uspi; uspi = UFS_SB(sb)->s_uspi;
usb1 = ubh_get_usb_first(USPI_UBH); usb1 = ubh_get_usb_first(USPI_UBH);
oldcg = cgno; oldcg = cgno;
...@@ -557,7 +557,7 @@ unsigned ufs_alloc_fragments (struct inode * inode, unsigned cgno, ...@@ -557,7 +557,7 @@ unsigned ufs_alloc_fragments (struct inode * inode, unsigned cgno,
fs32_add(sb, &ucg->cg_cs.cs_nffree, i); fs32_add(sb, &ucg->cg_cs.cs_nffree, i);
fs32_add(sb, &usb1->fs_cstotal.cs_nffree, i); fs32_add(sb, &usb1->fs_cstotal.cs_nffree, i);
fs32_add(sb, &sb->fs_cs(cgno).cs_nffree, i); fs32_add(sb, &UFS_SB(sb)->fs_cs(cgno).cs_nffree, i);
fs32_add(sb, &ucg->cg_frsum[i], 1); fs32_add(sb, &ucg->cg_frsum[i], 1);
goto succed; goto succed;
} }
...@@ -574,7 +574,7 @@ unsigned ufs_alloc_fragments (struct inode * inode, unsigned cgno, ...@@ -574,7 +574,7 @@ unsigned ufs_alloc_fragments (struct inode * inode, unsigned cgno,
fs32_sub(sb, &ucg->cg_cs.cs_nffree, count); fs32_sub(sb, &ucg->cg_cs.cs_nffree, count);
fs32_sub(sb, &usb1->fs_cstotal.cs_nffree, count); fs32_sub(sb, &usb1->fs_cstotal.cs_nffree, count);
fs32_sub(sb, &sb->fs_cs(cgno).cs_nffree, count); fs32_sub(sb, &UFS_SB(sb)->fs_cs(cgno).cs_nffree, count);
fs32_sub(sb, &ucg->cg_frsum[allocsize], 1); fs32_sub(sb, &ucg->cg_frsum[allocsize], 1);
if (count != allocsize) if (count != allocsize)
...@@ -606,7 +606,7 @@ unsigned ufs_alloccg_block (struct inode * inode, ...@@ -606,7 +606,7 @@ unsigned ufs_alloccg_block (struct inode * inode,
UFSD(("ENTER, goal %u\n", goal)) UFSD(("ENTER, goal %u\n", goal))
sb = inode->i_sb; sb = inode->i_sb;
uspi = sb->u.ufs_sb.s_uspi; uspi = UFS_SB(sb)->s_uspi;
usb1 = ubh_get_usb_first(USPI_UBH); usb1 = ubh_get_usb_first(USPI_UBH);
ucg = ubh_get_ucg(UCPI_UBH); ucg = ubh_get_ucg(UCPI_UBH);
...@@ -633,7 +633,7 @@ unsigned ufs_alloccg_block (struct inode * inode, ...@@ -633,7 +633,7 @@ unsigned ufs_alloccg_block (struct inode * inode,
gotit: gotit:
blkno = ufs_fragstoblks(result); blkno = ufs_fragstoblks(result);
ubh_clrblock (UCPI_UBH, ucpi->c_freeoff, blkno); ubh_clrblock (UCPI_UBH, ucpi->c_freeoff, blkno);
if ((sb->u.ufs_sb.s_flags & UFS_CG_MASK) == UFS_CG_44BSD) if ((UFS_SB(sb)->s_flags & UFS_CG_MASK) == UFS_CG_44BSD)
ufs_clusteracct (sb, ucpi, blkno, -1); ufs_clusteracct (sb, ucpi, blkno, -1);
if(DQUOT_ALLOC_BLOCK(inode, uspi->s_fpb)) { if(DQUOT_ALLOC_BLOCK(inode, uspi->s_fpb)) {
*err = -EDQUOT; *err = -EDQUOT;
...@@ -642,7 +642,7 @@ unsigned ufs_alloccg_block (struct inode * inode, ...@@ -642,7 +642,7 @@ unsigned ufs_alloccg_block (struct inode * inode,
fs32_sub(sb, &ucg->cg_cs.cs_nbfree, 1); fs32_sub(sb, &ucg->cg_cs.cs_nbfree, 1);
fs32_sub(sb, &usb1->fs_cstotal.cs_nbfree, 1); fs32_sub(sb, &usb1->fs_cstotal.cs_nbfree, 1);
fs32_sub(sb, &sb->fs_cs(ucpi->c_cgx).cs_nbfree, 1); fs32_sub(sb, &UFS_SB(sb)->fs_cs(ucpi->c_cgx).cs_nbfree, 1);
cylno = ufs_cbtocylno(result); cylno = ufs_cbtocylno(result);
fs16_sub(sb, &ubh_cg_blks(ucpi, cylno, ufs_cbtorpos(result)), 1); fs16_sub(sb, &ubh_cg_blks(ucpi, cylno, ufs_cbtorpos(result)), 1);
fs32_sub(sb, &ubh_cg_blktot(ucpi, cylno), 1); fs32_sub(sb, &ubh_cg_blktot(ucpi, cylno), 1);
...@@ -663,7 +663,7 @@ unsigned ufs_bitmap_search (struct super_block * sb, ...@@ -663,7 +663,7 @@ unsigned ufs_bitmap_search (struct super_block * sb,
UFSD(("ENTER, cg %u, goal %u, count %u\n", ucpi->c_cgx, goal, count)) UFSD(("ENTER, cg %u, goal %u, count %u\n", ucpi->c_cgx, goal, count))
uspi = sb->u.ufs_sb.s_uspi; uspi = UFS_SB(sb)->s_uspi;
usb1 = ubh_get_usb_first (USPI_UBH); usb1 = ubh_get_usb_first (USPI_UBH);
ucg = ubh_get_ucg(UCPI_UBH); ucg = ubh_get_ucg(UCPI_UBH);
...@@ -729,7 +729,7 @@ void ufs_clusteracct(struct super_block * sb, ...@@ -729,7 +729,7 @@ void ufs_clusteracct(struct super_block * sb,
struct ufs_sb_private_info * uspi; struct ufs_sb_private_info * uspi;
int i, start, end, forw, back; int i, start, end, forw, back;
uspi = sb->u.ufs_sb.s_uspi; uspi = UFS_SB(sb)->s_uspi;
if (uspi->s_contigsumsize <= 0) if (uspi->s_contigsumsize <= 0)
return; return;
......
...@@ -36,26 +36,27 @@ ...@@ -36,26 +36,27 @@
static void ufs_read_cylinder (struct super_block * sb, static void ufs_read_cylinder (struct super_block * sb,
unsigned cgno, unsigned bitmap_nr) unsigned cgno, unsigned bitmap_nr)
{ {
struct ufs_sb_info * sbi = UFS_SB(sb);
struct ufs_sb_private_info * uspi; struct ufs_sb_private_info * uspi;
struct ufs_cg_private_info * ucpi; struct ufs_cg_private_info * ucpi;
struct ufs_cylinder_group * ucg; struct ufs_cylinder_group * ucg;
unsigned i, j; unsigned i, j;
UFSD(("ENTER, cgno %u, bitmap_nr %u\n", cgno, bitmap_nr)) UFSD(("ENTER, cgno %u, bitmap_nr %u\n", cgno, bitmap_nr))
uspi = sb->u.ufs_sb.s_uspi; uspi = sbi->s_uspi;
ucpi = sb->u.ufs_sb.s_ucpi[bitmap_nr]; ucpi = sbi->s_ucpi[bitmap_nr];
ucg = (struct ufs_cylinder_group *)sb->u.ufs_sb.s_ucg[cgno]->b_data; ucg = (struct ufs_cylinder_group *)sbi->s_ucg[cgno]->b_data;
UCPI_UBH->fragment = ufs_cgcmin(cgno); UCPI_UBH->fragment = ufs_cgcmin(cgno);
UCPI_UBH->count = uspi->s_cgsize >> sb->s_blocksize_bits; UCPI_UBH->count = uspi->s_cgsize >> sb->s_blocksize_bits;
/* /*
* We have already the first fragment of cylinder group block in buffer * We have already the first fragment of cylinder group block in buffer
*/ */
UCPI_UBH->bh[0] = sb->u.ufs_sb.s_ucg[cgno]; UCPI_UBH->bh[0] = sbi->s_ucg[cgno];
for (i = 1; i < UCPI_UBH->count; i++) for (i = 1; i < UCPI_UBH->count; i++)
if (!(UCPI_UBH->bh[i] = sb_bread(sb, UCPI_UBH->fragment + i))) if (!(UCPI_UBH->bh[i] = sb_bread(sb, UCPI_UBH->fragment + i)))
goto failed; goto failed;
sb->u.ufs_sb.s_cgno[bitmap_nr] = cgno; sbi->s_cgno[bitmap_nr] = cgno;
ucpi->c_cgx = fs32_to_cpu(sb, ucg->cg_cgx); ucpi->c_cgx = fs32_to_cpu(sb, ucg->cg_cgx);
ucpi->c_ncyl = fs16_to_cpu(sb, ucg->cg_ncyl); ucpi->c_ncyl = fs16_to_cpu(sb, ucg->cg_ncyl);
...@@ -77,8 +78,8 @@ static void ufs_read_cylinder (struct super_block * sb, ...@@ -77,8 +78,8 @@ static void ufs_read_cylinder (struct super_block * sb,
failed: failed:
for (j = 1; j < i; j++) for (j = 1; j < i; j++)
brelse (sb->u.ufs_sb.s_ucg[j]); brelse (sbi->s_ucg[j]);
sb->u.ufs_sb.s_cgno[bitmap_nr] = UFS_CGNO_EMPTY; sbi->s_cgno[bitmap_nr] = UFS_CGNO_EMPTY;
ufs_error (sb, "ufs_read_cylinder", "can't read cylinder group block %u", cgno); ufs_error (sb, "ufs_read_cylinder", "can't read cylinder group block %u", cgno);
} }
...@@ -88,6 +89,7 @@ static void ufs_read_cylinder (struct super_block * sb, ...@@ -88,6 +89,7 @@ static void ufs_read_cylinder (struct super_block * sb,
*/ */
void ufs_put_cylinder (struct super_block * sb, unsigned bitmap_nr) void ufs_put_cylinder (struct super_block * sb, unsigned bitmap_nr)
{ {
struct ufs_sb_info * sbi = UFS_SB(sb);
struct ufs_sb_private_info * uspi; struct ufs_sb_private_info * uspi;
struct ufs_cg_private_info * ucpi; struct ufs_cg_private_info * ucpi;
struct ufs_cylinder_group * ucg; struct ufs_cylinder_group * ucg;
...@@ -95,15 +97,15 @@ void ufs_put_cylinder (struct super_block * sb, unsigned bitmap_nr) ...@@ -95,15 +97,15 @@ void ufs_put_cylinder (struct super_block * sb, unsigned bitmap_nr)
UFSD(("ENTER, bitmap_nr %u\n", bitmap_nr)) UFSD(("ENTER, bitmap_nr %u\n", bitmap_nr))
uspi = sb->u.ufs_sb.s_uspi; uspi = sbi->s_uspi;
if (sb->u.ufs_sb.s_cgno[bitmap_nr] == UFS_CGNO_EMPTY) { if (sbi->s_cgno[bitmap_nr] == UFS_CGNO_EMPTY) {
UFSD(("EXIT\n")) UFSD(("EXIT\n"))
return; return;
} }
ucpi = sb->u.ufs_sb.s_ucpi[bitmap_nr]; ucpi = sbi->s_ucpi[bitmap_nr];
ucg = ubh_get_ucg(UCPI_UBH); ucg = ubh_get_ucg(UCPI_UBH);
if (uspi->s_ncg > UFS_MAX_GROUP_LOADED && bitmap_nr >= sb->u.ufs_sb.s_cg_loaded) { if (uspi->s_ncg > UFS_MAX_GROUP_LOADED && bitmap_nr >= sbi->s_cg_loaded) {
ufs_panic (sb, "ufs_put_cylinder", "internal error"); ufs_panic (sb, "ufs_put_cylinder", "internal error");
return; return;
} }
...@@ -119,7 +121,7 @@ void ufs_put_cylinder (struct super_block * sb, unsigned bitmap_nr) ...@@ -119,7 +121,7 @@ void ufs_put_cylinder (struct super_block * sb, unsigned bitmap_nr)
brelse (UCPI_UBH->bh[i]); brelse (UCPI_UBH->bh[i]);
} }
sb->u.ufs_sb.s_cgno[bitmap_nr] = UFS_CGNO_EMPTY; sbi->s_cgno[bitmap_nr] = UFS_CGNO_EMPTY;
UFSD(("EXIT\n")) UFSD(("EXIT\n"))
} }
...@@ -132,13 +134,14 @@ void ufs_put_cylinder (struct super_block * sb, unsigned bitmap_nr) ...@@ -132,13 +134,14 @@ void ufs_put_cylinder (struct super_block * sb, unsigned bitmap_nr)
struct ufs_cg_private_info * ufs_load_cylinder ( struct ufs_cg_private_info * ufs_load_cylinder (
struct super_block * sb, unsigned cgno) struct super_block * sb, unsigned cgno)
{ {
struct ufs_sb_info * sbi = UFS_SB(sb);
struct ufs_sb_private_info * uspi; struct ufs_sb_private_info * uspi;
struct ufs_cg_private_info * ucpi; struct ufs_cg_private_info * ucpi;
unsigned cg, i, j; unsigned cg, i, j;
UFSD(("ENTER, cgno %u\n", cgno)) UFSD(("ENTER, cgno %u\n", cgno))
uspi = sb->u.ufs_sb.s_uspi; uspi = sbi->s_uspi;
if (cgno >= uspi->s_ncg) { if (cgno >= uspi->s_ncg) {
ufs_panic (sb, "ufs_load_cylinder", "internal error, high number of cg"); ufs_panic (sb, "ufs_load_cylinder", "internal error, high number of cg");
return NULL; return NULL;
...@@ -146,61 +149,61 @@ struct ufs_cg_private_info * ufs_load_cylinder ( ...@@ -146,61 +149,61 @@ struct ufs_cg_private_info * ufs_load_cylinder (
/* /*
* Cylinder group number cg it in cache and it was last used * Cylinder group number cg it in cache and it was last used
*/ */
if (sb->u.ufs_sb.s_cgno[0] == cgno) { if (sbi->s_cgno[0] == cgno) {
UFSD(("EXIT\n")) UFSD(("EXIT\n"))
return sb->u.ufs_sb.s_ucpi[0]; return sbi->s_ucpi[0];
} }
/* /*
* Number of cylinder groups is not higher than UFS_MAX_GROUP_LOADED * Number of cylinder groups is not higher than UFS_MAX_GROUP_LOADED
*/ */
if (uspi->s_ncg <= UFS_MAX_GROUP_LOADED) { if (uspi->s_ncg <= UFS_MAX_GROUP_LOADED) {
if (sb->u.ufs_sb.s_cgno[cgno] != UFS_CGNO_EMPTY) { if (sbi->s_cgno[cgno] != UFS_CGNO_EMPTY) {
if (sb->u.ufs_sb.s_cgno[cgno] != cgno) { if (sbi->s_cgno[cgno] != cgno) {
ufs_panic (sb, "ufs_load_cylinder", "internal error, wrong number of cg in cache"); ufs_panic (sb, "ufs_load_cylinder", "internal error, wrong number of cg in cache");
UFSD(("EXIT (FAILED)\n")) UFSD(("EXIT (FAILED)\n"))
return NULL; return NULL;
} }
else { else {
UFSD(("EXIT\n")) UFSD(("EXIT\n"))
return sb->u.ufs_sb.s_ucpi[cgno]; return sbi->s_ucpi[cgno];
} }
} else { } else {
ufs_read_cylinder (sb, cgno, cgno); ufs_read_cylinder (sb, cgno, cgno);
UFSD(("EXIT\n")) UFSD(("EXIT\n"))
return sb->u.ufs_sb.s_ucpi[cgno]; return sbi->s_ucpi[cgno];
} }
} }
/* /*
* Cylinder group number cg is in cache but it was not last used, * Cylinder group number cg is in cache but it was not last used,
* we will move to the first position * we will move to the first position
*/ */
for (i = 0; i < sb->u.ufs_sb.s_cg_loaded && sb->u.ufs_sb.s_cgno[i] != cgno; i++); for (i = 0; i < sbi->s_cg_loaded && sbi->s_cgno[i] != cgno; i++);
if (i < sb->u.ufs_sb.s_cg_loaded && sb->u.ufs_sb.s_cgno[i] == cgno) { if (i < sbi->s_cg_loaded && sbi->s_cgno[i] == cgno) {
cg = sb->u.ufs_sb.s_cgno[i]; cg = sbi->s_cgno[i];
ucpi = sb->u.ufs_sb.s_ucpi[i]; ucpi = sbi->s_ucpi[i];
for (j = i; j > 0; j--) { for (j = i; j > 0; j--) {
sb->u.ufs_sb.s_cgno[j] = sb->u.ufs_sb.s_cgno[j-1]; sbi->s_cgno[j] = sbi->s_cgno[j-1];
sb->u.ufs_sb.s_ucpi[j] = sb->u.ufs_sb.s_ucpi[j-1]; sbi->s_ucpi[j] = sbi->s_ucpi[j-1];
} }
sb->u.ufs_sb.s_cgno[0] = cg; sbi->s_cgno[0] = cg;
sb->u.ufs_sb.s_ucpi[0] = ucpi; sbi->s_ucpi[0] = ucpi;
/* /*
* Cylinder group number cg is not in cache, we will read it from disk * Cylinder group number cg is not in cache, we will read it from disk
* and put it to the first position * and put it to the first position
*/ */
} else { } else {
if (sb->u.ufs_sb.s_cg_loaded < UFS_MAX_GROUP_LOADED) if (sbi->s_cg_loaded < UFS_MAX_GROUP_LOADED)
sb->u.ufs_sb.s_cg_loaded++; sbi->s_cg_loaded++;
else else
ufs_put_cylinder (sb, UFS_MAX_GROUP_LOADED-1); ufs_put_cylinder (sb, UFS_MAX_GROUP_LOADED-1);
ucpi = sb->u.ufs_sb.s_ucpi[sb->u.ufs_sb.s_cg_loaded - 1]; ucpi = sbi->s_ucpi[sbi->s_cg_loaded - 1];
for (j = sb->u.ufs_sb.s_cg_loaded - 1; j > 0; j--) { for (j = sbi->s_cg_loaded - 1; j > 0; j--) {
sb->u.ufs_sb.s_cgno[j] = sb->u.ufs_sb.s_cgno[j-1]; sbi->s_cgno[j] = sbi->s_cgno[j-1];
sb->u.ufs_sb.s_ucpi[j] = sb->u.ufs_sb.s_ucpi[j-1]; sbi->s_ucpi[j] = sbi->s_ucpi[j-1];
} }
sb->u.ufs_sb.s_ucpi[0] = ucpi; sbi->s_ucpi[0] = ucpi;
ufs_read_cylinder (sb, cgno, 0); ufs_read_cylinder (sb, cgno, 0);
} }
UFSD(("EXIT\n")) UFSD(("EXIT\n"))
return sb->u.ufs_sb.s_ucpi[0]; return sbi->s_ucpi[0];
} }
...@@ -67,7 +67,7 @@ ufs_readdir (struct file * filp, void * dirent, filldir_t filldir) ...@@ -67,7 +67,7 @@ ufs_readdir (struct file * filp, void * dirent, filldir_t filldir)
lock_kernel(); lock_kernel();
sb = inode->i_sb; sb = inode->i_sb;
flags = sb->u.ufs_sb.s_flags; flags = UFS_SB(sb)->s_flags;
UFSD(("ENTER, ino %lu f_pos %lu\n", inode->i_ino, (unsigned long) filp->f_pos)) UFSD(("ENTER, ino %lu f_pos %lu\n", inode->i_ino, (unsigned long) filp->f_pos))
...@@ -308,8 +308,8 @@ int ufs_check_dir_entry (const char * function, struct inode * dir, ...@@ -308,8 +308,8 @@ int ufs_check_dir_entry (const char * function, struct inode * dir,
error_msg = "reclen is too small for namlen"; error_msg = "reclen is too small for namlen";
else if (((char *) de - bh->b_data) + rlen > dir->i_sb->s_blocksize) else if (((char *) de - bh->b_data) + rlen > dir->i_sb->s_blocksize)
error_msg = "directory entry across blocks"; error_msg = "directory entry across blocks";
else if (fs32_to_cpu(sb, de->d_ino) > (sb->u.ufs_sb.s_uspi->s_ipg * else if (fs32_to_cpu(sb, de->d_ino) > (UFS_SB(sb)->s_uspi->s_ipg *
sb->u.ufs_sb.s_uspi->s_ncg)) UFS_SB(sb)->s_uspi->s_ncg))
error_msg = "inode out of bounds"; error_msg = "inode out of bounds";
if (error_msg != NULL) if (error_msg != NULL)
...@@ -386,7 +386,7 @@ int ufs_add_link(struct dentry *dentry, struct inode *inode) ...@@ -386,7 +386,7 @@ int ufs_add_link(struct dentry *dentry, struct inode *inode)
UFSD(("ENTER, name %s, namelen %u\n", name, namelen)) UFSD(("ENTER, name %s, namelen %u\n", name, namelen))
sb = dir->i_sb; sb = dir->i_sb;
uspi = sb->u.ufs_sb.s_uspi; uspi = UFS_SB(sb)->s_uspi;
if (!namelen) if (!namelen)
return -EINVAL; return -EINVAL;
......
...@@ -71,7 +71,7 @@ void ufs_free_inode (struct inode * inode) ...@@ -71,7 +71,7 @@ void ufs_free_inode (struct inode * inode)
UFSD(("ENTER, ino %lu\n", inode->i_ino)) UFSD(("ENTER, ino %lu\n", inode->i_ino))
sb = inode->i_sb; sb = inode->i_sb;
uspi = sb->u.ufs_sb.s_uspi; uspi = UFS_SB(sb)->s_uspi;
usb1 = ubh_get_usb_first(USPI_UBH); usb1 = ubh_get_usb_first(USPI_UBH);
ino = inode->i_ino; ino = inode->i_ino;
...@@ -112,12 +112,12 @@ void ufs_free_inode (struct inode * inode) ...@@ -112,12 +112,12 @@ void ufs_free_inode (struct inode * inode)
ucpi->c_irotor = ino; ucpi->c_irotor = ino;
fs32_add(sb, &ucg->cg_cs.cs_nifree, 1); fs32_add(sb, &ucg->cg_cs.cs_nifree, 1);
fs32_add(sb, &usb1->fs_cstotal.cs_nifree, 1); fs32_add(sb, &usb1->fs_cstotal.cs_nifree, 1);
fs32_add(sb, &sb->fs_cs(cg).cs_nifree, 1); fs32_add(sb, &UFS_SB(sb)->fs_cs(cg).cs_nifree, 1);
if (is_directory) { if (is_directory) {
fs32_sub(sb, &ucg->cg_cs.cs_ndir, 1); fs32_sub(sb, &ucg->cg_cs.cs_ndir, 1);
fs32_sub(sb, &usb1->fs_cstotal.cs_ndir, 1); fs32_sub(sb, &usb1->fs_cstotal.cs_ndir, 1);
fs32_sub(sb, &sb->fs_cs(cg).cs_ndir, 1); fs32_sub(sb, &UFS_SB(sb)->fs_cs(cg).cs_ndir, 1);
} }
} }
...@@ -146,6 +146,7 @@ void ufs_free_inode (struct inode * inode) ...@@ -146,6 +146,7 @@ void ufs_free_inode (struct inode * inode)
struct inode * ufs_new_inode(struct inode * dir, int mode) struct inode * ufs_new_inode(struct inode * dir, int mode)
{ {
struct super_block * sb; struct super_block * sb;
struct ufs_sb_info * sbi;
struct ufs_sb_private_info * uspi; struct ufs_sb_private_info * uspi;
struct ufs_super_block_first * usb1; struct ufs_super_block_first * usb1;
struct ufs_cg_private_info * ucpi; struct ufs_cg_private_info * ucpi;
...@@ -164,7 +165,8 @@ struct inode * ufs_new_inode(struct inode * dir, int mode) ...@@ -164,7 +165,8 @@ struct inode * ufs_new_inode(struct inode * dir, int mode)
if (!inode) if (!inode)
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
ufsi = UFS_I(inode); ufsi = UFS_I(inode);
uspi = sb->u.ufs_sb.s_uspi; sbi = UFS_SB(sb);
uspi = sbi->s_uspi;
usb1 = ubh_get_usb_first(USPI_UBH); usb1 = ubh_get_usb_first(USPI_UBH);
lock_super (sb); lock_super (sb);
...@@ -173,7 +175,7 @@ struct inode * ufs_new_inode(struct inode * dir, int mode) ...@@ -173,7 +175,7 @@ struct inode * ufs_new_inode(struct inode * dir, int mode)
* Try to place the inode in its parent directory * Try to place the inode in its parent directory
*/ */
i = ufs_inotocg(dir->i_ino); i = ufs_inotocg(dir->i_ino);
if (sb->fs_cs(i).cs_nifree) { if (sbi->fs_cs(i).cs_nifree) {
cg = i; cg = i;
goto cg_found; goto cg_found;
} }
...@@ -185,7 +187,7 @@ struct inode * ufs_new_inode(struct inode * dir, int mode) ...@@ -185,7 +187,7 @@ struct inode * ufs_new_inode(struct inode * dir, int mode)
i += j; i += j;
if (i >= uspi->s_ncg) if (i >= uspi->s_ncg)
i -= uspi->s_ncg; i -= uspi->s_ncg;
if (sb->fs_cs(i).cs_nifree) { if (sbi->fs_cs(i).cs_nifree) {
cg = i; cg = i;
goto cg_found; goto cg_found;
} }
...@@ -199,7 +201,7 @@ struct inode * ufs_new_inode(struct inode * dir, int mode) ...@@ -199,7 +201,7 @@ struct inode * ufs_new_inode(struct inode * dir, int mode)
i++; i++;
if (i >= uspi->s_ncg) if (i >= uspi->s_ncg)
i = 0; i = 0;
if (sb->fs_cs(i).cs_nifree) { if (sbi->fs_cs(i).cs_nifree) {
cg = i; cg = i;
goto cg_found; goto cg_found;
} }
...@@ -235,12 +237,12 @@ struct inode * ufs_new_inode(struct inode * dir, int mode) ...@@ -235,12 +237,12 @@ struct inode * ufs_new_inode(struct inode * dir, int mode)
fs32_sub(sb, &ucg->cg_cs.cs_nifree, 1); fs32_sub(sb, &ucg->cg_cs.cs_nifree, 1);
fs32_sub(sb, &usb1->fs_cstotal.cs_nifree, 1); fs32_sub(sb, &usb1->fs_cstotal.cs_nifree, 1);
fs32_sub(sb, &sb->fs_cs(cg).cs_nifree, 1); fs32_sub(sb, &sbi->fs_cs(cg).cs_nifree, 1);
if (S_ISDIR(mode)) { if (S_ISDIR(mode)) {
fs32_add(sb, &ucg->cg_cs.cs_ndir, 1); fs32_add(sb, &ucg->cg_cs.cs_ndir, 1);
fs32_add(sb, &usb1->fs_cstotal.cs_ndir, 1); fs32_add(sb, &usb1->fs_cstotal.cs_ndir, 1);
fs32_add(sb, &sb->fs_cs(cg).cs_ndir, 1); fs32_add(sb, &sbi->fs_cs(cg).cs_ndir, 1);
} }
ubh_mark_buffer_dirty (USPI_UBH); ubh_mark_buffer_dirty (USPI_UBH);
......
...@@ -52,7 +52,7 @@ ...@@ -52,7 +52,7 @@
static int ufs_block_to_path(struct inode *inode, long i_block, int offsets[4]) static int ufs_block_to_path(struct inode *inode, long i_block, int offsets[4])
{ {
struct ufs_sb_private_info *uspi = inode->i_sb->u.ufs_sb.s_uspi; struct ufs_sb_private_info *uspi = UFS_SB(inode->i_sb)->s_uspi;
int ptrs = uspi->s_apb; int ptrs = uspi->s_apb;
int ptrs_bits = uspi->s_apbshift; int ptrs_bits = uspi->s_apbshift;
const long direct_blocks = UFS_NDADDR, const long direct_blocks = UFS_NDADDR,
...@@ -86,7 +86,7 @@ int ufs_frag_map(struct inode *inode, int frag) ...@@ -86,7 +86,7 @@ int ufs_frag_map(struct inode *inode, int frag)
{ {
struct ufs_inode_info *ufsi = UFS_I(inode); struct ufs_inode_info *ufsi = UFS_I(inode);
struct super_block *sb = inode->i_sb; struct super_block *sb = inode->i_sb;
struct ufs_sb_private_info *uspi = sb->u.ufs_sb.s_uspi; struct ufs_sb_private_info *uspi = UFS_SB(sb)->s_uspi;
int mask = uspi->s_apbmask>>uspi->s_fpbshift; int mask = uspi->s_apbmask>>uspi->s_fpbshift;
int shift = uspi->s_apbshift-uspi->s_fpbshift; int shift = uspi->s_apbshift-uspi->s_fpbshift;
int offsets[4], *p; int offsets[4], *p;
...@@ -137,7 +137,7 @@ static struct buffer_head * ufs_inode_getfrag (struct inode *inode, ...@@ -137,7 +137,7 @@ static struct buffer_head * ufs_inode_getfrag (struct inode *inode,
inode->i_ino, fragment, new_fragment, required)) inode->i_ino, fragment, new_fragment, required))
sb = inode->i_sb; sb = inode->i_sb;
uspi = sb->u.ufs_sb.s_uspi; uspi = UFS_SB(sb)->s_uspi;
block = ufs_fragstoblks (fragment); block = ufs_fragstoblks (fragment);
blockoff = ufs_fragnum (fragment); blockoff = ufs_fragnum (fragment);
p = ufsi->i_u1.i_data + block; p = ufsi->i_u1.i_data + block;
...@@ -243,7 +243,7 @@ static struct buffer_head * ufs_block_getfrag (struct inode *inode, ...@@ -243,7 +243,7 @@ static struct buffer_head * ufs_block_getfrag (struct inode *inode,
u32 * p; u32 * p;
sb = inode->i_sb; sb = inode->i_sb;
uspi = sb->u.ufs_sb.s_uspi; uspi = UFS_SB(sb)->s_uspi;
block = ufs_fragstoblks (fragment); block = ufs_fragstoblks (fragment);
blockoff = ufs_fragnum (fragment); blockoff = ufs_fragnum (fragment);
...@@ -313,7 +313,7 @@ static struct buffer_head * ufs_block_getfrag (struct inode *inode, ...@@ -313,7 +313,7 @@ static struct buffer_head * ufs_block_getfrag (struct inode *inode,
static int ufs_getfrag_block (struct inode *inode, sector_t fragment, struct buffer_head *bh_result, int create) static int ufs_getfrag_block (struct inode *inode, sector_t fragment, struct buffer_head *bh_result, int create)
{ {
struct super_block * sb = inode->i_sb; struct super_block * sb = inode->i_sb;
struct ufs_sb_private_info * uspi = sb->u.ufs_sb.s_uspi; struct ufs_sb_private_info * uspi = UFS_SB(sb)->s_uspi;
struct buffer_head * bh; struct buffer_head * bh;
int ret, err, new; int ret, err, new;
unsigned long ptr, phys; unsigned long ptr, phys;
...@@ -483,8 +483,8 @@ void ufs_read_inode (struct inode * inode) ...@@ -483,8 +483,8 @@ void ufs_read_inode (struct inode * inode)
UFSD(("ENTER, ino %lu\n", inode->i_ino)) UFSD(("ENTER, ino %lu\n", inode->i_ino))
sb = inode->i_sb; sb = inode->i_sb;
uspi = sb->u.ufs_sb.s_uspi; uspi = UFS_SB(sb)->s_uspi;
flags = sb->u.ufs_sb.s_flags; flags = UFS_SB(sb)->s_flags;
if (inode->i_ino < UFS_ROOTINO || if (inode->i_ino < UFS_ROOTINO ||
inode->i_ino > (uspi->s_ncg * uspi->s_ipg)) { inode->i_ino > (uspi->s_ncg * uspi->s_ipg)) {
...@@ -579,8 +579,8 @@ static int ufs_update_inode(struct inode * inode, int do_sync) ...@@ -579,8 +579,8 @@ static int ufs_update_inode(struct inode * inode, int do_sync)
UFSD(("ENTER, ino %lu\n", inode->i_ino)) UFSD(("ENTER, ino %lu\n", inode->i_ino))
sb = inode->i_sb; sb = inode->i_sb;
uspi = sb->u.ufs_sb.s_uspi; uspi = UFS_SB(sb)->s_uspi;
flags = sb->u.ufs_sb.s_flags; flags = UFS_SB(sb)->s_flags;
if (inode->i_ino < UFS_ROOTINO || if (inode->i_ino < UFS_ROOTINO ||
inode->i_ino > (uspi->s_ncg * uspi->s_ipg)) { inode->i_ino > (uspi->s_ncg * uspi->s_ipg)) {
......
...@@ -139,7 +139,7 @@ static int ufs_symlink (struct inode * dir, struct dentry * dentry, ...@@ -139,7 +139,7 @@ static int ufs_symlink (struct inode * dir, struct dentry * dentry,
if (IS_ERR(inode)) if (IS_ERR(inode))
goto out; goto out;
if (l > sb->u.ufs_sb.s_uspi->s_maxsymlinklen) { if (l > UFS_SB(sb)->s_uspi->s_maxsymlinklen) {
/* slow symlink */ /* slow symlink */
inode->i_op = &page_symlink_inode_operations; inode->i_op = &page_symlink_inode_operations;
inode->i_mapping->a_ops = &ufs_aops; inode->i_mapping->a_ops = &ufs_aops;
......
This diff is collapsed.
...@@ -25,7 +25,7 @@ enum { ...@@ -25,7 +25,7 @@ enum {
static __inline u64 static __inline u64
fs64_to_cpu(struct super_block *sbp, u64 n) fs64_to_cpu(struct super_block *sbp, u64 n)
{ {
if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE) if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
return le64_to_cpu(n); return le64_to_cpu(n);
else else
return be64_to_cpu(n); return be64_to_cpu(n);
...@@ -34,7 +34,7 @@ fs64_to_cpu(struct super_block *sbp, u64 n) ...@@ -34,7 +34,7 @@ fs64_to_cpu(struct super_block *sbp, u64 n)
static __inline u64 static __inline u64
cpu_to_fs64(struct super_block *sbp, u64 n) cpu_to_fs64(struct super_block *sbp, u64 n)
{ {
if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE) if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
return cpu_to_le64(n); return cpu_to_le64(n);
else else
return cpu_to_be64(n); return cpu_to_be64(n);
...@@ -43,7 +43,7 @@ cpu_to_fs64(struct super_block *sbp, u64 n) ...@@ -43,7 +43,7 @@ cpu_to_fs64(struct super_block *sbp, u64 n)
static __inline u32 static __inline u32
fs64_add(struct super_block *sbp, u32 *n, int d) fs64_add(struct super_block *sbp, u32 *n, int d)
{ {
if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE) if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
return *n = cpu_to_le64(le64_to_cpu(*n)+d); return *n = cpu_to_le64(le64_to_cpu(*n)+d);
else else
return *n = cpu_to_be64(be64_to_cpu(*n)+d); return *n = cpu_to_be64(be64_to_cpu(*n)+d);
...@@ -52,7 +52,7 @@ fs64_add(struct super_block *sbp, u32 *n, int d) ...@@ -52,7 +52,7 @@ fs64_add(struct super_block *sbp, u32 *n, int d)
static __inline u32 static __inline u32
fs64_sub(struct super_block *sbp, u32 *n, int d) fs64_sub(struct super_block *sbp, u32 *n, int d)
{ {
if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE) if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
return *n = cpu_to_le64(le64_to_cpu(*n)-d); return *n = cpu_to_le64(le64_to_cpu(*n)-d);
else else
return *n = cpu_to_be64(be64_to_cpu(*n)-d); return *n = cpu_to_be64(be64_to_cpu(*n)-d);
...@@ -61,7 +61,7 @@ fs64_sub(struct super_block *sbp, u32 *n, int d) ...@@ -61,7 +61,7 @@ fs64_sub(struct super_block *sbp, u32 *n, int d)
static __inline u32 static __inline u32
fs32_to_cpu(struct super_block *sbp, u32 n) fs32_to_cpu(struct super_block *sbp, u32 n)
{ {
if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE) if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
return le32_to_cpu(n); return le32_to_cpu(n);
else else
return be32_to_cpu(n); return be32_to_cpu(n);
...@@ -70,7 +70,7 @@ fs32_to_cpu(struct super_block *sbp, u32 n) ...@@ -70,7 +70,7 @@ fs32_to_cpu(struct super_block *sbp, u32 n)
static __inline u32 static __inline u32
cpu_to_fs32(struct super_block *sbp, u32 n) cpu_to_fs32(struct super_block *sbp, u32 n)
{ {
if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE) if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
return cpu_to_le32(n); return cpu_to_le32(n);
else else
return cpu_to_be32(n); return cpu_to_be32(n);
...@@ -79,7 +79,7 @@ cpu_to_fs32(struct super_block *sbp, u32 n) ...@@ -79,7 +79,7 @@ cpu_to_fs32(struct super_block *sbp, u32 n)
static __inline u32 static __inline u32
fs32_add(struct super_block *sbp, u32 *n, int d) fs32_add(struct super_block *sbp, u32 *n, int d)
{ {
if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE) if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
return *n = cpu_to_le32(le32_to_cpu(*n)+d); return *n = cpu_to_le32(le32_to_cpu(*n)+d);
else else
return *n = cpu_to_be32(be32_to_cpu(*n)+d); return *n = cpu_to_be32(be32_to_cpu(*n)+d);
...@@ -88,7 +88,7 @@ fs32_add(struct super_block *sbp, u32 *n, int d) ...@@ -88,7 +88,7 @@ fs32_add(struct super_block *sbp, u32 *n, int d)
static __inline u32 static __inline u32
fs32_sub(struct super_block *sbp, u32 *n, int d) fs32_sub(struct super_block *sbp, u32 *n, int d)
{ {
if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE) if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
return *n = cpu_to_le32(le32_to_cpu(*n)-d); return *n = cpu_to_le32(le32_to_cpu(*n)-d);
else else
return *n = cpu_to_be32(be32_to_cpu(*n)-d); return *n = cpu_to_be32(be32_to_cpu(*n)-d);
...@@ -97,7 +97,7 @@ fs32_sub(struct super_block *sbp, u32 *n, int d) ...@@ -97,7 +97,7 @@ fs32_sub(struct super_block *sbp, u32 *n, int d)
static __inline u16 static __inline u16
fs16_to_cpu(struct super_block *sbp, u16 n) fs16_to_cpu(struct super_block *sbp, u16 n)
{ {
if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE) if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
return le16_to_cpu(n); return le16_to_cpu(n);
else else
return be16_to_cpu(n); return be16_to_cpu(n);
...@@ -106,7 +106,7 @@ fs16_to_cpu(struct super_block *sbp, u16 n) ...@@ -106,7 +106,7 @@ fs16_to_cpu(struct super_block *sbp, u16 n)
static __inline u16 static __inline u16
cpu_to_fs16(struct super_block *sbp, u16 n) cpu_to_fs16(struct super_block *sbp, u16 n)
{ {
if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE) if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
return cpu_to_le16(n); return cpu_to_le16(n);
else else
return cpu_to_be16(n); return cpu_to_be16(n);
...@@ -115,7 +115,7 @@ cpu_to_fs16(struct super_block *sbp, u16 n) ...@@ -115,7 +115,7 @@ cpu_to_fs16(struct super_block *sbp, u16 n)
static __inline u16 static __inline u16
fs16_add(struct super_block *sbp, u16 *n, int d) fs16_add(struct super_block *sbp, u16 *n, int d)
{ {
if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE) if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
return *n = cpu_to_le16(le16_to_cpu(*n)+d); return *n = cpu_to_le16(le16_to_cpu(*n)+d);
else else
return *n = cpu_to_be16(be16_to_cpu(*n)+d); return *n = cpu_to_be16(be16_to_cpu(*n)+d);
...@@ -124,7 +124,7 @@ fs16_add(struct super_block *sbp, u16 *n, int d) ...@@ -124,7 +124,7 @@ fs16_add(struct super_block *sbp, u16 *n, int d)
static __inline u16 static __inline u16
fs16_sub(struct super_block *sbp, u16 *n, int d) fs16_sub(struct super_block *sbp, u16 *n, int d)
{ {
if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE) if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
return *n = cpu_to_le16(le16_to_cpu(*n)-d); return *n = cpu_to_le16(le16_to_cpu(*n)-d);
else else
return *n = cpu_to_be16(be16_to_cpu(*n)-d); return *n = cpu_to_be16(be16_to_cpu(*n)-d);
......
...@@ -82,7 +82,7 @@ static int ufs_trunc_direct (struct inode * inode) ...@@ -82,7 +82,7 @@ static int ufs_trunc_direct (struct inode * inode)
UFSD(("ENTER\n")) UFSD(("ENTER\n"))
sb = inode->i_sb; sb = inode->i_sb;
uspi = sb->u.ufs_sb.s_uspi; uspi = UFS_SB(sb)->s_uspi;
frag_to_free = 0; frag_to_free = 0;
free_count = 0; free_count = 0;
...@@ -212,7 +212,7 @@ static int ufs_trunc_indirect (struct inode * inode, unsigned offset, u32 * p) ...@@ -212,7 +212,7 @@ static int ufs_trunc_indirect (struct inode * inode, unsigned offset, u32 * p)
UFSD(("ENTER\n")) UFSD(("ENTER\n"))
sb = inode->i_sb; sb = inode->i_sb;
uspi = sb->u.ufs_sb.s_uspi; uspi = UFS_SB(sb)->s_uspi;
frag_to_free = 0; frag_to_free = 0;
free_count = 0; free_count = 0;
...@@ -306,7 +306,7 @@ static int ufs_trunc_dindirect (struct inode * inode, unsigned offset, u32 * p) ...@@ -306,7 +306,7 @@ static int ufs_trunc_dindirect (struct inode * inode, unsigned offset, u32 * p)
UFSD(("ENTER\n")) UFSD(("ENTER\n"))
sb = inode->i_sb; sb = inode->i_sb;
uspi = sb->u.ufs_sb.s_uspi; uspi = UFS_SB(sb)->s_uspi;
dindirect_block = (DIRECT_BLOCK > offset) dindirect_block = (DIRECT_BLOCK > offset)
? ((DIRECT_BLOCK - offset) >> uspi->s_apbshift) : 0; ? ((DIRECT_BLOCK - offset) >> uspi->s_apbshift) : 0;
...@@ -374,7 +374,7 @@ static int ufs_trunc_tindirect (struct inode * inode) ...@@ -374,7 +374,7 @@ static int ufs_trunc_tindirect (struct inode * inode)
UFSD(("ENTER\n")) UFSD(("ENTER\n"))
sb = inode->i_sb; sb = inode->i_sb;
uspi = sb->u.ufs_sb.s_uspi; uspi = UFS_SB(sb)->s_uspi;
retry = 0; retry = 0;
tindirect_block = (DIRECT_BLOCK > (UFS_NDADDR + uspi->s_apb + uspi->s_2apb)) tindirect_block = (DIRECT_BLOCK > (UFS_NDADDR + uspi->s_apb + uspi->s_2apb))
...@@ -435,7 +435,7 @@ void ufs_truncate (struct inode * inode) ...@@ -435,7 +435,7 @@ void ufs_truncate (struct inode * inode)
UFSD(("ENTER\n")) UFSD(("ENTER\n"))
sb = inode->i_sb; sb = inode->i_sb;
uspi = sb->u.ufs_sb.s_uspi; uspi = UFS_SB(sb)->s_uspi;
if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode))) if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode)))
return; return;
......
...@@ -31,7 +31,7 @@ static inline s32 ...@@ -31,7 +31,7 @@ static inline s32
ufs_get_fs_state(struct super_block *sb, struct ufs_super_block_first *usb1, ufs_get_fs_state(struct super_block *sb, struct ufs_super_block_first *usb1,
struct ufs_super_block_third *usb3) struct ufs_super_block_third *usb3)
{ {
switch (sb->u.ufs_sb.s_flags & UFS_ST_MASK) { switch (UFS_SB(sb)->s_flags & UFS_ST_MASK) {
case UFS_ST_SUN: case UFS_ST_SUN:
return fs32_to_cpu(sb, usb3->fs_u2.fs_sun.fs_state); return fs32_to_cpu(sb, usb3->fs_u2.fs_sun.fs_state);
case UFS_ST_SUNx86: case UFS_ST_SUNx86:
...@@ -46,7 +46,7 @@ static inline void ...@@ -46,7 +46,7 @@ static inline void
ufs_set_fs_state(struct super_block *sb, struct ufs_super_block_first *usb1, ufs_set_fs_state(struct super_block *sb, struct ufs_super_block_first *usb1,
struct ufs_super_block_third *usb3, s32 value) struct ufs_super_block_third *usb3, s32 value)
{ {
switch (sb->u.ufs_sb.s_flags & UFS_ST_MASK) { switch (UFS_SB(sb)->s_flags & UFS_ST_MASK) {
case UFS_ST_SUN: case UFS_ST_SUN:
usb3->fs_u2.fs_sun.fs_state = cpu_to_fs32(sb, value); usb3->fs_u2.fs_sun.fs_state = cpu_to_fs32(sb, value);
break; break;
...@@ -63,7 +63,7 @@ static inline u32 ...@@ -63,7 +63,7 @@ static inline u32
ufs_get_fs_npsect(struct super_block *sb, struct ufs_super_block_first *usb1, ufs_get_fs_npsect(struct super_block *sb, struct ufs_super_block_first *usb1,
struct ufs_super_block_third *usb3) struct ufs_super_block_third *usb3)
{ {
if ((sb->u.ufs_sb.s_flags & UFS_ST_MASK) == UFS_ST_SUNx86) if ((UFS_SB(sb)->s_flags & UFS_ST_MASK) == UFS_ST_SUNx86)
return fs32_to_cpu(sb, usb3->fs_u2.fs_sunx86.fs_npsect); return fs32_to_cpu(sb, usb3->fs_u2.fs_sunx86.fs_npsect);
else else
return fs32_to_cpu(sb, usb1->fs_u1.fs_sun.fs_npsect); return fs32_to_cpu(sb, usb1->fs_u1.fs_sun.fs_npsect);
...@@ -74,7 +74,7 @@ ufs_get_fs_qbmask(struct super_block *sb, struct ufs_super_block_third *usb3) ...@@ -74,7 +74,7 @@ ufs_get_fs_qbmask(struct super_block *sb, struct ufs_super_block_third *usb3)
{ {
u64 tmp; u64 tmp;
switch (sb->u.ufs_sb.s_flags & UFS_ST_MASK) { switch (UFS_SB(sb)->s_flags & UFS_ST_MASK) {
case UFS_ST_SUN: case UFS_ST_SUN:
((u32 *)&tmp)[0] = usb3->fs_u2.fs_sun.fs_qbmask[0]; ((u32 *)&tmp)[0] = usb3->fs_u2.fs_sun.fs_qbmask[0];
((u32 *)&tmp)[1] = usb3->fs_u2.fs_sun.fs_qbmask[1]; ((u32 *)&tmp)[1] = usb3->fs_u2.fs_sun.fs_qbmask[1];
...@@ -97,7 +97,7 @@ ufs_get_fs_qfmask(struct super_block *sb, struct ufs_super_block_third *usb3) ...@@ -97,7 +97,7 @@ ufs_get_fs_qfmask(struct super_block *sb, struct ufs_super_block_third *usb3)
{ {
u64 tmp; u64 tmp;
switch (sb->u.ufs_sb.s_flags & UFS_ST_MASK) { switch (UFS_SB(sb)->s_flags & UFS_ST_MASK) {
case UFS_ST_SUN: case UFS_ST_SUN:
((u32 *)&tmp)[0] = usb3->fs_u2.fs_sun.fs_qfmask[0]; ((u32 *)&tmp)[0] = usb3->fs_u2.fs_sun.fs_qfmask[0];
((u32 *)&tmp)[1] = usb3->fs_u2.fs_sun.fs_qfmask[1]; ((u32 *)&tmp)[1] = usb3->fs_u2.fs_sun.fs_qfmask[1];
...@@ -118,7 +118,7 @@ ufs_get_fs_qfmask(struct super_block *sb, struct ufs_super_block_third *usb3) ...@@ -118,7 +118,7 @@ ufs_get_fs_qfmask(struct super_block *sb, struct ufs_super_block_third *usb3)
static inline u16 static inline u16
ufs_get_de_namlen(struct super_block *sb, struct ufs_dir_entry *de) ufs_get_de_namlen(struct super_block *sb, struct ufs_dir_entry *de)
{ {
if ((sb->u.ufs_sb.s_flags & UFS_DE_MASK) == UFS_DE_OLD) if ((UFS_SB(sb)->s_flags & UFS_DE_MASK) == UFS_DE_OLD)
return fs16_to_cpu(sb, de->d_u.d_namlen); return fs16_to_cpu(sb, de->d_u.d_namlen);
else else
return de->d_u.d_44.d_namlen; /* XXX this seems wrong */ return de->d_u.d_44.d_namlen; /* XXX this seems wrong */
...@@ -127,7 +127,7 @@ ufs_get_de_namlen(struct super_block *sb, struct ufs_dir_entry *de) ...@@ -127,7 +127,7 @@ ufs_get_de_namlen(struct super_block *sb, struct ufs_dir_entry *de)
static inline void static inline void
ufs_set_de_namlen(struct super_block *sb, struct ufs_dir_entry *de, u16 value) ufs_set_de_namlen(struct super_block *sb, struct ufs_dir_entry *de, u16 value)
{ {
if ((sb->u.ufs_sb.s_flags & UFS_DE_MASK) == UFS_DE_OLD) if ((UFS_SB(sb)->s_flags & UFS_DE_MASK) == UFS_DE_OLD)
de->d_u.d_namlen = cpu_to_fs16(sb, value); de->d_u.d_namlen = cpu_to_fs16(sb, value);
else else
de->d_u.d_44.d_namlen = value; /* XXX this seems wrong */ de->d_u.d_44.d_namlen = value; /* XXX this seems wrong */
...@@ -136,7 +136,7 @@ ufs_set_de_namlen(struct super_block *sb, struct ufs_dir_entry *de, u16 value) ...@@ -136,7 +136,7 @@ ufs_set_de_namlen(struct super_block *sb, struct ufs_dir_entry *de, u16 value)
static inline void static inline void
ufs_set_de_type(struct super_block *sb, struct ufs_dir_entry *de, int mode) ufs_set_de_type(struct super_block *sb, struct ufs_dir_entry *de, int mode)
{ {
if ((sb->u.ufs_sb.s_flags & UFS_DE_MASK) != UFS_DE_44BSD) if ((UFS_SB(sb)->s_flags & UFS_DE_MASK) != UFS_DE_44BSD)
return; return;
/* /*
...@@ -172,7 +172,7 @@ ufs_set_de_type(struct super_block *sb, struct ufs_dir_entry *de, int mode) ...@@ -172,7 +172,7 @@ ufs_set_de_type(struct super_block *sb, struct ufs_dir_entry *de, int mode)
static inline u32 static inline u32
ufs_get_inode_uid(struct super_block *sb, struct ufs_inode *inode) ufs_get_inode_uid(struct super_block *sb, struct ufs_inode *inode)
{ {
switch (sb->u.ufs_sb.s_flags & UFS_UID_MASK) { switch (UFS_SB(sb)->s_flags & UFS_UID_MASK) {
case UFS_UID_EFT: case UFS_UID_EFT:
return fs32_to_cpu(sb, inode->ui_u3.ui_sun.ui_uid); return fs32_to_cpu(sb, inode->ui_u3.ui_sun.ui_uid);
case UFS_UID_44BSD: case UFS_UID_44BSD:
...@@ -185,7 +185,7 @@ ufs_get_inode_uid(struct super_block *sb, struct ufs_inode *inode) ...@@ -185,7 +185,7 @@ ufs_get_inode_uid(struct super_block *sb, struct ufs_inode *inode)
static inline void static inline void
ufs_set_inode_uid(struct super_block *sb, struct ufs_inode *inode, u32 value) ufs_set_inode_uid(struct super_block *sb, struct ufs_inode *inode, u32 value)
{ {
switch (sb->u.ufs_sb.s_flags & UFS_UID_MASK) { switch (UFS_SB(sb)->s_flags & UFS_UID_MASK) {
case UFS_UID_EFT: case UFS_UID_EFT:
inode->ui_u3.ui_sun.ui_uid = cpu_to_fs32(sb, value); inode->ui_u3.ui_sun.ui_uid = cpu_to_fs32(sb, value);
break; break;
...@@ -199,7 +199,7 @@ ufs_set_inode_uid(struct super_block *sb, struct ufs_inode *inode, u32 value) ...@@ -199,7 +199,7 @@ ufs_set_inode_uid(struct super_block *sb, struct ufs_inode *inode, u32 value)
static inline u32 static inline u32
ufs_get_inode_gid(struct super_block *sb, struct ufs_inode *inode) ufs_get_inode_gid(struct super_block *sb, struct ufs_inode *inode)
{ {
switch (sb->u.ufs_sb.s_flags & UFS_UID_MASK) { switch (UFS_SB(sb)->s_flags & UFS_UID_MASK) {
case UFS_UID_EFT: case UFS_UID_EFT:
return fs32_to_cpu(sb, inode->ui_u3.ui_sun.ui_gid); return fs32_to_cpu(sb, inode->ui_u3.ui_sun.ui_gid);
case UFS_UID_44BSD: case UFS_UID_44BSD:
...@@ -212,7 +212,7 @@ ufs_get_inode_gid(struct super_block *sb, struct ufs_inode *inode) ...@@ -212,7 +212,7 @@ ufs_get_inode_gid(struct super_block *sb, struct ufs_inode *inode)
static inline void static inline void
ufs_set_inode_gid(struct super_block *sb, struct ufs_inode *inode, u32 value) ufs_set_inode_gid(struct super_block *sb, struct ufs_inode *inode, u32 value)
{ {
switch (sb->u.ufs_sb.s_flags & UFS_UID_MASK) { switch (UFS_SB(sb)->s_flags & UFS_UID_MASK) {
case UFS_UID_EFT: case UFS_UID_EFT:
inode->ui_u3.ui_sun.ui_gid = cpu_to_fs32(sb, value); inode->ui_u3.ui_sun.ui_gid = cpu_to_fs32(sb, value);
break; break;
...@@ -481,7 +481,7 @@ static inline void ufs_fragacct (struct super_block * sb, unsigned blockmap, ...@@ -481,7 +481,7 @@ static inline void ufs_fragacct (struct super_block * sb, unsigned blockmap,
struct ufs_sb_private_info * uspi; struct ufs_sb_private_info * uspi;
unsigned fragsize, pos; unsigned fragsize, pos;
uspi = sb->u.ufs_sb.s_uspi; uspi = UFS_SB(sb)->s_uspi;
fragsize = 0; fragsize = 0;
for (pos = 0; pos < uspi->s_fpb; pos++) { for (pos = 0; pos < uspi->s_fpb; pos++) {
......
...@@ -624,8 +624,6 @@ extern void __kill_fasync(struct fasync_struct *, int, int); ...@@ -624,8 +624,6 @@ extern void __kill_fasync(struct fasync_struct *, int, int);
#include <linux/ext3_fs_sb.h> #include <linux/ext3_fs_sb.h>
#include <linux/hpfs_fs_sb.h> #include <linux/hpfs_fs_sb.h>
#include <linux/ufs_fs_sb.h>
#include <linux/romfs_fs_sb.h>
extern struct list_head super_blocks; extern struct list_head super_blocks;
extern spinlock_t sb_lock; extern spinlock_t sb_lock;
...@@ -670,8 +668,6 @@ struct super_block { ...@@ -670,8 +668,6 @@ struct super_block {
union { union {
struct ext3_sb_info ext3_sb; struct ext3_sb_info ext3_sb;
struct hpfs_sb_info hpfs_sb; struct hpfs_sb_info hpfs_sb;
struct ufs_sb_info ufs_sb;
struct romfs_sb_info romfs_sb;
void *generic_sbp; void *generic_sbp;
} u; } u;
/* /*
......
#ifndef __LINUX_PREEMPT_H #ifndef __LINUX_PREEMPT_H
#define __LINUX_PREEMPT_H #define __LINUX_PREEMPT_H
/*
* include/linux/preempt.h - macros for accessing and manipulating
* preempt_count (used for kernel preemption, interrupt count, etc.)
*/
#include <linux/config.h> #include <linux/config.h>
#define preempt_count() (current_thread_info()->preempt_count) #define preempt_count() (current_thread_info()->preempt_count)
...@@ -31,17 +36,16 @@ do { \ ...@@ -31,17 +36,16 @@ do { \
barrier(); \ barrier(); \
} while (0) } while (0)
#define preempt_enable() \ #define preempt_check_resched() \
do { \ do { \
preempt_enable_no_resched(); \
if (unlikely(test_thread_flag(TIF_NEED_RESCHED))) \ if (unlikely(test_thread_flag(TIF_NEED_RESCHED))) \
preempt_schedule(); \ preempt_schedule(); \
} while (0) } while (0)
#define preempt_check_resched() \ #define preempt_enable() \
do { \ do { \
if (unlikely(test_thread_flag(TIF_NEED_RESCHED))) \ preempt_enable_no_resched(); \
preempt_schedule(); \ preempt_check_resched(); \
} while (0) } while (0)
#define inc_preempt_count_non_preempt() do { } while (0) #define inc_preempt_count_non_preempt() do { } while (0)
...@@ -50,7 +54,7 @@ do { \ ...@@ -50,7 +54,7 @@ do { \
#else #else
#define preempt_disable() do { } while (0) #define preempt_disable() do { } while (0)
#define preempt_enable_no_resched() do {} while(0) #define preempt_enable_no_resched() do { } while (0)
#define preempt_enable() do { } while (0) #define preempt_enable() do { } while (0)
#define preempt_check_resched() do { } while (0) #define preempt_check_resched() do { } while (0)
......
#ifndef __ROMFS_FS_SB
#define __ROMFS_FS_SB
/* romfs superblock in-core data */
struct romfs_sb_info {
unsigned long s_maxsize;
};
#endif
This diff is collapsed.
...@@ -33,6 +33,9 @@ ...@@ -33,6 +33,9 @@
#include <linux/stat.h> #include <linux/stat.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/ufs_fs_i.h>
#include <linux/ufs_fs_sb.h>
#define UFS_BBLOCK 0 #define UFS_BBLOCK 0
#define UFS_BBSIZE 8192 #define UFS_BBSIZE 8192
#define UFS_SBLOCK 8192 #define UFS_SBLOCK 8192
...@@ -398,7 +401,7 @@ struct ufs_super_block { ...@@ -398,7 +401,7 @@ struct ufs_super_block {
* Convert cylinder group to base address of its global summary info. * Convert cylinder group to base address of its global summary info.
*/ */
#define fs_cs(indx) \ #define fs_cs(indx) \
u.ufs_sb.s_csp[(indx) >> uspi->s_csshift][(indx) & ~uspi->s_csmask] s_csp[(indx) >> uspi->s_csshift][(indx) & ~uspi->s_csmask]
/* /*
* Cylinder group block for a file system. * Cylinder group block for a file system.
...@@ -780,7 +783,10 @@ extern struct inode_operations ufs_fast_symlink_inode_operations; ...@@ -780,7 +783,10 @@ extern struct inode_operations ufs_fast_symlink_inode_operations;
/* truncate.c */ /* truncate.c */
extern void ufs_truncate (struct inode *); extern void ufs_truncate (struct inode *);
#include <linux/ufs_fs_i.h> static inline struct ufs_sb_info *UFS_SB(struct super_block *sb)
{
return sb->u.generic_sbp;
}
static inline struct ufs_inode_info *UFS_I(struct inode *inode) static inline struct ufs_inode_info *UFS_I(struct inode *inode)
{ {
......
...@@ -731,7 +731,7 @@ asmlinkage long sys_wait4(pid_t pid,unsigned int * stat_addr, int options, struc ...@@ -731,7 +731,7 @@ asmlinkage long sys_wait4(pid_t pid,unsigned int * stat_addr, int options, struc
tsk = next_thread(tsk); tsk = next_thread(tsk);
} while (tsk != current); } while (tsk != current);
read_unlock(&tasklist_lock); read_unlock(&tasklist_lock);
if (flag) { if (flag || !list_empty(&current->ptrace_children)) {
retval = 0; retval = 0;
if (options & WNOHANG) if (options & WNOHANG)
goto end_wait4; goto end_wait4;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment