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) ...@@ -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 */ /* map a device to a cache */
struct presto_cache *presto_cache_find(struct super_block *s) struct presto_cache *presto_cache_find(struct super_block *s)
{ {
......
...@@ -49,8 +49,6 @@ struct lento_vfs_context { ...@@ -49,8 +49,6 @@ struct lento_vfs_context {
struct presto_version remote_version; struct presto_version remote_version;
}; };
static inline int izo_ioctl_is_invalid(struct izo_ioctl_data *data);
#ifdef __KERNEL__ #ifdef __KERNEL__
# include <linux/smp.h> # include <linux/smp.h>
# include <linux/fsfilter.h> # include <linux/fsfilter.h>
...@@ -335,7 +333,7 @@ int izo_psdev_get_free_channel(void); ...@@ -335,7 +333,7 @@ int izo_psdev_get_free_channel(void);
int presto_psdev_init(void); int presto_psdev_init(void);
int izo_psdev_setpid(int minor); int izo_psdev_setpid(int minor);
extern void presto_psdev_cleanup(void); 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); int izo_psdev_setchannel(struct file *file, int fd);
/* inode.c */ /* inode.c */
...@@ -346,7 +344,7 @@ void presto_set_ops(struct inode *inode, struct filter_fs *filter); ...@@ -346,7 +344,7 @@ void presto_set_ops(struct inode *inode, struct filter_fs *filter);
void presto_frob_dop(struct dentry *de); void presto_frob_dop(struct dentry *de);
char *presto_path(struct dentry *dentry, struct dentry *root, char *presto_path(struct dentry *dentry, struct dentry *root,
char *buffer, int buflen); 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_set_dd(struct dentry *);
int presto_init_ddata_cache(void); int presto_init_ddata_cache(void);
void presto_cleanup_ddata_cache(void); void presto_cleanup_ddata_cache(void);
...@@ -411,7 +409,7 @@ int presto_set_fsetroot(struct dentry *dentry, char *fsetname, ...@@ -411,7 +409,7 @@ int presto_set_fsetroot(struct dentry *dentry, char *fsetname,
unsigned int flags); unsigned int flags);
int presto_set_fsetroot_from_ioc(struct dentry *dentry, char *fsetname, int presto_set_fsetroot_from_ioc(struct dentry *dentry, char *fsetname,
unsigned int flags); 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 presto_truncate_lml(struct presto_file_set *fset);
int lento_write_lml(char *path, int lento_write_lml(char *path,
__u64 remote_ino, __u64 remote_ino,
...@@ -419,13 +417,13 @@ int lento_write_lml(char *path, ...@@ -419,13 +417,13 @@ int lento_write_lml(char *path,
__u32 remote_version, __u32 remote_version,
struct presto_version *remote_file_version); struct presto_version *remote_file_version);
int lento_complete_closes(char *path); 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 **, int presto_prep(struct dentry *, struct presto_cache **,
struct presto_file_set **); struct presto_file_set **);
/* cache.c */ /* cache.c */
extern struct presto_cache *presto_cache_init(void); extern struct presto_cache *presto_cache_init(void);
extern inline void presto_cache_add(struct presto_cache *cache); extern void presto_cache_add(struct presto_cache *cache);
extern inline void presto_cache_init_hash(void); extern void presto_cache_init_hash(void);
struct presto_cache *presto_cache_find(struct super_block *sb); 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); ...@@ -552,7 +550,7 @@ int lento_iopen(const char *name, ino_t ino, unsigned int generation,int flags);
#define JOURNAL_PAGE_SZ PAGE_SIZE #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 journal_fetch(int minor);
int presto_log(struct presto_file_set *fset, struct rec_info *rec, int presto_log(struct presto_file_set *fset, struct rec_info *rec,
const char *buf, size_t size, const char *buf, size_t size,
...@@ -657,6 +655,8 @@ loff_t izo_rcvd_write(struct presto_file_set *, struct izo_rcvd_rec *); ...@@ -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, loff_t izo_rcvd_upd_remote(struct presto_file_set *fset, char * uuid, __u64 remote_recno,
__u64 remote_offset); __u64 remote_offset);
int izo_ioctl_packlen(struct izo_ioctl_data *data);
/* sysctl.c */ /* sysctl.c */
int init_intermezzo_sysctl(void); int init_intermezzo_sysctl(void);
void cleanup_intermezzo_sysctl(void); void cleanup_intermezzo_sysctl(void);
...@@ -714,6 +714,54 @@ static inline char *strdup(char *str) ...@@ -714,6 +714,54 @@ static inline char *strdup(char *str)
return tmp; 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 */ /* buffer MUST be at least the size of izo_ioctl_hdr */
static inline int izo_ioctl_getdata(char *buf, char *end, void *arg) 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); ...@@ -797,8 +845,6 @@ int kml_fsreint(struct kml_rec *rec, char *basedir);
int kml_iocreint(__u32 size, char *ptr, __u32 offset, int dird, int kml_iocreint(__u32 size, char *ptr, __u32 offset, int dird,
uuid_t uuid, __u32 generate_kml); 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) static inline void izo_ioctl_init(struct izo_ioctl_data *data)
{ {
memset(data, 0, sizeof(*data)); memset(data, 0, sizeof(*data));
...@@ -860,62 +906,6 @@ static inline char *izo_error(int err) ...@@ -860,62 +906,6 @@ static inline char *izo_error(int err)
return "Unknown InterMezzo error"; 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 */ /* kml_unpack.c */
char *kml_print_rec(struct kml_rec *rec, int brief); char *kml_print_rec(struct kml_rec *rec, int brief);
int kml_unpack(struct kml_rec *rec, char **buf, char *end); 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, ...@@ -338,8 +338,8 @@ int izo_mark_cache(struct dentry *dentry, int and_flag, int or_flag,
return -EBADF; return -EBADF;
} }
((int)cache->cache_flags) &= and_flag; cache->cache_flags &= and_flag;
((int)cache->cache_flags) |= or_flag; cache->cache_flags |= or_flag;
if (res) if (res)
*res = (int)cache->cache_flags; *res = (int)cache->cache_flags;
...@@ -377,8 +377,8 @@ int izo_mark_fset(struct dentry *dentry, int and_flag, int or_flag, ...@@ -377,8 +377,8 @@ int izo_mark_fset(struct dentry *dentry, int and_flag, int or_flag,
make_bad_inode(dentry->d_inode); make_bad_inode(dentry->d_inode);
return -EBADF; return -EBADF;
} }
((int)fset->fset_flags) &= and_flag; fset->fset_flags &= and_flag;
((int)fset->fset_flags) |= or_flag; fset->fset_flags |= or_flag;
if (res) if (res)
*res = (int)fset->fset_flags; *res = (int)fset->fset_flags;
......
...@@ -286,6 +286,8 @@ int /* __init */ init_intermezzo_sysctl(void) ...@@ -286,6 +286,8 @@ int /* __init */ init_intermezzo_sysctl(void)
* happens once per reboot. * happens once per reboot.
*/ */
for(i = 0; i < total_dev; i++) { for(i = 0; i < total_dev; i++) {
void *p;
/* entry for this /proc/sys/intermezzo/intermezzo"i" */ /* entry for this /proc/sys/intermezzo/intermezzo"i" */
ctl_table *psdev = &presto_table[i + PRESTO_PRIMARY_CTLCNT]; ctl_table *psdev = &presto_table[i + PRESTO_PRIMARY_CTLCNT];
/* entries for the individual "files" in this "directory" */ /* entries for the individual "files" in this "directory" */
...@@ -298,7 +300,8 @@ int /* __init */ init_intermezzo_sysctl(void) ...@@ -298,7 +300,8 @@ int /* __init */ init_intermezzo_sysctl(void)
/* the psdev has to point to psdev_entries, and fix the number */ /* the psdev has to point to psdev_entries, and fix the number */
psdev->ctl_name = psdev->ctl_name + i + 1; /* sorry */ 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) { if (!psdev->procname) {
PRESTO_FREE(dev_ctl_table, PRESTO_FREE(dev_ctl_table,
sizeof(ctl_table) * total_entries); 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