#include <linux/namei.h>
+static ssize_t ceph_silly_write(struct file *file, const char __user *data,
+ size_t count, loff_t *offset);
/*
* if err==0, caller is responsible for a put_session on *psession
/*
* ditto
*/
-ssize_t ceph_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos)
+ssize_t ceph_write(struct file *filp, const char __user *buf,
+ size_t len, loff_t *ppos)
{
struct inode *inode = filp->f_dentry->d_inode;
struct ceph_inode_info *ci = ceph_inode(inode);
+ struct ceph_client *client = ceph_inode_to_client(inode);
ssize_t ret;
int got = 0;
goto out;
dout(10, "write got cap refs on %d\n", got);
+ if (client->mount_args.silly_write)
+ ret = ceph_silly_write(filp, buf, len, ppos);
+ else
//if (got & CEPH_CAP_RDCACHE) {
- ret = do_sync_write(filp, buf, len, ppos);
+ ret = do_sync_write(filp, buf, len, ppos);
out:
dout(10, "write dropping cap refs on %d\n", got);
-
/*
* totally naive write. just to get things sort of working.
* ugly hack!
*/
-ssize_t ceph_silly_write(struct file *file, const char __user *data,
- size_t count, loff_t *offset)
+static ssize_t ceph_silly_write(struct file *file, const char __user *data,
+ size_t count, loff_t *offset)
{
struct inode *inode = file->f_dentry->d_inode;
struct ceph_inode_info *ci = ceph_inode(inode);
#include <linux/string.h>
#include <linux/version.h>
-int ceph_debug_super = 50;
+/* debug levels; defined in super.h */
+
+/* global value. 0 = quiet, -1 == use per-file levels */
+int ceph_debug = 0;
-int ceph_lookup_cache = 1;
+/* for this file */
+int ceph_debug_super = 50;
#define DOUT_VAR ceph_debug_super
#define DOUT_PREFIX "super: "
Opt_debug_osdc,
Opt_monport,
Opt_port,
- Opt_ip
+ Opt_ip,
+ Opt_sillywrite,
};
static match_table_t arg_tokens = {
{Opt_debug_osdc, "debug_osdc=%d"},
{Opt_monport, "monport=%d"},
{Opt_port, "port=%d"},
- {Opt_ip, "ip=%s"}
+ {Opt_ip, "ip=%s"},
+ /* int args above, no arguments below */
+ {Opt_sillywrite, "sillywrite"},
};
/*
if (!*c)
continue;
token = match_token(c, arg_tokens, argstr);
+ if (token == 0) {
+ derr(0, "bad mount option at '%s'\n", c);
+ return -EINVAL;
+
+ }
if (token < Opt_ip) {
ret = match_int(&argstr[0], &intval);
if (ret < 0) {
ceph_debug_osdc = intval;
break;
+ /* misc */
+ case Opt_sillywrite:
+ args->silly_write = 1;
+ break;
+
default:
- derr(1, "parse_mount_args bad token %d\n", token);
- continue;
+ BUG_ON(token);
}
}