@@ -236,7 +236,9 @@ static int parse_fsopt_token(char *c, void *private)
236236 fsopt -> wsize = intval ;
237237 break ;
238238 case Opt_rsize :
239- fsopt -> rsize = intval ;
239+ if (intval < PAGE_SIZE || intval > CEPH_MAX_READ_SIZE )
240+ return - EINVAL ;
241+ fsopt -> rsize = ALIGN (intval , PAGE_SIZE );
240242 break ;
241243 case Opt_rasize :
242244 fsopt -> rasize = intval ;
@@ -390,7 +392,7 @@ static int parse_mount_options(struct ceph_mount_options **pfsopt,
390392 fsopt -> sb_flags = flags ;
391393 fsopt -> flags = CEPH_MOUNT_OPT_DEFAULT ;
392394
393- fsopt -> rsize = CEPH_RSIZE_DEFAULT ;
395+ fsopt -> rsize = CEPH_MAX_READ_SIZE ;
394396 fsopt -> rasize = CEPH_RASIZE_DEFAULT ;
395397 fsopt -> snapdir_name = kstrdup (CEPH_SNAPDIRNAME_DEFAULT , GFP_KERNEL );
396398 if (!fsopt -> snapdir_name ) {
@@ -505,7 +507,7 @@ static int ceph_show_options(struct seq_file *m, struct dentry *root)
505507 seq_printf (m , ",mds_namespace=%s" , fsopt -> mds_namespace );
506508 if (fsopt -> wsize )
507509 seq_printf (m , ",wsize=%d" , fsopt -> wsize );
508- if (fsopt -> rsize != CEPH_RSIZE_DEFAULT )
510+ if (fsopt -> rsize != CEPH_MAX_READ_SIZE )
509511 seq_printf (m , ",rsize=%d" , fsopt -> rsize );
510512 if (fsopt -> rasize != CEPH_RASIZE_DEFAULT )
511513 seq_printf (m , ",rasize=%d" , fsopt -> rasize );
@@ -948,13 +950,8 @@ static int ceph_setup_bdi(struct super_block *sb, struct ceph_fs_client *fsc)
948950 else
949951 sb -> s_bdi -> ra_pages = VM_MAX_READAHEAD * 1024 / PAGE_SIZE ;
950952
951- if (fsc -> mount_options -> rsize > fsc -> mount_options -> rasize &&
952- fsc -> mount_options -> rsize >= PAGE_SIZE )
953- sb -> s_bdi -> io_pages =
954- (fsc -> mount_options -> rsize + PAGE_SIZE - 1 )
955- >> PAGE_SHIFT ;
956- else if (fsc -> mount_options -> rsize == 0 )
957- sb -> s_bdi -> io_pages = ULONG_MAX ;
953+ /* set io_pages based on max osd read size */
954+ sb -> s_bdi -> io_pages = fsc -> mount_options -> rsize >> PAGE_SHIFT ;
958955
959956 return 0 ;
960957}
0 commit comments