aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ceph/super.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ceph/super.c')
-rw-r--r--fs/ceph/super.c90
1 files changed, 59 insertions, 31 deletions
diff --git a/fs/ceph/super.c b/fs/ceph/super.c
index b3225bf63f58..34b16cb302fe 100644
--- a/fs/ceph/super.c
+++ b/fs/ceph/super.c
@@ -110,6 +110,34 @@ static int ceph_syncfs(struct super_block *sb, int wait)
110 return 0; 110 return 0;
111} 111}
112 112
113static int default_congestion_kb(void)
114{
115 int congestion_kb;
116
117 /*
118 * Copied from NFS
119 *
120 * congestion size, scale with available memory.
121 *
122 * 64MB: 8192k
123 * 128MB: 11585k
124 * 256MB: 16384k
125 * 512MB: 23170k
126 * 1GB: 32768k
127 * 2GB: 46340k
128 * 4GB: 65536k
129 * 8GB: 92681k
130 * 16GB: 131072k
131 *
132 * This allows larger machines to have larger/more transfers.
133 * Limit the default to 256M
134 */
135 congestion_kb = (16*int_sqrt(totalram_pages)) << (PAGE_SHIFT-10);
136 if (congestion_kb > 256*1024)
137 congestion_kb = 256*1024;
138
139 return congestion_kb;
140}
113 141
114/** 142/**
115 * ceph_show_options - Show mount options in /proc/mounts 143 * ceph_show_options - Show mount options in /proc/mounts
@@ -135,6 +163,33 @@ static int ceph_show_options(struct seq_file *m, struct vfsmount *mnt)
135 seq_puts(m, ",nocrc"); 163 seq_puts(m, ",nocrc");
136 if (args->flags & CEPH_OPT_NOASYNCREADDIR) 164 if (args->flags & CEPH_OPT_NOASYNCREADDIR)
137 seq_puts(m, ",noasyncreaddir"); 165 seq_puts(m, ",noasyncreaddir");
166
167 if (args->mount_timeout != CEPH_MOUNT_TIMEOUT_DEFAULT)
168 seq_printf(m, ",mount_timeout=%d", args->mount_timeout);
169 if (args->osd_idle_ttl != CEPH_OSD_IDLE_TTL_DEFAULT)
170 seq_printf(m, ",osd_idle_ttl=%d", args->osd_idle_ttl);
171 if (args->osd_timeout != CEPH_OSD_TIMEOUT_DEFAULT)
172 seq_printf(m, ",osdtimeout=%d", args->osd_timeout);
173 if (args->osd_keepalive_timeout != CEPH_OSD_KEEPALIVE_DEFAULT)
174 seq_printf(m, ",osdkeepalivetimeout=%d",
175 args->osd_keepalive_timeout);
176 if (args->wsize)
177 seq_printf(m, ",wsize=%d", args->wsize);
178 if (args->rsize != CEPH_MOUNT_RSIZE_DEFAULT)
179 seq_printf(m, ",rsize=%d", args->rsize);
180 if (args->congestion_kb != default_congestion_kb())
181 seq_printf(m, ",write_congestion_kb=%d", args->congestion_kb);
182 if (args->caps_wanted_delay_min != CEPH_CAPS_WANTED_DELAY_MIN_DEFAULT)
183 seq_printf(m, ",caps_wanted_delay_min=%d",
184 args->caps_wanted_delay_min);
185 if (args->caps_wanted_delay_max != CEPH_CAPS_WANTED_DELAY_MAX_DEFAULT)
186 seq_printf(m, ",caps_wanted_delay_max=%d",
187 args->caps_wanted_delay_max);
188 if (args->cap_release_safety != CEPH_CAP_RELEASE_SAFETY_DEFAULT)
189 seq_printf(m, ",cap_release_safety=%d",
190 args->cap_release_safety);
191 if (args->max_readdir != CEPH_MAX_READDIR_DEFAULT)
192 seq_printf(m, ",readdir_max_entries=%d", args->max_readdir);
138 if (strcmp(args->snapdir_name, CEPH_SNAPDIRNAME_DEFAULT)) 193 if (strcmp(args->snapdir_name, CEPH_SNAPDIRNAME_DEFAULT))
139 seq_printf(m, ",snapdirname=%s", args->snapdir_name); 194 seq_printf(m, ",snapdirname=%s", args->snapdir_name);
140 if (args->name) 195 if (args->name)
@@ -158,35 +213,6 @@ static void ceph_inode_init_once(void *foo)
158 inode_init_once(&ci->vfs_inode); 213 inode_init_once(&ci->vfs_inode);
159} 214}
160 215
161static int default_congestion_kb(void)
162{
163 int congestion_kb;
164
165 /*
166 * Copied from NFS
167 *
168 * congestion size, scale with available memory.
169 *
170 * 64MB: 8192k
171 * 128MB: 11585k
172 * 256MB: 16384k
173 * 512MB: 23170k
174 * 1GB: 32768k
175 * 2GB: 46340k
176 * 4GB: 65536k
177 * 8GB: 92681k
178 * 16GB: 131072k
179 *
180 * This allows larger machines to have larger/more transfers.
181 * Limit the default to 256M
182 */
183 congestion_kb = (16*int_sqrt(totalram_pages)) << (PAGE_SHIFT-10);
184 if (congestion_kb > 256*1024)
185 congestion_kb = 256*1024;
186
187 return congestion_kb;
188}
189
190static int __init init_caches(void) 216static int __init init_caches(void)
191{ 217{
192 ceph_inode_cachep = kmem_cache_create("ceph_inode_info", 218 ceph_inode_cachep = kmem_cache_create("ceph_inode_info",
@@ -305,6 +331,7 @@ enum {
305 Opt_osd_idle_ttl, 331 Opt_osd_idle_ttl,
306 Opt_caps_wanted_delay_min, 332 Opt_caps_wanted_delay_min,
307 Opt_caps_wanted_delay_max, 333 Opt_caps_wanted_delay_max,
334 Opt_cap_release_safety,
308 Opt_readdir_max_entries, 335 Opt_readdir_max_entries,
309 Opt_congestion_kb, 336 Opt_congestion_kb,
310 Opt_last_int, 337 Opt_last_int,
@@ -336,6 +363,7 @@ static match_table_t arg_tokens = {
336 {Opt_osd_idle_ttl, "osd_idle_ttl=%d"}, 363 {Opt_osd_idle_ttl, "osd_idle_ttl=%d"},
337 {Opt_caps_wanted_delay_min, "caps_wanted_delay_min=%d"}, 364 {Opt_caps_wanted_delay_min, "caps_wanted_delay_min=%d"},
338 {Opt_caps_wanted_delay_max, "caps_wanted_delay_max=%d"}, 365 {Opt_caps_wanted_delay_max, "caps_wanted_delay_max=%d"},
366 {Opt_cap_release_safety, "cap_release_safety=%d"},
339 {Opt_readdir_max_entries, "readdir_max_entries=%d"}, 367 {Opt_readdir_max_entries, "readdir_max_entries=%d"},
340 {Opt_congestion_kb, "write_congestion_kb=%d"}, 368 {Opt_congestion_kb, "write_congestion_kb=%d"},
341 /* int args above */ 369 /* int args above */
@@ -385,8 +413,8 @@ static struct ceph_mount_args *parse_mount_args(int flags, char *options,
385 args->caps_wanted_delay_max = CEPH_CAPS_WANTED_DELAY_MAX_DEFAULT; 413 args->caps_wanted_delay_max = CEPH_CAPS_WANTED_DELAY_MAX_DEFAULT;
386 args->rsize = CEPH_MOUNT_RSIZE_DEFAULT; 414 args->rsize = CEPH_MOUNT_RSIZE_DEFAULT;
387 args->snapdir_name = kstrdup(CEPH_SNAPDIRNAME_DEFAULT, GFP_KERNEL); 415 args->snapdir_name = kstrdup(CEPH_SNAPDIRNAME_DEFAULT, GFP_KERNEL);
388 args->cap_release_safety = CEPH_CAPS_PER_RELEASE * 4; 416 args->cap_release_safety = CEPH_CAP_RELEASE_SAFETY_DEFAULT;
389 args->max_readdir = 1024; 417 args->max_readdir = CEPH_MAX_READDIR_DEFAULT;
390 args->congestion_kb = default_congestion_kb(); 418 args->congestion_kb = default_congestion_kb();
391 419
392 /* ip1[:port1][,ip2[:port2]...]:/subdir/in/fs */ 420 /* ip1[:port1][,ip2[:port2]...]:/subdir/in/fs */