Commit af953c94 authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

[PATCH] gcc-3.5: intermezzo

fs/intermezzo/dir.c: In function `presto_prep':
fs/intermezzo/intermezzo_fs.h:414: sorry, unimplemented: inlining failed in call to 'presto_is_read_only': function body not available

fs/intermezzo/presto.c: In function `izo_mark_cache':
fs/intermezzo/presto.c:341: error: invalid lvalue in assignment
fs/intermezzo/presto.c:342: error: invalid lvalue in assignment
parent 5f12c733
......@@ -74,6 +74,14 @@ inline void presto_cache_init_hash(void)
}
}
int izo_ioctl_packlen(struct izo_ioctl_data *data)
{
int len = sizeof(struct izo_ioctl_data);
len += size_round(data->ioc_inllen1);
len += size_round(data->ioc_inllen2);
return len;
}
/* map a device to a cache */
struct presto_cache *presto_cache_find(struct super_block *s)
{
......
......@@ -49,8 +49,6 @@ struct lento_vfs_context {
struct presto_version remote_version;
};
static inline int izo_ioctl_is_invalid(struct izo_ioctl_data *data);
#ifdef __KERNEL__
# include <linux/smp.h>
# include <linux/fsfilter.h>
......@@ -335,7 +333,7 @@ int izo_psdev_get_free_channel(void);
int presto_psdev_init(void);
int izo_psdev_setpid(int minor);
extern void presto_psdev_cleanup(void);
inline int presto_lento_up(int minor);
int presto_lento_up(int minor);
int izo_psdev_setchannel(struct file *file, int fd);
/* inode.c */
......@@ -346,7 +344,7 @@ void presto_set_ops(struct inode *inode, struct filter_fs *filter);
void presto_frob_dop(struct dentry *de);
char *presto_path(struct dentry *dentry, struct dentry *root,
char *buffer, int buflen);
inline struct presto_dentry_data *izo_alloc_ddata(void);
struct presto_dentry_data *izo_alloc_ddata(void);
int presto_set_dd(struct dentry *);
int presto_init_ddata_cache(void);
void presto_cleanup_ddata_cache(void);
......@@ -411,7 +409,7 @@ int presto_set_fsetroot(struct dentry *dentry, char *fsetname,
unsigned int flags);
int presto_set_fsetroot_from_ioc(struct dentry *dentry, char *fsetname,
unsigned int flags);
inline int presto_is_read_only(struct presto_file_set *);
int presto_is_read_only(struct presto_file_set *);
int presto_truncate_lml(struct presto_file_set *fset);
int lento_write_lml(char *path,
__u64 remote_ino,
......@@ -419,13 +417,13 @@ int lento_write_lml(char *path,
__u32 remote_version,
struct presto_version *remote_file_version);
int lento_complete_closes(char *path);
inline int presto_f2m(struct presto_file_set *fset);
int presto_f2m(struct presto_file_set *fset);
int presto_prep(struct dentry *, struct presto_cache **,
struct presto_file_set **);
/* cache.c */
extern struct presto_cache *presto_cache_init(void);
extern inline void presto_cache_add(struct presto_cache *cache);
extern inline void presto_cache_init_hash(void);
extern void presto_cache_add(struct presto_cache *cache);
extern void presto_cache_init_hash(void);
struct presto_cache *presto_cache_find(struct super_block *sb);
......@@ -552,7 +550,7 @@ int lento_iopen(const char *name, ino_t ino, unsigned int generation,int flags);
#define JOURNAL_PAGE_SZ PAGE_SIZE
__inline__ int presto_no_journal(struct presto_file_set *fset);
int presto_no_journal(struct presto_file_set *fset);
int journal_fetch(int minor);
int presto_log(struct presto_file_set *fset, struct rec_info *rec,
const char *buf, size_t size,
......@@ -657,6 +655,8 @@ loff_t izo_rcvd_write(struct presto_file_set *, struct izo_rcvd_rec *);
loff_t izo_rcvd_upd_remote(struct presto_file_set *fset, char * uuid, __u64 remote_recno,
__u64 remote_offset);
int izo_ioctl_packlen(struct izo_ioctl_data *data);
/* sysctl.c */
int init_intermezzo_sysctl(void);
void cleanup_intermezzo_sysctl(void);
......@@ -714,6 +714,54 @@ static inline char *strdup(char *str)
return tmp;
}
static inline int izo_ioctl_is_invalid(struct izo_ioctl_data *data)
{
if (data->ioc_len > (1<<30)) {
CERROR("IZO ioctl: ioc_len larger than 1<<30\n");
return 1;
}
if (data->ioc_inllen1 > (1<<30)) {
CERROR("IZO ioctl: ioc_inllen1 larger than 1<<30\n");
return 1;
}
if (data->ioc_inllen2 > (1<<30)) {
CERROR("IZO ioctl: ioc_inllen2 larger than 1<<30\n");
return 1;
}
if (data->ioc_inlbuf1 && !data->ioc_inllen1) {
CERROR("IZO ioctl: inlbuf1 pointer but 0 length\n");
return 1;
}
if (data->ioc_inlbuf2 && !data->ioc_inllen2) {
CERROR("IZO ioctl: inlbuf2 pointer but 0 length\n");
return 1;
}
if (data->ioc_pbuf1 && !data->ioc_plen1) {
CERROR("IZO ioctl: pbuf1 pointer but 0 length\n");
return 1;
}
if (data->ioc_pbuf2 && !data->ioc_plen2) {
CERROR("IZO ioctl: pbuf2 pointer but 0 length\n");
return 1;
}
if (izo_ioctl_packlen(data) != data->ioc_len ) {
CERROR("IZO ioctl: packlen exceeds ioc_len\n");
return 1;
}
if (data->ioc_inllen1 &&
data->ioc_bulk[data->ioc_inllen1 - 1] != '\0') {
CERROR("IZO ioctl: inlbuf1 not 0 terminated\n");
return 1;
}
if (data->ioc_inllen2 &&
data->ioc_bulk[size_round(data->ioc_inllen1) + data->ioc_inllen2
- 1] != '\0') {
CERROR("IZO ioctl: inlbuf2 not 0 terminated\n");
return 1;
}
return 0;
}
/* buffer MUST be at least the size of izo_ioctl_hdr */
static inline int izo_ioctl_getdata(char *buf, char *end, void *arg)
{
......@@ -797,8 +845,6 @@ int kml_fsreint(struct kml_rec *rec, char *basedir);
int kml_iocreint(__u32 size, char *ptr, __u32 offset, int dird,
uuid_t uuid, __u32 generate_kml);
static inline int izo_ioctl_packlen(struct izo_ioctl_data *data);
static inline void izo_ioctl_init(struct izo_ioctl_data *data)
{
memset(data, 0, sizeof(*data));
......@@ -860,62 +906,6 @@ static inline char *izo_error(int err)
return "Unknown InterMezzo error";
}
static inline int izo_ioctl_packlen(struct izo_ioctl_data *data)
{
int len = sizeof(struct izo_ioctl_data);
len += size_round(data->ioc_inllen1);
len += size_round(data->ioc_inllen2);
return len;
}
static inline int izo_ioctl_is_invalid(struct izo_ioctl_data *data)
{
if (data->ioc_len > (1<<30)) {
CERROR("IZO ioctl: ioc_len larger than 1<<30\n");
return 1;
}
if (data->ioc_inllen1 > (1<<30)) {
CERROR("IZO ioctl: ioc_inllen1 larger than 1<<30\n");
return 1;
}
if (data->ioc_inllen2 > (1<<30)) {
CERROR("IZO ioctl: ioc_inllen2 larger than 1<<30\n");
return 1;
}
if (data->ioc_inlbuf1 && !data->ioc_inllen1) {
CERROR("IZO ioctl: inlbuf1 pointer but 0 length\n");
return 1;
}
if (data->ioc_inlbuf2 && !data->ioc_inllen2) {
CERROR("IZO ioctl: inlbuf2 pointer but 0 length\n");
return 1;
}
if (data->ioc_pbuf1 && !data->ioc_plen1) {
CERROR("IZO ioctl: pbuf1 pointer but 0 length\n");
return 1;
}
if (data->ioc_pbuf2 && !data->ioc_plen2) {
CERROR("IZO ioctl: pbuf2 pointer but 0 length\n");
return 1;
}
if (izo_ioctl_packlen(data) != data->ioc_len ) {
CERROR("IZO ioctl: packlen exceeds ioc_len\n");
return 1;
}
if (data->ioc_inllen1 &&
data->ioc_bulk[data->ioc_inllen1 - 1] != '\0') {
CERROR("IZO ioctl: inlbuf1 not 0 terminated\n");
return 1;
}
if (data->ioc_inllen2 &&
data->ioc_bulk[size_round(data->ioc_inllen1) + data->ioc_inllen2
- 1] != '\0') {
CERROR("IZO ioctl: inlbuf2 not 0 terminated\n");
return 1;
}
return 0;
}
/* kml_unpack.c */
char *kml_print_rec(struct kml_rec *rec, int brief);
int kml_unpack(struct kml_rec *rec, char **buf, char *end);
......
......@@ -338,8 +338,8 @@ int izo_mark_cache(struct dentry *dentry, int and_flag, int or_flag,
return -EBADF;
}
((int)cache->cache_flags) &= and_flag;
((int)cache->cache_flags) |= or_flag;
cache->cache_flags &= and_flag;
cache->cache_flags |= or_flag;
if (res)
*res = (int)cache->cache_flags;
......@@ -377,8 +377,8 @@ int izo_mark_fset(struct dentry *dentry, int and_flag, int or_flag,
make_bad_inode(dentry->d_inode);
return -EBADF;
}
((int)fset->fset_flags) &= and_flag;
((int)fset->fset_flags) |= or_flag;
fset->fset_flags &= and_flag;
fset->fset_flags |= or_flag;
if (res)
*res = (int)fset->fset_flags;
......
......@@ -286,6 +286,8 @@ int /* __init */ init_intermezzo_sysctl(void)
* happens once per reboot.
*/
for(i = 0; i < total_dev; i++) {
void *p;
/* entry for this /proc/sys/intermezzo/intermezzo"i" */
ctl_table *psdev = &presto_table[i + PRESTO_PRIMARY_CTLCNT];
/* entries for the individual "files" in this "directory" */
......@@ -298,7 +300,8 @@ int /* __init */ init_intermezzo_sysctl(void)
/* the psdev has to point to psdev_entries, and fix the number */
psdev->ctl_name = psdev->ctl_name + i + 1; /* sorry */
PRESTO_ALLOC((void*)psdev->procname, PROCNAME_SIZE);
PRESTO_ALLOC(p, PROCNAME_SIZE);
psdev->procname = p;
if (!psdev->procname) {
PRESTO_FREE(dev_ctl_table,
sizeof(ctl_table) * total_entries);
......
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