Changeset 17812
- Timestamp:
- 10/25/11 13:45:09 (19 months ago)
- Location:
- src/linux/laguna/linux-3.0
- Files:
-
- 37 edited
-
Makefile (modified) (1 diff)
-
arch/arm/kernel/perf_event_v7.c (modified) (1 diff)
-
arch/arm/mm/init.c (modified) (1 diff)
-
arch/x86/mm/init.c (modified) (1 diff)
-
crypto/ghash-generic.c (modified) (2 diffs)
-
drivers/firewire/sbp2.c (modified) (1 diff)
-
drivers/gpu/drm/radeon/atom.c (modified) (4 diffs)
-
drivers/gpu/drm/radeon/atom.h (modified) (1 diff)
-
drivers/gpu/drm/ttm/ttm_bo.c (modified) (1 diff)
-
drivers/gpu/drm/ttm/ttm_bo_util.c (modified) (2 diffs)
-
drivers/hid/hid-ids.h (modified) (1 diff)
-
drivers/hid/hid-magicmouse.c (modified) (1 diff)
-
drivers/hid/usbhid/hid-quirks.c (modified) (1 diff)
-
drivers/hwmon/w83627ehf.c (modified) (5 diffs)
-
drivers/media/video/uvc/uvc_entity.c (modified) (1 diff)
-
drivers/platform/x86/samsung-laptop.c (modified) (1 diff)
-
fs/cifs/cifsfs.c (modified) (2 diffs)
-
fs/fuse/dev.c (modified) (1 diff)
-
fs/hfsplus/hfsplus_fs.h (modified) (4 diffs)
-
fs/hfsplus/part_tbl.c (modified) (5 diffs)
-
fs/hfsplus/super.c (modified) (4 diffs)
-
fs/hfsplus/wrapper.c (modified) (5 diffs)
-
fs/xfs/linux-2.6/xfs_linux.h (modified) (1 diff)
-
fs/xfs/linux-2.6/xfs_super.c (modified) (4 diffs)
-
fs/xfs/quota/xfs_dquot_item.c (modified) (4 diffs)
-
fs/xfs/xfs_buf_item.c (modified) (2 diffs)
-
fs/xfs/xfs_inode_item.c (modified) (4 diffs)
-
fs/xfs/xfs_trans.c (modified) (7 diffs)
-
fs/xfs/xfs_trans.h (modified) (1 diff)
-
fs/xfs/xfs_trans_ail.c (modified) (13 diffs)
-
fs/xfs/xfs_trans_priv.h (modified) (3 diffs)
-
kernel/posix-cpu-timers.c (modified) (2 diffs)
-
kernel/sys.c (modified) (1 diff)
-
mm/migrate.c (modified) (1 diff)
-
net/x25/af_x25.c (modified) (1 diff)
-
sound/pci/hda/hda_intel.c (modified) (1 diff)
-
sound/pci/hda/patch_conexant.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/linux/laguna/linux-3.0/Makefile
r17795 r17812 1 1 VERSION = 3 2 2 PATCHLEVEL = 0 3 SUBLEVEL = 73 SUBLEVEL = 8 4 4 EXTRAVERSION = 5 5 NAME = Sneaky Weasel -
src/linux/laguna/linux-3.0/arch/arm/kernel/perf_event_v7.c
r17371 r17812 265 265 [PERF_COUNT_HW_INSTRUCTIONS] = 266 266 ARMV7_PERFCTR_INST_OUT_OF_RENAME_STAGE, 267 [PERF_COUNT_HW_CACHE_REFERENCES] = ARMV7_PERFCTR_ COHERENT_LINE_HIT,268 [PERF_COUNT_HW_CACHE_MISSES] = ARMV7_PERFCTR_ COHERENT_LINE_MISS,267 [PERF_COUNT_HW_CACHE_REFERENCES] = ARMV7_PERFCTR_DCACHE_ACCESS, 268 [PERF_COUNT_HW_CACHE_MISSES] = ARMV7_PERFCTR_DCACHE_REFILL, 269 269 [PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = ARMV7_PERFCTR_PC_WRITE, 270 270 [PERF_COUNT_HW_BRANCH_MISSES] = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED, -
src/linux/laguna/linux-3.0/arch/arm/mm/init.c
r17371 r17812 474 474 bank_start = min(bank_start, 475 475 ALIGN(prev_bank_end, PAGES_PER_SECTION)); 476 #else 477 /* 478 * Align down here since the VM subsystem insists that the 479 * memmap entries are valid from the bank start aligned to 480 * MAX_ORDER_NR_PAGES. 481 */ 482 bank_start = round_down(bank_start, MAX_ORDER_NR_PAGES); 476 483 #endif 477 484 /* -
src/linux/laguna/linux-3.0/arch/x86/mm/init.c
r17371 r17812 64 64 /* for fixmap */ 65 65 tables += roundup(__end_of_fixed_addresses * sizeof(pte_t), PAGE_SIZE); 66 66 #endif 67 67 good_end = max_pfn_mapped << PAGE_SHIFT; 68 #endif69 68 70 69 base = memblock_find_in_range(start, good_end, tables, PAGE_SIZE); -
src/linux/laguna/linux-3.0/crypto/ghash-generic.c
r17371 r17812 68 68 u8 *dst = dctx->buffer; 69 69 70 if (!ctx->gf128) 71 return -ENOKEY; 72 70 73 if (dctx->bytes) { 71 74 int n = min(srclen, dctx->bytes); … … 120 123 u8 *buf = dctx->buffer; 121 124 125 if (!ctx->gf128) 126 return -ENOKEY; 127 122 128 ghash_flush(ctx, dctx); 123 129 memcpy(dst, buf, GHASH_BLOCK_SIZE); -
src/linux/laguna/linux-3.0/drivers/firewire/sbp2.c
r17371 r17812 1199 1199 struct fw_unit *unit = fw_unit(dev); 1200 1200 struct sbp2_target *tgt = dev_get_drvdata(&unit->device); 1201 struct sbp2_logical_unit *lu; 1202 1203 list_for_each_entry(lu, &tgt->lu_list, link) 1204 cancel_delayed_work_sync(&lu->work); 1201 1205 1202 1206 sbp2_target_put(tgt); -
src/linux/laguna/linux-3.0/drivers/gpu/drm/radeon/atom.c
r17371 r17812 278 278 idx = U8(*ptr); 279 279 (*ptr)++; 280 val = gctx->scratch[((gctx->fb_base + idx) / 4)]; 280 if ((gctx->fb_base + (idx * 4)) > gctx->scratch_size_bytes) { 281 DRM_ERROR("ATOM: fb read beyond scratch region: %d vs. %d\n", 282 gctx->fb_base + (idx * 4), gctx->scratch_size_bytes); 283 val = 0; 284 } else 285 val = gctx->scratch[(gctx->fb_base / 4) + idx]; 281 286 if (print) 282 287 DEBUG("FB[0x%02X]", idx); … … 532 537 idx = U8(*ptr); 533 538 (*ptr)++; 534 gctx->scratch[((gctx->fb_base + idx) / 4)] = val; 539 if ((gctx->fb_base + (idx * 4)) > gctx->scratch_size_bytes) { 540 DRM_ERROR("ATOM: fb write beyond scratch region: %d vs. %d\n", 541 gctx->fb_base + (idx * 4), gctx->scratch_size_bytes); 542 } else 543 gctx->scratch[(gctx->fb_base / 4) + idx] = val; 535 544 DEBUG("FB[0x%02X]", idx); 536 545 break; … … 1368 1377 usage_bytes = firmware_usage->asFirmwareVramReserveInfo[0].usFirmwareUseInKb * 1024; 1369 1378 } 1379 ctx->scratch_size_bytes = 0; 1370 1380 if (usage_bytes == 0) 1371 1381 usage_bytes = 20 * 1024; … … 1374 1384 if (!ctx->scratch) 1375 1385 return -ENOMEM; 1386 ctx->scratch_size_bytes = usage_bytes; 1376 1387 return 0; 1377 1388 } -
src/linux/laguna/linux-3.0/drivers/gpu/drm/radeon/atom.h
r17371 r17812 138 138 int io_mode; 139 139 uint32_t *scratch; 140 int scratch_size_bytes; 140 141 }; 141 142 -
src/linux/laguna/linux-3.0/drivers/gpu/drm/ttm/ttm_bo.c
r17540 r17812 393 393 */ 394 394 395 if (!(new_man->flags & TTM_MEMTYPE_FLAG_FIXED) && (bo->ttm == NULL)) { 396 ret = ttm_bo_add_ttm(bo, false); 397 if (ret) 398 goto out_err; 395 if (!(new_man->flags & TTM_MEMTYPE_FLAG_FIXED)) { 396 if (bo->ttm == NULL) { 397 ret = ttm_bo_add_ttm(bo, false); 398 if (ret) 399 goto out_err; 400 } 399 401 400 402 ret = ttm_tt_set_placement_caching(bo->ttm, mem->placement); -
src/linux/laguna/linux-3.0/drivers/gpu/drm/ttm/ttm_bo_util.c
r17371 r17812 636 636 return ret; 637 637 638 ttm_bo_free_old_node(bo);639 638 if ((man->flags & TTM_MEMTYPE_FLAG_FIXED) && 640 639 (bo->ttm != NULL)) { … … 643 642 bo->ttm = NULL; 644 643 } 644 ttm_bo_free_old_node(bo); 645 645 } else { 646 646 /** -
src/linux/laguna/linux-3.0/drivers/hid/hid-ids.h
r17371 r17812 569 569 #define USB_DEVICE_ID_SAMSUNG_WIRELESS_KBD_MOUSE 0x0600 570 570 571 #define USB_VENDOR_ID_SIGMA_MICRO 0x1c4f 572 #define USB_DEVICE_ID_SIGMA_MICRO_KEYBOARD 0x0002 573 571 574 #define USB_VENDOR_ID_SKYCABLE 0x1223 572 575 #define USB_DEVICE_ID_SKYCABLE_WIRELESS_PRESENTER 0x3F07 -
src/linux/laguna/linux-3.0/drivers/hid/hid-magicmouse.c
r17371 r17812 502 502 report->size = 6; 503 503 504 /* 505 * Some devices repond with 'invalid report id' when feature 506 * report switching it into multitouch mode is sent to it. 507 * 508 * This results in -EIO from the _raw low-level transport callback, 509 * but there seems to be no other way of switching the mode. 510 * Thus the super-ugly hacky success check below. 511 */ 504 512 ret = hdev->hid_output_raw_report(hdev, feature, sizeof(feature), 505 513 HID_FEATURE_REPORT); 506 if (ret != sizeof(feature)) {514 if (ret != -EIO && ret != sizeof(feature)) { 507 515 hid_err(hdev, "unable to request touch data (%d)\n", ret); 508 516 goto err_stop_hw; -
src/linux/laguna/linux-3.0/drivers/hid/usbhid/hid-quirks.c
r17371 r17812 90 90 { USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_MULTI_TOUCH, HID_QUIRK_MULTI_INPUT }, 91 91 { USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_WIRELESS, HID_QUIRK_MULTI_INPUT }, 92 { USB_VENDOR_ID_SIGMA_MICRO, USB_DEVICE_ID_SIGMA_MICRO_KEYBOARD, HID_QUIRK_NO_INIT_REPORTS }, 92 93 { 0, 0 } 93 94 }; -
src/linux/laguna/linux-3.0/drivers/hwmon/w83627ehf.c
r17371 r17812 391 391 if (is_word_sized(reg)) 392 392 return LM75_TEMP_FROM_REG(regval); 393 return regval* 1000;393 return ((s8)regval) * 1000; 394 394 } 395 395 … … 399 399 if (is_word_sized(reg)) 400 400 return LM75_TEMP_TO_REG(temp); 401 return DIV_ROUND_CLOSEST(SENSORS_LIMIT(temp, -127000, 128000), 1000); 401 return (s8)DIV_ROUND_CLOSEST(SENSORS_LIMIT(temp, -127000, 128000), 402 1000); 402 403 } 403 404 … … 1716 1717 1717 1718 /* Get the monitoring functions started */ 1718 static inline void __devinit w83627ehf_init_device(struct w83627ehf_data *data) 1719 static inline void __devinit w83627ehf_init_device(struct w83627ehf_data *data, 1720 enum kinds kind) 1719 1721 { 1720 1722 int i; … … 1747 1749 1748 1750 /* Get thermal sensor types */ 1749 diode = w83627ehf_read_value(data, W83627EHF_REG_DIODE); 1751 switch (kind) { 1752 case w83627ehf: 1753 diode = w83627ehf_read_value(data, W83627EHF_REG_DIODE); 1754 break; 1755 default: 1756 diode = 0x70; 1757 } 1750 1758 for (i = 0; i < 3; i++) { 1751 1759 if ((tmp & (0x02 << i))) 1752 data->temp_type[i] = (diode & (0x10 << i)) ? 1 : 2;1760 data->temp_type[i] = (diode & (0x10 << i)) ? 1 : 3; 1753 1761 else 1754 1762 data->temp_type[i] = 4; /* thermistor */ … … 2017 2025 2018 2026 /* Initialize the chip */ 2019 w83627ehf_init_device(data );2027 w83627ehf_init_device(data, sio_data->kind); 2020 2028 2021 2029 data->vrm = vid_which_vrm(); -
src/linux/laguna/linux-3.0/drivers/media/video/uvc/uvc_entity.c
r17371 r17812 50 50 return -EINVAL; 51 51 52 source = (UVC_ENTITY_TYPE(remote) != UVC_TT_STREAMING)52 source = (UVC_ENTITY_TYPE(remote) == UVC_TT_STREAMING) 53 53 ? (remote->vdev ? &remote->vdev->entity : NULL) 54 54 : &remote->subdev.entity; -
src/linux/laguna/linux-3.0/drivers/platform/x86/samsung-laptop.c
r17371 r17812 598 598 DMI_MATCH(DMI_PRODUCT_NAME, "R519/R719"), 599 599 DMI_MATCH(DMI_BOARD_NAME, "R519/R719"), 600 }, 601 .callback = dmi_check_cb, 602 }, 603 { 604 .ident = "N150/N210/N220", 605 .matches = { 606 DMI_MATCH(DMI_SYS_VENDOR, 607 "SAMSUNG ELECTRONICS CO., LTD."), 608 DMI_MATCH(DMI_PRODUCT_NAME, "N150/N210/N220"), 609 DMI_MATCH(DMI_BOARD_NAME, "N150/N210/N220"), 600 610 }, 601 611 .callback = dmi_check_cb, -
src/linux/laguna/linux-3.0/fs/cifs/cifsfs.c
r17492 r17812 567 567 struct dentry *child; 568 568 569 if (!dir) { 570 dput(dentry); 571 dentry = ERR_PTR(-ENOENT); 572 break; 573 } 574 569 575 /* skip separators */ 570 576 while (*s == sep) … … 582 588 dput(dentry); 583 589 dentry = child; 584 if (!dentry->d_inode) {585 dput(dentry);586 dentry = ERR_PTR(-ENOENT);587 }588 590 } while (!IS_ERR(dentry)); 589 591 _FreeXid(xid); -
src/linux/laguna/linux-3.0/fs/fuse/dev.c
r17540 r17812 259 259 260 260 spin_lock(&fc->lock); 261 fc->forget_list_tail->next = forget; 262 fc->forget_list_tail = forget; 263 wake_up(&fc->waitq); 264 kill_fasync(&fc->fasync, SIGIO, POLL_IN); 261 if (fc->connected) { 262 fc->forget_list_tail->next = forget; 263 fc->forget_list_tail = forget; 264 wake_up(&fc->waitq); 265 kill_fasync(&fc->fasync, SIGIO, POLL_IN); 266 } else { 267 kfree(forget); 268 } 265 269 spin_unlock(&fc->lock); 266 270 } -
src/linux/laguna/linux-3.0/fs/hfsplus/hfsplus_fs.h
r17371 r17812 14 14 #include <linux/mutex.h> 15 15 #include <linux/buffer_head.h> 16 #include <linux/blkdev.h> 16 17 #include "hfsplus_raw.h" 17 18 … … 111 112 112 113 struct hfsplus_sb_info { 114 void *s_vhdr_buf; 113 115 struct hfsplus_vh *s_vhdr; 116 void *s_backup_vhdr_buf; 114 117 struct hfsplus_vh *s_backup_vhdr; 115 118 struct hfs_btree *ext_tree; … … 258 261 struct hfsplus_cat_key key; 259 262 }; 263 264 /* 265 * Find minimum acceptible I/O size for an hfsplus sb. 266 */ 267 static inline unsigned short hfsplus_min_io_size(struct super_block *sb) 268 { 269 return max_t(unsigned short, bdev_logical_block_size(sb->s_bdev), 270 HFSPLUS_SECTOR_SIZE); 271 } 260 272 261 273 #define hfs_btree_open hfsplus_btree_open … … 437 449 int hfsplus_read_wrapper(struct super_block *); 438 450 int hfs_part_find(struct super_block *, sector_t *, sector_t *); 439 int hfsplus_submit_bio(struct block_device *bdev, sector_t sector,440 void * data, int rw);451 int hfsplus_submit_bio(struct super_block *sb, sector_t sector, 452 void *buf, void **data, int rw); 441 453 442 454 /* time macros */ -
src/linux/laguna/linux-3.0/fs/hfsplus/part_tbl.c
r17371 r17812 89 89 } 90 90 91 static int hfs_parse_new_pmap(struct super_block *sb, struct new_pmap *pm,92 s ector_t *part_start, sector_t *part_size)91 static int hfs_parse_new_pmap(struct super_block *sb, void *buf, 92 struct new_pmap *pm, sector_t *part_start, sector_t *part_size) 93 93 { 94 94 struct hfsplus_sb_info *sbi = HFSPLUS_SB(sb); 95 95 int size = be32_to_cpu(pm->pmMapBlkCnt); 96 int buf_size = hfsplus_min_io_size(sb); 96 97 int res; 97 98 int i = 0; … … 108 109 return -ENOENT; 109 110 110 res = hfsplus_submit_bio(sb->s_bdev, 111 *part_start + HFS_PMAP_BLK + i, 112 pm, READ); 113 if (res) 114 return res; 111 pm = (struct new_pmap *)((u8 *)pm + HFSPLUS_SECTOR_SIZE); 112 if ((u8 *)pm - (u8 *)buf >= buf_size) { 113 res = hfsplus_submit_bio(sb, 114 *part_start + HFS_PMAP_BLK + i, 115 buf, (void **)&pm, READ); 116 if (res) 117 return res; 118 } 115 119 } while (pm->pmSig == cpu_to_be16(HFS_NEW_PMAP_MAGIC)); 116 120 … … 125 129 sector_t *part_start, sector_t *part_size) 126 130 { 127 void * data;131 void *buf, *data; 128 132 int res; 129 133 130 data = kmalloc(HFSPLUS_SECTOR_SIZE, GFP_KERNEL);131 if (! data)134 buf = kmalloc(hfsplus_min_io_size(sb), GFP_KERNEL); 135 if (!buf) 132 136 return -ENOMEM; 133 137 134 res = hfsplus_submit_bio(sb ->s_bdev, *part_start + HFS_PMAP_BLK,135 data, READ);138 res = hfsplus_submit_bio(sb, *part_start + HFS_PMAP_BLK, 139 buf, &data, READ); 136 140 if (res) 137 141 goto out; … … 142 146 break; 143 147 case HFS_NEW_PMAP_MAGIC: 144 res = hfs_parse_new_pmap(sb, data, part_start, part_size);148 res = hfs_parse_new_pmap(sb, buf, data, part_start, part_size); 145 149 break; 146 150 default: … … 149 153 } 150 154 out: 151 kfree( data);155 kfree(buf); 152 156 return res; 153 157 } -
src/linux/laguna/linux-3.0/fs/hfsplus/super.c
r17371 r17812 198 198 } 199 199 200 error2 = hfsplus_submit_bio(sb ->s_bdev,200 error2 = hfsplus_submit_bio(sb, 201 201 sbi->part_start + HFSPLUS_VOLHEAD_SECTOR, 202 sbi->s_vhdr , WRITE_SYNC);202 sbi->s_vhdr_buf, NULL, WRITE_SYNC); 203 203 if (!error) 204 204 error = error2; … … 206 206 goto out; 207 207 208 error2 = hfsplus_submit_bio(sb ->s_bdev,208 error2 = hfsplus_submit_bio(sb, 209 209 sbi->part_start + sbi->sect_count - 2, 210 sbi->s_backup_vhdr , WRITE_SYNC);210 sbi->s_backup_vhdr_buf, NULL, WRITE_SYNC); 211 211 if (!error) 212 212 error2 = error; … … 252 252 iput(sbi->alloc_file); 253 253 iput(sbi->hidden_dir); 254 kfree(sbi->s_vhdr );255 kfree(sbi->s_backup_vhdr );254 kfree(sbi->s_vhdr_buf); 255 kfree(sbi->s_backup_vhdr_buf); 256 256 unload_nls(sbi->nls); 257 257 kfree(sb->s_fs_info); … … 509 509 hfs_btree_close(sbi->ext_tree); 510 510 out_free_vhdr: 511 kfree(sbi->s_vhdr );512 kfree(sbi->s_backup_vhdr );511 kfree(sbi->s_vhdr_buf); 512 kfree(sbi->s_backup_vhdr_buf); 513 513 out_unload_nls: 514 514 unload_nls(sbi->nls); -
src/linux/laguna/linux-3.0/fs/hfsplus/wrapper.c
r17371 r17812 32 32 } 33 33 34 int hfsplus_submit_bio(struct block_device *bdev, sector_t sector, 35 void *data, int rw) 34 /* 35 * hfsplus_submit_bio - Perfrom block I/O 36 * @sb: super block of volume for I/O 37 * @sector: block to read or write, for blocks of HFSPLUS_SECTOR_SIZE bytes 38 * @buf: buffer for I/O 39 * @data: output pointer for location of requested data 40 * @rw: direction of I/O 41 * 42 * The unit of I/O is hfsplus_min_io_size(sb), which may be bigger than 43 * HFSPLUS_SECTOR_SIZE, and @buf must be sized accordingly. On reads 44 * @data will return a pointer to the start of the requested sector, 45 * which may not be the same location as @buf. 46 * 47 * If @sector is not aligned to the bdev logical block size it will 48 * be rounded down. For writes this means that @buf should contain data 49 * that starts at the rounded-down address. As long as the data was 50 * read using hfsplus_submit_bio() and the same buffer is used things 51 * will work correctly. 52 */ 53 int hfsplus_submit_bio(struct super_block *sb, sector_t sector, 54 void *buf, void **data, int rw) 36 55 { 37 56 DECLARE_COMPLETION_ONSTACK(wait); 38 57 struct bio *bio; 39 58 int ret = 0; 59 unsigned int io_size; 60 loff_t start; 61 int offset; 62 63 /* 64 * Align sector to hardware sector size and find offset. We 65 * assume that io_size is a power of two, which _should_ 66 * be true. 67 */ 68 io_size = hfsplus_min_io_size(sb); 69 start = (loff_t)sector << HFSPLUS_SECTOR_SHIFT; 70 offset = start & (io_size - 1); 71 sector &= ~((io_size >> HFSPLUS_SECTOR_SHIFT) - 1); 40 72 41 73 bio = bio_alloc(GFP_NOIO, 1); 42 74 bio->bi_sector = sector; 43 bio->bi_bdev = bdev;75 bio->bi_bdev = sb->s_bdev; 44 76 bio->bi_end_io = hfsplus_end_io_sync; 45 77 bio->bi_private = &wait; 46 78 47 /* 48 * We always submit one sector at a time, so bio_add_page must not fail. 49 */ 50 if (bio_add_page(bio, virt_to_page(data), HFSPLUS_SECTOR_SIZE, 51 offset_in_page(data)) != HFSPLUS_SECTOR_SIZE) 52 BUG(); 79 if (!(rw & WRITE) && data) 80 *data = (u8 *)buf + offset; 81 82 while (io_size > 0) { 83 unsigned int page_offset = offset_in_page(buf); 84 unsigned int len = min_t(unsigned int, PAGE_SIZE - page_offset, 85 io_size); 86 87 ret = bio_add_page(bio, virt_to_page(buf), len, page_offset); 88 if (ret != len) { 89 ret = -EIO; 90 goto out; 91 } 92 io_size -= len; 93 buf = (u8 *)buf + len; 94 } 53 95 54 96 submit_bio(rw, bio); … … 58 100 ret = -EIO; 59 101 102 out: 60 103 bio_put(bio); 61 return ret ;104 return ret < 0 ? ret : 0; 62 105 } 63 106 … … 148 191 149 192 error = -ENOMEM; 150 sbi->s_vhdr = kmalloc(HFSPLUS_SECTOR_SIZE, GFP_KERNEL);151 if (!sbi->s_vhdr )152 goto out; 153 sbi->s_backup_vhdr = kmalloc(HFSPLUS_SECTOR_SIZE, GFP_KERNEL);154 if (!sbi->s_backup_vhdr )193 sbi->s_vhdr_buf = kmalloc(hfsplus_min_io_size(sb), GFP_KERNEL); 194 if (!sbi->s_vhdr_buf) 195 goto out; 196 sbi->s_backup_vhdr_buf = kmalloc(hfsplus_min_io_size(sb), GFP_KERNEL); 197 if (!sbi->s_backup_vhdr_buf) 155 198 goto out_free_vhdr; 156 199 157 200 reread: 158 error = hfsplus_submit_bio(sb ->s_bdev,159 part_start + HFSPLUS_VOLHEAD_SECTOR,160 sbi->s_vhdr,READ);201 error = hfsplus_submit_bio(sb, part_start + HFSPLUS_VOLHEAD_SECTOR, 202 sbi->s_vhdr_buf, (void **)&sbi->s_vhdr, 203 READ); 161 204 if (error) 162 205 goto out_free_backup_vhdr; … … 187 230 } 188 231 189 error = hfsplus_submit_bio(sb ->s_bdev,190 part_start + part_size - 2,191 sbi->s_backup_vhdr, READ);232 error = hfsplus_submit_bio(sb, part_start + part_size - 2, 233 sbi->s_backup_vhdr_buf, 234 (void **)&sbi->s_backup_vhdr, READ); 192 235 if (error) 193 236 goto out_free_backup_vhdr; … … 233 276 234 277 out_free_backup_vhdr: 235 kfree(sbi->s_backup_vhdr );278 kfree(sbi->s_backup_vhdr_buf); 236 279 out_free_vhdr: 237 kfree(sbi->s_vhdr );280 kfree(sbi->s_vhdr_buf); 238 281 out: 239 282 return error; -
src/linux/laguna/linux-3.0/fs/xfs/linux-2.6/xfs_linux.h
r17371 r17812 71 71 #include <linux/writeback.h> 72 72 #include <linux/capability.h> 73 #include <linux/kthread.h> 74 #include <linux/freezer.h> 73 75 #include <linux/list_sort.h> 74 76 -
src/linux/laguna/linux-3.0/fs/xfs/linux-2.6/xfs_super.c
r17371 r17812 1413 1413 set_posix_acl_flag(sb); 1414 1414 1415 xfs_inode_shrinker_register(mp); 1416 1417 error = xfs_mountfs(mp); 1418 if (error) 1419 goto out_filestream_unmount; 1420 1415 1421 error = xfs_syncd_init(mp); 1416 1422 if (error) 1417 goto out_filestream_unmount; 1418 1419 xfs_inode_shrinker_register(mp); 1420 1421 error = xfs_mountfs(mp); 1422 if (error) 1423 goto out_syncd_stop; 1423 goto out_unmount; 1424 1424 1425 1425 root = igrab(VFS_I(mp->m_rootip)); 1426 1426 if (!root) { 1427 1427 error = ENOENT; 1428 goto fail_unmount;1428 goto out_syncd_stop; 1429 1429 } 1430 1430 if (is_bad_inode(root)) { 1431 1431 error = EINVAL; 1432 goto fail_vnrele;1432 goto out_syncd_stop; 1433 1433 } 1434 1434 sb->s_root = d_alloc_root(root); 1435 1435 if (!sb->s_root) { 1436 1436 error = ENOMEM; 1437 goto fail_vnrele;1437 goto out_iput; 1438 1438 } 1439 1439 1440 1440 return 0; 1441 1441 1442 out_ syncd_stop:1442 out_filestream_unmount: 1443 1443 xfs_inode_shrinker_unregister(mp); 1444 xfs_syncd_stop(mp);1445 out_filestream_unmount:1446 1444 xfs_filestream_unmount(mp); 1447 1445 out_free_sb: … … 1457 1455 return -error; 1458 1456 1459 fail_vnrele: 1460 if (sb->s_root) { 1461 dput(sb->s_root); 1462 sb->s_root = NULL; 1463 } else { 1464 iput(root); 1465 } 1466 1467 fail_unmount: 1457 out_iput: 1458 iput(root); 1459 out_syncd_stop: 1460 xfs_syncd_stop(mp); 1461 out_unmount: 1468 1462 xfs_inode_shrinker_unregister(mp); 1469 xfs_syncd_stop(mp);1470 1463 1471 1464 /* … … 1668 1661 xfs_syncd_wq = alloc_workqueue("xfssyncd", WQ_CPU_INTENSIVE, 8); 1669 1662 if (!xfs_syncd_wq) 1670 goto out; 1671 1672 xfs_ail_wq = alloc_workqueue("xfsail", WQ_CPU_INTENSIVE, 8); 1673 if (!xfs_ail_wq) 1674 goto out_destroy_syncd; 1675 1663 return -ENOMEM; 1676 1664 return 0; 1677 1678 out_destroy_syncd:1679 destroy_workqueue(xfs_syncd_wq);1680 out:1681 return -ENOMEM;1682 1665 } 1683 1666 … … 1685 1668 xfs_destroy_workqueues(void) 1686 1669 { 1687 destroy_workqueue(xfs_ail_wq);1688 1670 destroy_workqueue(xfs_syncd_wq); 1689 1671 } -
src/linux/laguna/linux-3.0/fs/xfs/quota/xfs_dquot_item.c
r17371 r17812 184 184 * spinlock. 185 185 */ 186 STATIC void186 STATIC bool 187 187 xfs_qm_dquot_logitem_pushbuf( 188 188 struct xfs_log_item *lip) … … 191 191 struct xfs_dquot *dqp = qlip->qli_dquot; 192 192 struct xfs_buf *bp; 193 bool ret = true; 193 194 194 195 ASSERT(XFS_DQ_IS_LOCKED(dqp)); … … 202 203 !(lip->li_flags & XFS_LI_IN_AIL)) { 203 204 xfs_dqunlock(dqp); 204 return ;205 return true; 205 206 } 206 207 … … 209 210 xfs_dqunlock(dqp); 210 211 if (!bp) 211 return ;212 return true; 212 213 if (XFS_BUF_ISDELAYWRITE(bp)) 213 214 xfs_buf_delwri_promote(bp); 215 if (XFS_BUF_ISPINNED(bp)) 216 ret = false; 214 217 xfs_buf_relse(bp); 218 return ret; 215 219 } 216 220 -
src/linux/laguna/linux-3.0/fs/xfs/xfs_buf_item.c
r17371 r17812 633 633 * to allow the xfsbufd to write it, too. 634 634 */ 635 STATIC void635 STATIC bool 636 636 xfs_buf_item_pushbuf( 637 637 struct xfs_log_item *lip) … … 647 647 xfs_buf_delwri_promote(bp); 648 648 xfs_buf_relse(bp); 649 return true; 649 650 } 650 651 -
src/linux/laguna/linux-3.0/fs/xfs/xfs_inode_item.c
r17371 r17812 714 714 * allow the caller to write the buffer by triggering the xfsbufd to run. 715 715 */ 716 STATIC void716 STATIC bool 717 717 xfs_inode_item_pushbuf( 718 718 struct xfs_log_item *lip) … … 721 721 struct xfs_inode *ip = iip->ili_inode; 722 722 struct xfs_buf *bp; 723 bool ret = true; 723 724 724 725 ASSERT(xfs_isilocked(ip, XFS_ILOCK_SHARED)); … … 731 732 !(lip->li_flags & XFS_LI_IN_AIL)) { 732 733 xfs_iunlock(ip, XFS_ILOCK_SHARED); 733 return ;734 return true; 734 735 } 735 736 … … 739 740 xfs_iunlock(ip, XFS_ILOCK_SHARED); 740 741 if (!bp) 741 return ;742 return true; 742 743 if (XFS_BUF_ISDELAYWRITE(bp)) 743 744 xfs_buf_delwri_promote(bp); 745 if (XFS_BUF_ISPINNED(bp)) 746 ret = false; 744 747 xfs_buf_relse(bp); 748 return ret; 745 749 } 746 750 -
src/linux/laguna/linux-3.0/fs/xfs/xfs_trans.c
r17371 r17812 1427 1427 xfs_log_item_batch_insert( 1428 1428 struct xfs_ail *ailp, 1429 struct xfs_ail_cursor *cur, 1429 1430 struct xfs_log_item **log_items, 1430 1431 int nr_items, … … 1435 1436 spin_lock(&ailp->xa_lock); 1436 1437 /* xfs_trans_ail_update_bulk drops ailp->xa_lock */ 1437 xfs_trans_ail_update_bulk(ailp, log_items, nr_items, commit_lsn);1438 xfs_trans_ail_update_bulk(ailp, cur, log_items, nr_items, commit_lsn); 1438 1439 1439 1440 for (i = 0; i < nr_items; i++) … … 1453 1454 * this case all we need to do is IOP_COMMITTED processing, followed by an 1454 1455 * IOP_UNPIN(aborted) call. 1456 * 1457 * The AIL cursor is used to optimise the insert process. If commit_lsn is not 1458 * at the end of the AIL, the insert cursor avoids the need to walk 1459 * the AIL to find the insertion point on every xfs_log_item_batch_insert() 1460 * call. This saves a lot of needless list walking and is a net win, even 1461 * though it slightly increases that amount of AIL lock traffic to set it up 1462 * and tear it down. 1455 1463 */ 1456 1464 void … … 1464 1472 struct xfs_log_item *log_items[LOG_ITEM_BATCH_SIZE]; 1465 1473 struct xfs_log_vec *lv; 1474 struct xfs_ail_cursor cur; 1466 1475 int i = 0; 1476 1477 spin_lock(&ailp->xa_lock); 1478 xfs_trans_ail_cursor_last(ailp, &cur, commit_lsn); 1479 spin_unlock(&ailp->xa_lock); 1467 1480 1468 1481 /* unpin all the log items */ … … 1494 1507 * Not a bulk update option due to unusual item_lsn. 1495 1508 * Push into AIL immediately, rechecking the lsn once 1496 * we have the ail lock. Then unpin the item. 1509 * we have the ail lock. Then unpin the item. This does 1510 * not affect the AIL cursor the bulk insert path is 1511 * using. 1497 1512 */ 1498 1513 spin_lock(&ailp->xa_lock); … … 1508 1523 log_items[i++] = lv->lv_item; 1509 1524 if (i >= LOG_ITEM_BATCH_SIZE) { 1510 xfs_log_item_batch_insert(ailp, log_items,1525 xfs_log_item_batch_insert(ailp, &cur, log_items, 1511 1526 LOG_ITEM_BATCH_SIZE, commit_lsn); 1512 1527 i = 0; … … 1516 1531 /* make sure we insert the remainder! */ 1517 1532 if (i) 1518 xfs_log_item_batch_insert(ailp, log_items, i, commit_lsn); 1533 xfs_log_item_batch_insert(ailp, &cur, log_items, i, commit_lsn); 1534 1535 spin_lock(&ailp->xa_lock); 1536 xfs_trans_ail_cursor_done(ailp, &cur); 1537 spin_unlock(&ailp->xa_lock); 1519 1538 } 1520 1539 -
src/linux/laguna/linux-3.0/fs/xfs/xfs_trans.h
r17371 r17812 351 351 xfs_lsn_t (*iop_committed)(xfs_log_item_t *, xfs_lsn_t); 352 352 void (*iop_push)(xfs_log_item_t *); 353 void(*iop_pushbuf)(xfs_log_item_t *);353 bool (*iop_pushbuf)(xfs_log_item_t *); 354 354 void (*iop_committing)(xfs_log_item_t *, xfs_lsn_t); 355 355 } xfs_item_ops_t; -
src/linux/laguna/linux-3.0/fs/xfs/xfs_trans_ail.c
r17371 r17812 29 29 #include "xfs_error.h" 30 30 31 struct workqueue_struct *xfs_ail_wq; /* AIL workqueue */32 33 31 #ifdef DEBUG 34 32 /* … … 273 271 274 272 /* 275 * Return the item in the AIL with the currentlsn.276 * Return the current tree generation number for use277 * in calls to xfs_trans_next_ail().273 * Initialise the cursor to the first item in the AIL with the given @lsn. 274 * This searches the list from lowest LSN to highest. Pass a @lsn of zero 275 * to initialise the cursor to the first item in the AIL. 278 276 */ 279 277 xfs_log_item_t * … … 301 299 302 300 /* 303 * splice the log item list into the AIL at the given LSN. 301 * Initialise the cursor to the last item in the AIL with the given @lsn. 302 * This searches the list from highest LSN to lowest. If there is no item with 303 * the value of @lsn, then it sets the cursor to the last item with an LSN lower 304 * than @lsn. 305 */ 306 static struct xfs_log_item * 307 __xfs_trans_ail_cursor_last( 308 struct xfs_ail *ailp, 309 xfs_lsn_t lsn) 310 { 311 xfs_log_item_t *lip; 312 313 list_for_each_entry_reverse(lip, &ailp->xa_ail, li_ail) { 314 if (XFS_LSN_CMP(lip->li_lsn, lsn) <= 0) 315 return lip; 316 } 317 return NULL; 318 } 319 320 /* 321 * Initialise the cursor to the last item in the AIL with the given @lsn. 322 * This searches the list from highest LSN to lowest. 323 */ 324 struct xfs_log_item * 325 xfs_trans_ail_cursor_last( 326 struct xfs_ail *ailp, 327 struct xfs_ail_cursor *cur, 328 xfs_lsn_t lsn) 329 { 330 xfs_trans_ail_cursor_init(ailp, cur); 331 cur->item = __xfs_trans_ail_cursor_last(ailp, lsn); 332 return cur->item; 333 } 334 335 /* 336 * splice the log item list into the AIL at the given LSN. We splice to the 337 * tail of the given LSN to maintain insert order for push traversals. The 338 * cursor is optional, allowing repeated updates to the same LSN to avoid 339 * repeated traversals. 304 340 */ 305 341 static void 306 342 xfs_ail_splice( 307 struct xfs_ail *ailp, 308 struct list_head *list, 309 xfs_lsn_t lsn) 310 { 311 xfs_log_item_t *next_lip; 312 313 /* If the list is empty, just insert the item. */ 314 if (list_empty(&ailp->xa_ail)) { 315 list_splice(list, &ailp->xa_ail); 316 return; 317 } 318 319 list_for_each_entry_reverse(next_lip, &ailp->xa_ail, li_ail) { 320 if (XFS_LSN_CMP(next_lip->li_lsn, lsn) <= 0) 321 break; 322 } 323 324 ASSERT(&next_lip->li_ail == &ailp->xa_ail || 325 XFS_LSN_CMP(next_lip->li_lsn, lsn) <= 0); 326 327 list_splice_init(list, &next_lip->li_ail); 343 struct xfs_ail *ailp, 344 struct xfs_ail_cursor *cur, 345 struct list_head *list, 346 xfs_lsn_t lsn) 347 { 348 struct xfs_log_item *lip = cur ? cur->item : NULL; 349 struct xfs_log_item *next_lip; 350 351 /* 352 * Get a new cursor if we don't have a placeholder or the existing one 353 * has been invalidated. 354 */ 355 if (!lip || (__psint_t)lip & 1) { 356 lip = __xfs_trans_ail_cursor_last(ailp, lsn); 357 358 if (!lip) { 359 /* The list is empty, so just splice and return. */ 360 if (cur) 361 cur->item = NULL; 362 list_splice(list, &ailp->xa_ail); 363 return; 364 } 365 } 366 367 /* 368 * Our cursor points to the item we want to insert _after_, so we have 369 * to update the cursor to point to the end of the list we are splicing 370 * in so that it points to the correct location for the next splice. 371 * i.e. before the splice 372 * 373 * lsn -> lsn -> lsn + x -> lsn + x ... 374 * ^ 375 * | cursor points here 376 * 377 * After the splice we have: 378 * 379 * lsn -> lsn -> lsn -> lsn -> .... -> lsn -> lsn + x -> lsn + x ... 380 * ^ ^ 381 * | cursor points here | needs to move here 382 * 383 * So we set the cursor to the last item in the list to be spliced 384 * before we execute the splice, resulting in the cursor pointing to 385 * the correct item after the splice occurs. 386 */ 387 if (cur) { 388 next_lip = list_entry(list->prev, struct xfs_log_item, li_ail); 389 cur->item = next_lip; 390 } 391 list_splice(list, &lip->li_ail); 328 392 } 329 393 … … 341 405 } 342 406 343 /* 344 * xfs_ail_worker does the work of pushing on the AIL. It will requeue itself 345 * to run at a later time if there is more work to do to complete the push. 346 */ 347 STATIC void 348 xfs_ail_worker( 349 struct work_struct *work) 350 { 351 struct xfs_ail *ailp = container_of(to_delayed_work(work), 352 struct xfs_ail, xa_work); 407 static long 408 xfsaild_push( 409 struct xfs_ail *ailp) 410 { 353 411 xfs_mount_t *mp = ailp->xa_mount; 354 412 struct xfs_ail_cursor *cur = &ailp->xa_cursors; … … 413 471 case XFS_ITEM_PUSHBUF: 414 472 XFS_STATS_INC(xs_push_ail_pushbuf); 415 IOP_PUSHBUF(lip); 416 ailp->xa_last_pushed_lsn = lsn; 473 474 if (!IOP_PUSHBUF(lip)) { 475 stuck++; 476 flush_log = 1; 477 } else { 478 ailp->xa_last_pushed_lsn = lsn; 479 } 417 480 push_xfsbufd = 1; 418 481 break; … … 426 489 case XFS_ITEM_LOCKED: 427 490 XFS_STATS_INC(xs_push_ail_locked); 428 ailp->xa_last_pushed_lsn = lsn;429 491 stuck++; 430 492 break; … … 486 548 /* We're past our target or empty, so idle */ 487 549 ailp->xa_last_pushed_lsn = 0; 488 489 /*490 * We clear the XFS_AIL_PUSHING_BIT first before checking491 * whether the target has changed. If the target has changed,492 * this pushes the requeue race directly onto the result of the493 * atomic test/set bit, so we are guaranteed that either the494 * the pusher that changed the target or ourselves will requeue495 * the work (but not both).496 */497 clear_bit(XFS_AIL_PUSHING_BIT, &ailp->xa_flags);498 smp_rmb();499 if (XFS_LSN_CMP(ailp->xa_target, target) == 0 ||500 test_and_set_bit(XFS_AIL_PUSHING_BIT, &ailp->xa_flags))501 return;502 550 503 551 tout = 50; … … 523 571 } 524 572 525 /* There is more to do, requeue us. */ 526 queue_delayed_work(xfs_syncd_wq, &ailp->xa_work, 527 msecs_to_jiffies(tout)); 573 return tout; 574 } 575 576 static int 577 xfsaild( 578 void *data) 579 { 580 struct xfs_ail *ailp = data; 581 long tout = 0; /* milliseconds */ 582 583 while (!kthread_should_stop()) { 584 if (tout && tout <= 20) 585 __set_current_state(TASK_KILLABLE); 586 else 587 __set_current_state(TASK_INTERRUPTIBLE); 588 schedule_timeout(tout ? 589 msecs_to_jiffies(tout) : MAX_SCHEDULE_TIMEOUT); 590 591 try_to_freeze(); 592 593 tout = xfsaild_push(ailp); 594 } 595 596 return 0; 528 597 } 529 598 … … 560 629 smp_wmb(); 561 630 xfs_trans_ail_copy_lsn(ailp, &ailp->xa_target, &threshold_lsn); 562 if (!test_and_set_bit(XFS_AIL_PUSHING_BIT, &ailp->xa_flags)) 563 queue_delayed_work(xfs_syncd_wq, &ailp->xa_work, 0); 631 smp_wmb(); 632 633 wake_up_process(ailp->xa_task); 564 634 } 565 635 … … 646 716 xfs_trans_ail_update_bulk( 647 717 struct xfs_ail *ailp, 718 struct xfs_ail_cursor *cur, 648 719 struct xfs_log_item **log_items, 649 720 int nr_items, … … 675 746 } 676 747 677 xfs_ail_splice(ailp, &tmp, lsn);748 xfs_ail_splice(ailp, cur, &tmp, lsn); 678 749 679 750 if (!mlip_changed) { … … 795 866 INIT_LIST_HEAD(&ailp->xa_ail); 796 867 spin_lock_init(&ailp->xa_lock); 797 INIT_DELAYED_WORK(&ailp->xa_work, xfs_ail_worker); 868 869 ailp->xa_task = kthread_run(xfsaild, ailp, "xfsaild/%s", 870 ailp->xa_mount->m_fsname); 871 if (IS_ERR(ailp->xa_task)) 872 goto out_free_ailp; 873 798 874 mp->m_ail = ailp; 799 875 return 0; 876 877 out_free_ailp: 878 kmem_free(ailp); 879 return ENOMEM; 800 880 } 801 881 … … 806 886 struct xfs_ail *ailp = mp->m_ail; 807 887 808 cancel_delayed_work_sync(&ailp->xa_work);888 kthread_stop(ailp->xa_task); 809 889 kmem_free(ailp); 810 890 } -
src/linux/laguna/linux-3.0/fs/xfs/xfs_trans_priv.h
r17371 r17812 65 65 struct xfs_ail { 66 66 struct xfs_mount *xa_mount; 67 struct task_struct *xa_task; 67 68 struct list_head xa_ail; 68 69 xfs_lsn_t xa_target; 69 70 struct xfs_ail_cursor xa_cursors; 70 71 spinlock_t xa_lock; 71 struct delayed_work xa_work;72 72 xfs_lsn_t xa_last_pushed_lsn; 73 unsigned long xa_flags;74 73 }; 75 76 #define XFS_AIL_PUSHING_BIT 077 74 78 75 /* 79 76 * From xfs_trans_ail.c 80 77 */ 81 82 extern struct workqueue_struct *xfs_ail_wq; /* AIL workqueue */83 84 78 void xfs_trans_ail_update_bulk(struct xfs_ail *ailp, 79 struct xfs_ail_cursor *cur, 85 80 struct xfs_log_item **log_items, int nr_items, 86 81 xfs_lsn_t lsn) __releases(ailp->xa_lock); … … 91 86 xfs_lsn_t lsn) __releases(ailp->xa_lock) 92 87 { 93 xfs_trans_ail_update_bulk(ailp, &lip, 1, lsn);88 xfs_trans_ail_update_bulk(ailp, NULL, &lip, 1, lsn); 94 89 } 95 90 … … 112 107 xfs_log_item_t *); 113 108 114 struct xfs_log_item *xfs_trans_ail_cursor_first(struct xfs_ail *ailp,109 struct xfs_log_item * xfs_trans_ail_cursor_first(struct xfs_ail *ailp, 115 110 struct xfs_ail_cursor *cur, 116 111 xfs_lsn_t lsn); 117 struct xfs_log_item *xfs_trans_ail_cursor_next(struct xfs_ail *ailp, 112 struct xfs_log_item * xfs_trans_ail_cursor_last(struct xfs_ail *ailp, 113 struct xfs_ail_cursor *cur, 114 xfs_lsn_t lsn); 115 struct xfs_log_item * xfs_trans_ail_cursor_next(struct xfs_ail *ailp, 118 116 struct xfs_ail_cursor *cur); 119 117 void xfs_trans_ail_cursor_done(struct xfs_ail *ailp, -
src/linux/laguna/linux-3.0/kernel/posix-cpu-timers.c
r17795 r17812 275 275 unsigned long flags; 276 276 277 spin_lock_irqsave(&cputimer->lock, flags);278 277 if (!cputimer->running) { 279 cputimer->running = 1;280 278 /* 281 279 * The POSIX timer interface allows for absolute time expiry … … 285 283 */ 286 284 thread_group_cputime(tsk, &sum); 285 spin_lock_irqsave(&cputimer->lock, flags); 286 cputimer->running = 1; 287 287 update_gt_cputime(&cputimer->cputime, &sum); 288 } 288 } else 289 spin_lock_irqsave(&cputimer->lock, flags); 289 290 *times = cputimer->cputime; 290 291 spin_unlock_irqrestore(&cputimer->lock, flags); -
src/linux/laguna/linux-3.0/kernel/sys.c
r17540 r17812 1136 1136 { 1137 1137 int ret = 0; 1138 char buf[ len];1138 char buf[65]; 1139 1139 1140 1140 if (current->personality & UNAME26) { -
src/linux/laguna/linux-3.0/mm/migrate.c
r17371 r17812 121 121 ptep = pte_offset_map(pmd, addr); 122 122 123 if (!is_swap_pte(*ptep)) {124 pte_unmap(ptep);125 goto out;126 }123 /* 124 * Peek to check is_swap_pte() before taking ptlock? No, we 125 * can race mremap's move_ptes(), which skips anon_vma lock. 126 */ 127 127 128 128 ptl = pte_lockptr(mm, pmd); -
src/linux/laguna/linux-3.0/net/x25/af_x25.c
r17371 r17812 296 296 * call user data vs this sockets call user data 297 297 */ 298 if(skb->len > 0 && x25_sk(s)->cudmatchlength > 0) { 298 if (x25_sk(s)->cudmatchlength > 0 && 299 skb->len >= x25_sk(s)->cudmatchlength) { 299 300 if((memcmp(x25_sk(s)->calluserdata.cuddata, 300 301 skb->data, -
src/linux/laguna/linux-3.0/sound/pci/hda/hda_intel.c
r17371 r17812 2353 2353 SND_PCI_QUIRK(0x1028, 0x01de, "Dell Precision 390", POS_FIX_LPIB), 2354 2354 SND_PCI_QUIRK(0x1028, 0x01f6, "Dell Latitude 131L", POS_FIX_LPIB), 2355 SND_PCI_QUIRK(0x1028, 0x02c6, "Dell Inspiron 1010", POS_FIX_LPIB), 2355 2356 SND_PCI_QUIRK(0x1028, 0x0470, "Dell Inspiron 1120", POS_FIX_LPIB), 2356 2357 SND_PCI_QUIRK(0x103c, 0x306d, "HP dv3", POS_FIX_LPIB), -
src/linux/laguna/linux-3.0/sound/pci/hda/patch_conexant.c
r17371 r17812 3098 3098 SND_PCI_QUIRK(0x17aa, 0x21c6, "Thinkpad Edge 13", CXT5066_ASUS), 3099 3099 SND_PCI_QUIRK(0x17aa, 0x215e, "Lenovo Thinkpad", CXT5066_THINKPAD), 3100 SND_PCI_QUIRK(0x17aa, 0x21cf, "Lenovo T520 & W520", CXT5066_AUTO), 3100 3101 SND_PCI_QUIRK(0x17aa, 0x21da, "Lenovo X220", CXT5066_THINKPAD), 3101 3102 SND_PCI_QUIRK(0x17aa, 0x21db, "Lenovo X220-tablet", CXT5066_THINKPAD),
Note: See TracChangeset
for help on using the changeset viewer.
