tree: git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master head: 8808b950581f71e3ee4cf8e6cae479f4c7106405 commit: 9124f108dc2932189175050e4c29902750b4103b [348/452] BEFS: logging cleanup config: x86_64-allyesdebian (attached as .config) All warnings: fs/befs/btree.c: In function 'befs_btree_find': >> fs/befs/btree.c:267:7: warning: format '%u' expects argument of type 'unsigned int', but argument 3 has type 'long unsigned int' [-Wformat=] "bytes of memory", sizeof (befs_btree_node)); ^ fs/befs/btree.c: In function 'befs_btree_read': >> fs/befs/btree.c:441:7: warning: format '%u' expects argument of type 'unsigned int', but argument 3 has type 'long unsigned int' [-Wformat=] "bytes of memory", sizeof (befs_btree_node)); ^ >> fs/befs/btree.c:502:7: warning: format '%u' expects argument of type 'unsigned int', but argument 4 has type 'size_t' [-Wformat=] "for key of size %d", __func__, bufsize, keylen); ^ vim +267 fs/befs/btree.c ^1da177e Linus Torvalds 2005-04-16 261 } ^1da177e Linus Torvalds 2005-04-16 262 5cbded58 Robert P. J. Day 2006-12-13 263 this_node = kmalloc(sizeof (befs_btree_node), ^1da177e Linus Torvalds 2005-04-16 264 GFP_NOFS); ^1da177e Linus Torvalds 2005-04-16 265 if (!this_node) { ^1da177e Linus Torvalds 2005-04-16 266 befs_error(sb, "befs_btree_find() failed to allocate %u " ^1da177e Linus Torvalds 2005-04-16 @267 "bytes of memory", sizeof (befs_btree_node)); ^1da177e Linus Torvalds 2005-04-16 268 goto error; ^1da177e Linus Torvalds 2005-04-16 269 } ^1da177e Linus Torvalds 2005-04-16 270 ^1da177e Linus Torvalds 2005-04-16 271 this_node->bh = NULL; ^1da177e Linus Torvalds 2005-04-16 272 ^1da177e Linus Torvalds 2005-04-16 273 /* read in root node */ ^1da177e Linus Torvalds 2005-04-16 274 node_off = bt_super.root_node_ptr; ^1da177e Linus Torvalds 2005-04-16 275 if (befs_bt_read_node(sb, ds, this_node, node_off) != BEFS_OK) { ^1da177e Linus Torvalds 2005-04-16 276 befs_error(sb, "befs_btree_find() failed to read " 9124f108 Fabian Frederick 2014-03-17 277 "node at %llu", node_off); ^1da177e Linus Torvalds 2005-04-16 278 goto error_alloc; ^1da177e Linus Torvalds 2005-04-16 279 } ^1da177e Linus Torvalds 2005-04-16 280 ^1da177e Linus Torvalds 2005-04-16 281 while (!befs_leafnode(this_node)) { ^1da177e Linus Torvalds 2005-04-16 282 res = befs_find_key(sb, this_node, key, &node_off); ^1da177e Linus Torvalds 2005-04-16 283 if (res == BEFS_BT_NOT_FOUND) ^1da177e Linus Torvalds 2005-04-16 284 node_off = this_node->head.overflow; ^1da177e Linus Torvalds 2005-04-16 285 /* if no match, go to overflow node */ ^1da177e Linus Torvalds 2005-04-16 286 if (befs_bt_read_node(sb, ds, this_node, node_off) != BEFS_OK) { ^1da177e Linus Torvalds 2005-04-16 287 befs_error(sb, "befs_btree_find() failed to read " 9124f108 Fabian Frederick 2014-03-17 288 "node at %llu", node_off); ^1da177e Linus Torvalds 2005-04-16 289 goto error_alloc; ^1da177e Linus Torvalds 2005-04-16 290 } ^1da177e Linus Torvalds 2005-04-16 291 } ^1da177e Linus Torvalds 2005-04-16 292 ^1da177e Linus Torvalds 2005-04-16 293 /* at the correct leaf node now */ ^1da177e Linus Torvalds 2005-04-16 294 ^1da177e Linus Torvalds 2005-04-16 295 res = befs_find_key(sb, this_node, key, value); ^1da177e Linus Torvalds 2005-04-16 296 ^1da177e Linus Torvalds 2005-04-16 297 brelse(this_node->bh); ^1da177e Linus Torvalds 2005-04-16 298 kfree(this_node); ^1da177e Linus Torvalds 2005-04-16 299 ^1da177e Linus Torvalds 2005-04-16 300 if (res != BEFS_BT_MATCH) { 9124f108 Fabian Frederick 2014-03-17 301 befs_debug(sb, "<--- %s Key %s not found", __func__, key); ^1da177e Linus Torvalds 2005-04-16 302 *value = 0; ^1da177e Linus Torvalds 2005-04-16 303 return BEFS_BT_NOT_FOUND; ^1da177e Linus Torvalds 2005-04-16 304 } 9124f108 Fabian Frederick 2014-03-17 305 befs_debug(sb, "<--- %s Found key %s, value %llu", __func__, ^1da177e Linus Torvalds 2005-04-16 306 key, *value); ^1da177e Linus Torvalds 2005-04-16 307 return BEFS_OK; ^1da177e Linus Torvalds 2005-04-16 308 ^1da177e Linus Torvalds 2005-04-16 309 error_alloc: ^1da177e Linus Torvalds 2005-04-16 310 kfree(this_node); ^1da177e Linus Torvalds 2005-04-16 311 error: ^1da177e Linus Torvalds 2005-04-16 312 *value = 0; 9124f108 Fabian Frederick 2014-03-17 313 befs_debug(sb, "<--- %s ERROR", __func__); ^1da177e Linus Torvalds 2005-04-16 314 return BEFS_ERR; ^1da177e Linus Torvalds 2005-04-16 315 } ^1da177e Linus Torvalds 2005-04-16 316 ^1da177e Linus Torvalds 2005-04-16 317 /** ^1da177e Linus Torvalds 2005-04-16 318 * befs_find_key - Search for a key within a node ^1da177e Linus Torvalds 2005-04-16 319 * @sb: Filesystem superblock ^1da177e Linus Torvalds 2005-04-16 320 * @node: Node to find the key within ^1da177e Linus Torvalds 2005-04-16 321 * @key: Keystring to search for ^1da177e Linus Torvalds 2005-04-16 322 * @value: If key is found, the value stored with the key is put here ^1da177e Linus Torvalds 2005-04-16 323 * ^1da177e Linus Torvalds 2005-04-16 324 * finds exact match if one exists, and returns BEFS_BT_MATCH ^1da177e Linus Torvalds 2005-04-16 325 * If no exact match, finds first key in node that is greater ^1da177e Linus Torvalds 2005-04-16 326 * (alphabetically) than the search key and returns BEFS_BT_PARMATCH ^1da177e Linus Torvalds 2005-04-16 327 * (for partial match, I guess). Can you think of something better to ^1da177e Linus Torvalds 2005-04-16 328 * call it? ^1da177e Linus Torvalds 2005-04-16 329 * ^1da177e Linus Torvalds 2005-04-16 330 * If no key was a match or greater than the search key, return ^1da177e Linus Torvalds 2005-04-16 331 * BEFS_BT_NOT_FOUND. ^1da177e Linus Torvalds 2005-04-16 332 * ^1da177e Linus Torvalds 2005-04-16 333 * Use binary search instead of a linear. ^1da177e Linus Torvalds 2005-04-16 334 */ ^1da177e Linus Torvalds 2005-04-16 335 static int ^1da177e Linus Torvalds 2005-04-16 336 befs_find_key(struct super_block *sb, befs_btree_node * node, ^1da177e Linus Torvalds 2005-04-16 337 const char *findkey, befs_off_t * value) ^1da177e Linus Torvalds 2005-04-16 338 { ^1da177e Linus Torvalds 2005-04-16 339 int first, last, mid; ^1da177e Linus Torvalds 2005-04-16 340 int eq; ^1da177e Linus Torvalds 2005-04-16 341 u16 keylen; ^1da177e Linus Torvalds 2005-04-16 342 int findkey_len; ^1da177e Linus Torvalds 2005-04-16 343 char *thiskey; a9721f31 Al Viro 2005-12-24 344 fs64 *valarray; ^1da177e Linus Torvalds 2005-04-16 345 9124f108 Fabian Frederick 2014-03-17 346 befs_debug(sb, "---> %s %s", __func__, findkey); ^1da177e Linus Torvalds 2005-04-16 347 ^1da177e Linus Torvalds 2005-04-16 348 *value = 0; ^1da177e Linus Torvalds 2005-04-16 349 ^1da177e Linus Torvalds 2005-04-16 350 findkey_len = strlen(findkey); ^1da177e Linus Torvalds 2005-04-16 351 ^1da177e Linus Torvalds 2005-04-16 352 /* if node can not contain key, just skeep this node */ ^1da177e Linus Torvalds 2005-04-16 353 last = node->head.all_key_count - 1; ^1da177e Linus Torvalds 2005-04-16 354 thiskey = befs_bt_get_key(sb, node, last, &keylen); ^1da177e Linus Torvalds 2005-04-16 355 ^1da177e Linus Torvalds 2005-04-16 356 eq = befs_compare_strings(thiskey, keylen, findkey, findkey_len); ^1da177e Linus Torvalds 2005-04-16 357 if (eq < 0) { 9124f108 Fabian Frederick 2014-03-17 358 befs_debug(sb, "<--- %s %s not found", __func__, findkey); ^1da177e Linus Torvalds 2005-04-16 359 return BEFS_BT_NOT_FOUND; ^1da177e Linus Torvalds 2005-04-16 360 } ^1da177e Linus Torvalds 2005-04-16 361 ^1da177e Linus Torvalds 2005-04-16 362 valarray = befs_bt_valarray(node); ^1da177e Linus Torvalds 2005-04-16 363 ^1da177e Linus Torvalds 2005-04-16 364 /* simple binary search */ ^1da177e Linus Torvalds 2005-04-16 365 first = 0; ^1da177e Linus Torvalds 2005-04-16 366 mid = 0; ^1da177e Linus Torvalds 2005-04-16 367 while (last >= first) { ^1da177e Linus Torvalds 2005-04-16 368 mid = (last + first) / 2; ^1da177e Linus Torvalds 2005-04-16 369 befs_debug(sb, "first: %d, last: %d, mid: %d", first, last, ^1da177e Linus Torvalds 2005-04-16 370 mid); ^1da177e Linus Torvalds 2005-04-16 371 thiskey = befs_bt_get_key(sb, node, mid, &keylen); ^1da177e Linus Torvalds 2005-04-16 372 eq = befs_compare_strings(thiskey, keylen, findkey, ^1da177e Linus Torvalds 2005-04-16 373 findkey_len); ^1da177e Linus Torvalds 2005-04-16 374 ^1da177e Linus Torvalds 2005-04-16 375 if (eq == 0) { 9124f108 Fabian Frederick 2014-03-17 376 befs_debug(sb, "<--- %s found %s at %d", 9124f108 Fabian Frederick 2014-03-17 377 __func__, thiskey, mid); ^1da177e Linus Torvalds 2005-04-16 378 ^1da177e Linus Torvalds 2005-04-16 379 *value = fs64_to_cpu(sb, valarray[mid]); ^1da177e Linus Torvalds 2005-04-16 380 return BEFS_BT_MATCH; ^1da177e Linus Torvalds 2005-04-16 381 } ^1da177e Linus Torvalds 2005-04-16 382 if (eq > 0) ^1da177e Linus Torvalds 2005-04-16 383 last = mid - 1; ^1da177e Linus Torvalds 2005-04-16 384 else ^1da177e Linus Torvalds 2005-04-16 385 first = mid + 1; ^1da177e Linus Torvalds 2005-04-16 386 } ^1da177e Linus Torvalds 2005-04-16 387 if (eq < 0) ^1da177e Linus Torvalds 2005-04-16 388 *value = fs64_to_cpu(sb, valarray[mid + 1]); ^1da177e Linus Torvalds 2005-04-16 389 else ^1da177e Linus Torvalds 2005-04-16 390 *value = fs64_to_cpu(sb, valarray[mid]); 9124f108 Fabian Frederick 2014-03-17 391 befs_debug(sb, "<--- %s found %s at %d", __func__, thiskey, mid); ^1da177e Linus Torvalds 2005-04-16 392 return BEFS_BT_PARMATCH; ^1da177e Linus Torvalds 2005-04-16 393 } ^1da177e Linus Torvalds 2005-04-16 394 ^1da177e Linus Torvalds 2005-04-16 395 /** ^1da177e Linus Torvalds 2005-04-16 396 * befs_btree_read - Traverse leafnodes of a btree ^1da177e Linus Torvalds 2005-04-16 397 * @sb: Filesystem superblock ^1da177e Linus Torvalds 2005-04-16 398 * @ds: Datastream containing btree ^1da177e Linus Torvalds 2005-04-16 399 * @key_no: Key number (alphabetical order) of key to read ^1da177e Linus Torvalds 2005-04-16 400 * @bufsize: Size of the buffer to return key in ^1da177e Linus Torvalds 2005-04-16 401 * @keybuf: Pointer to a buffer to put the key in ^1da177e Linus Torvalds 2005-04-16 402 * @keysize: Length of the returned key ^1da177e Linus Torvalds 2005-04-16 403 * @value: Value stored with the returned key ^1da177e Linus Torvalds 2005-04-16 404 * ^1da177e Linus Torvalds 2005-04-16 405 * Heres how it works: Key_no is the index of the key/value pair to ^1da177e Linus Torvalds 2005-04-16 406 * return in keybuf/value. ^1da177e Linus Torvalds 2005-04-16 407 * Bufsize is the size of keybuf (BEFS_NAME_LEN+1 is a good size). Keysize is ^1da177e Linus Torvalds 2005-04-16 408 * the number of charecters in the key (just a convenience). ^1da177e Linus Torvalds 2005-04-16 409 * ^1da177e Linus Torvalds 2005-04-16 410 * Algorithm: ^1da177e Linus Torvalds 2005-04-16 411 * Get the first leafnode of the tree. See if the requested key is in that ^1da177e Linus Torvalds 2005-04-16 412 * node. If not, follow the node->right link to the next leafnode. Repeat ^1da177e Linus Torvalds 2005-04-16 413 * until the (key_no)th key is found or the tree is out of keys. ^1da177e Linus Torvalds 2005-04-16 414 */ ^1da177e Linus Torvalds 2005-04-16 415 int ^1da177e Linus Torvalds 2005-04-16 416 befs_btree_read(struct super_block *sb, befs_data_stream * ds, ^1da177e Linus Torvalds 2005-04-16 417 loff_t key_no, size_t bufsize, char *keybuf, size_t * keysize, ^1da177e Linus Torvalds 2005-04-16 418 befs_off_t * value) ^1da177e Linus Torvalds 2005-04-16 419 { ^1da177e Linus Torvalds 2005-04-16 420 befs_btree_node *this_node; ^1da177e Linus Torvalds 2005-04-16 421 befs_btree_super bt_super; ^1da177e Linus Torvalds 2005-04-16 422 befs_off_t node_off = 0; ^1da177e Linus Torvalds 2005-04-16 423 int cur_key; a9721f31 Al Viro 2005-12-24 424 fs64 *valarray; ^1da177e Linus Torvalds 2005-04-16 425 char *keystart; ^1da177e Linus Torvalds 2005-04-16 426 u16 keylen; ^1da177e Linus Torvalds 2005-04-16 427 int res; ^1da177e Linus Torvalds 2005-04-16 428 ^1da177e Linus Torvalds 2005-04-16 429 uint key_sum = 0; ^1da177e Linus Torvalds 2005-04-16 430 9124f108 Fabian Frederick 2014-03-17 431 befs_debug(sb, "---> %s", __func__); ^1da177e Linus Torvalds 2005-04-16 432 ^1da177e Linus Torvalds 2005-04-16 433 if (befs_bt_read_super(sb, ds, &bt_super) != BEFS_OK) { ^1da177e Linus Torvalds 2005-04-16 434 befs_error(sb, ^1da177e Linus Torvalds 2005-04-16 435 "befs_btree_read() failed to read index superblock"); ^1da177e Linus Torvalds 2005-04-16 436 goto error; ^1da177e Linus Torvalds 2005-04-16 437 } ^1da177e Linus Torvalds 2005-04-16 438 ee68a3c6 Zhang Yanfei 2013-03-12 439 if ((this_node = kmalloc(sizeof (befs_btree_node), GFP_NOFS)) == NULL) { ^1da177e Linus Torvalds 2005-04-16 440 befs_error(sb, "befs_btree_read() failed to allocate %u " ^1da177e Linus Torvalds 2005-04-16 @441 "bytes of memory", sizeof (befs_btree_node)); ^1da177e Linus Torvalds 2005-04-16 442 goto error; ^1da177e Linus Torvalds 2005-04-16 443 } ^1da177e Linus Torvalds 2005-04-16 444 :::::: The code at line 267 was first introduced by commit :::::: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Linux-2.6.12-rc2 :::::: TO: Linus Torvalds :::::: CC: Linus Torvalds --- 0-DAY kernel build testing backend Open Source Technology Center http://lists.01.org/mailman/listinfo/kbuild Intel Corporation