[linux-next:master 5567/5842] fs/f2fs/sysfs.c:491 __sbi_store() warn: unsigned 't' is never less than zero.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head:   4eee8d0b64ecc3231040fa68ba750317ffca5c52
commit: 38f953da2e3517444394000211c11cc82e67eb13 [5567/5842] f2fs: add gc_urgent_high_remaining sysfs node
config: i386-randconfig-m021-20211207 (https://download.01.org/0day-ci/archive/20211209/202112090853.JdT0VEOq-lkp@xxxxxxxxx/config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@xxxxxxxxx>

smatch warnings:
fs/f2fs/sysfs.c:491 __sbi_store() warn: unsigned 't' is never less than zero.

vim +/t +491 fs/f2fs/sysfs.c

   332	
   333	static ssize_t __sbi_store(struct f2fs_attr *a,
   334				struct f2fs_sb_info *sbi,
   335				const char *buf, size_t count)
   336	{
   337		unsigned char *ptr;
   338		unsigned long t;
   339		unsigned int *ui;
   340		ssize_t ret;
   341	
   342		ptr = __struct_ptr(sbi, a->struct_type);
   343		if (!ptr)
   344			return -EINVAL;
   345	
   346		if (!strcmp(a->attr.name, "extension_list")) {
   347			const char *name = strim((char *)buf);
   348			bool set = true, hot;
   349	
   350			if (!strncmp(name, "[h]", 3))
   351				hot = true;
   352			else if (!strncmp(name, "[c]", 3))
   353				hot = false;
   354			else
   355				return -EINVAL;
   356	
   357			name += 3;
   358	
   359			if (*name == '!') {
   360				name++;
   361				set = false;
   362			}
   363	
   364			if (!strlen(name) || strlen(name) >= F2FS_EXTENSION_LEN)
   365				return -EINVAL;
   366	
   367			down_write(&sbi->sb_lock);
   368	
   369			ret = f2fs_update_extension_list(sbi, name, hot, set);
   370			if (ret)
   371				goto out;
   372	
   373			ret = f2fs_commit_super(sbi, false);
   374			if (ret)
   375				f2fs_update_extension_list(sbi, name, hot, !set);
   376	out:
   377			up_write(&sbi->sb_lock);
   378			return ret ? ret : count;
   379		}
   380	
   381		if (!strcmp(a->attr.name, "ckpt_thread_ioprio")) {
   382			const char *name = strim((char *)buf);
   383			struct ckpt_req_control *cprc = &sbi->cprc_info;
   384			int class;
   385			long data;
   386			int ret;
   387	
   388			if (!strncmp(name, "rt,", 3))
   389				class = IOPRIO_CLASS_RT;
   390			else if (!strncmp(name, "be,", 3))
   391				class = IOPRIO_CLASS_BE;
   392			else
   393				return -EINVAL;
   394	
   395			name += 3;
   396			ret = kstrtol(name, 10, &data);
   397			if (ret)
   398				return ret;
   399			if (data >= IOPRIO_NR_LEVELS || data < 0)
   400				return -EINVAL;
   401	
   402			cprc->ckpt_thread_ioprio = IOPRIO_PRIO_VALUE(class, data);
   403			if (test_opt(sbi, MERGE_CHECKPOINT)) {
   404				ret = set_task_ioprio(cprc->f2fs_issue_ckpt,
   405						cprc->ckpt_thread_ioprio);
   406				if (ret)
   407					return ret;
   408			}
   409	
   410			return count;
   411		}
   412	
   413		ui = (unsigned int *)(ptr + a->offset);
   414	
   415		ret = kstrtoul(skip_spaces(buf), 0, &t);
   416		if (ret < 0)
   417			return ret;
   418	#ifdef CONFIG_F2FS_FAULT_INJECTION
   419		if (a->struct_type == FAULT_INFO_TYPE && t >= (1 << FAULT_MAX))
   420			return -EINVAL;
   421		if (a->struct_type == FAULT_INFO_RATE && t >= UINT_MAX)
   422			return -EINVAL;
   423	#endif
   424		if (a->struct_type == RESERVED_BLOCKS) {
   425			spin_lock(&sbi->stat_lock);
   426			if (t > (unsigned long)(sbi->user_block_count -
   427					F2FS_OPTION(sbi).root_reserved_blocks)) {
   428				spin_unlock(&sbi->stat_lock);
   429				return -EINVAL;
   430			}
   431			*ui = t;
   432			sbi->current_reserved_blocks = min(sbi->reserved_blocks,
   433					sbi->user_block_count - valid_user_blocks(sbi));
   434			spin_unlock(&sbi->stat_lock);
   435			return count;
   436		}
   437	
   438		if (!strcmp(a->attr.name, "discard_granularity")) {
   439			if (t == 0 || t > MAX_PLIST_NUM)
   440				return -EINVAL;
   441			if (!f2fs_block_unit_discard(sbi))
   442				return -EINVAL;
   443			if (t == *ui)
   444				return count;
   445			*ui = t;
   446			return count;
   447		}
   448	
   449		if (!strcmp(a->attr.name, "migration_granularity")) {
   450			if (t == 0 || t > sbi->segs_per_sec)
   451				return -EINVAL;
   452		}
   453	
   454		if (!strcmp(a->attr.name, "trim_sections"))
   455			return -EINVAL;
   456	
   457		if (!strcmp(a->attr.name, "gc_urgent")) {
   458			if (t == 0) {
   459				sbi->gc_mode = GC_NORMAL;
   460			} else if (t == 1) {
   461				sbi->gc_mode = GC_URGENT_HIGH;
   462				if (sbi->gc_thread) {
   463					sbi->gc_thread->gc_wake = 1;
   464					wake_up_interruptible_all(
   465						&sbi->gc_thread->gc_wait_queue_head);
   466					wake_up_discard_thread(sbi, true);
   467				}
   468			} else if (t == 2) {
   469				sbi->gc_mode = GC_URGENT_LOW;
   470			} else {
   471				return -EINVAL;
   472			}
   473			return count;
   474		}
   475		if (!strcmp(a->attr.name, "gc_idle")) {
   476			if (t == GC_IDLE_CB) {
   477				sbi->gc_mode = GC_IDLE_CB;
   478			} else if (t == GC_IDLE_GREEDY) {
   479				sbi->gc_mode = GC_IDLE_GREEDY;
   480			} else if (t == GC_IDLE_AT) {
   481				if (!sbi->am.atgc_enabled)
   482					return -EINVAL;
   483				sbi->gc_mode = GC_AT;
   484			} else {
   485				sbi->gc_mode = GC_NORMAL;
   486			}
   487			return count;
   488		}
   489	
   490		if (!strcmp(a->attr.name, "gc_urgent_high_remaining")) {
 > 491			if (t < 0)
   492				return -EINVAL;
   493	
   494			spin_lock(&sbi->gc_urgent_high_lock);
   495			sbi->gc_urgent_high_limited = t == 0 ? false : true;
   496			sbi->gc_urgent_high_remaining = t;
   497			spin_unlock(&sbi->gc_urgent_high_lock);
   498	
   499			return count;
   500		}
   501	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux