Linux 3.4.7
I'm announcing the release of the 3.4.7 kernel.
All users of the 3.4 kernel series must upgrade.
The updated 3.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-3.4.y
and can be browsed at the normal kernel.org git web browser:
http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 - arch/arm/plat-s5p/clock.c | 1 arch/mips/include/asm/thread_info.h | 4 +- arch/mips/kernel/vmlinux.lds.S | 3 + drivers/hid/hid-core.c | 1 drivers/hid/hid-ids.h | 6 +++ drivers/hid/hid-input.c | 3 + drivers/hid/hid-multitouch.c | 4 ++ drivers/hid/usbhid/hid-quirks.c | 1 drivers/md/dm-raid1.c | 3 + drivers/md/dm-region-hash.c | 5 ++ drivers/md/dm-thin.c | 6 ++- drivers/md/md.c | 36 ++++++++++++------- drivers/md/raid1.c | 10 ++++- drivers/target/target_core_cdb.c | 2 - drivers/target/target_core_pr.c | 7 ++- drivers/target/tcm_fc/tfc_cmd.c | 2 + fs/cifs/cifssmb.c | 30 ++++++++++++++++ fs/cifs/connect.c | 18 +++++++++ fs/cifs/readdir.c | 7 ++- fs/exofs/ore.c | 8 ---- fs/exofs/ore_raid.c | 67 +++++++++++++++++++----------------- fs/ext4/ioctl.c | 1 fs/nfs/objlayout/objio_osd.c | 9 +++- fs/ubifs/sb.c | 8 +++- kernel/time/ntp.c | 8 +++- mm/vmscan.c | 5 ++ 27 files changed, 183 insertions(+), 74 deletions(-)
Aaditya Kumar (1):
mm: fix lost kswapd wakeup in kswapd_stop()
Al Viro (1):
ext4: fix duplicated mnt_drop_write call in EXT4_IOC_MOVE_EXT
Artem Bityutskiy (1):
UBIFS: fix a bug in empty space fix-up
Boaz Harrosh (3):
ore: Fix NFS crash by supporting any unaligned RAID IO
ore: Remove support of partial IO request (NFS crash)
pnfs-obj: don't leak objio_state if ore_write/read fails
Daniel Nicoletti (1):
HID: add battery quirk for Apple Wireless ANSI
David Daney (1):
MIPS: Properly align the .data..init_task section.
Frank Kunz (1):
HID: add Sennheiser BTD500USB device support
Greg Kroah-Hartman (1):
Linux 3.4.7
Jeff Layton (3):
cifs: always update the inode cache with the results from a FIND_*
cifs: on CONFIG_HIGHMEM machines, limit the rsize/wsize to the kmap space
cifs: when CONFIG_HIGHMEM is set, serialize the read/write kmaps
Jiri Kosina (1):
HID: multitouch: Add support for Baanto touchscreen
John Stultz (1):
ntp: Fix STA_INS/DEL clearing bug
Mark Rustad (1):
tcm_fc: Fix crash seen with aborts and large reads
Mikulas Patocka (3):
dm thin: do not send discards to shared blocks dm raid1: fix crash with mirror recovery and discard dm raid1: set discard_zeroes_data_unsupported
NeilBrown (2):
md: avoid crash when stopping md array races with closing other open fds. md/raid1: close some possible races on write errors during resync
Roland Dreier (2):
target: Clean up returning errors in PR handling code
target: Fix range calculation in WRITE SAME emulation when num blocks == 0
Tushar Behera (1):
ARM: SAMSUNG: Update default rate for xusbxti clock
Makefile +1 -1
@@ -1,6 +1,6 @@ VERSION = 3 PATCHLEVEL = 4 -SUBLEVEL = 6 +SUBLEVEL = 7 EXTRAVERSION = NAME = Saber-toothed Squirrel
arch/arm/plat-s5p/clock.c +1 -0
@@ -38,6 +38,7 @@ struct clk clk_ext_xtal_mux = {struct clk clk_xusbxti = { .name ="xusbxti" , .id =-1 , + .rate =24000000 , };struct clk s5p_clk_27m = {
arch/mips/include/asm/thread_info.h +2 -2
@@ -60,6 +60,8 @@ struct thread_info { registerstruct thread_info *__current_thread_info __asm__("$28" );#define current_thread_info () __current_thread_info +#endif /* !__ASSEMBLY__ */ +/* thread information allocation */ #if defined(CONFIG_PAGE_SIZE_4KB ) && defined(CONFIG_32BIT )#define THREAD_SIZE_ORDER (1)
@@ -97,8 +99,6 @@ register struct thread_info *__current_thread_info __asm__("$28");#define free_thread_info (info) kfree(info) -#endif /* !__ASSEMBLY__ */ -#define PREEMPT_ACTIVE 0x10000000/*
arch/mips/kernel/vmlinux.lds.S +2 -1
@@ -1,5 +1,6 @@ #include <asm/asm-offsets.h> #include <asm/page.h> +#include <asm/thread_info.h> #include <asm-generic/vmlinux.lds.h> #undef mips
@@ -72,7 +73,7 @@ SECTIONS .data : { /* Data */ . = . + DATAOFFSET; /* for CONFIG_MAPPED_KERNEL */ - INIT_TASK_DATA(PAGE_SIZE) + INIT_TASK_DATA(THREAD_SIZE) NOSAVE_DATA CACHELINE_ALIGNED_DATA(1 << CONFIG_MIPS_L1_CACHE_SHIFT) READ_MOSTLY_DATA(1 << CONFIG_MIPS_L1_CACHE_SHIFT)
drivers/hid/hid-core.c +1 -0
@@ -1391,6 +1391,7 @@ static const struct hid_device_id hid_have_special_driver[] = { { HID_USB_DEVICE(USB_VENDOR_ID_ASUS, USB_DEVICE_ID_ASUS_T91MT) }, { HID_USB_DEVICE(USB_VENDOR_ID_ASUS, USB_DEVICE_ID_ASUSTEK_MULTITOUCH_YFO) }, { HID_USB_DEVICE(USB_VENDOR_ID_BELKIN, USB_DEVICE_ID_FLIP_KVM) }, + { HID_USB_DEVICE(USB_VENDOR_ID_BAANTO, USB_DEVICE_ID_BAANTO_MT_190W2), }, { HID_USB_DEVICE(USB_VENDOR_ID_BTC, USB_DEVICE_ID_BTC_EMPREX_REMOTE) }, { HID_USB_DEVICE(USB_VENDOR_ID_BTC, USB_DEVICE_ID_BTC_EMPREX_REMOTE_2) }, { HID_USB_DEVICE(USB_VENDOR_ID_CANDO, USB_DEVICE_ID_CANDO_PIXCIR_MULTI_TOUCH) },
drivers/hid/hid-ids.h +6 -0
@@ -160,6 +160,9 @@#define USB_VENDOR_ID_AVERMEDIA 0x07ca#define USB_DEVICE_ID_AVER_FM_MR800 0xb800 +#define USB_VENDOR_ID_BAANTO 0x2453 +#define USB_DEVICE_ID_BAANTO_MT_190W2 0x0100 +#define USB_VENDOR_ID_BELKIN 0x050d#define USB_DEVICE_ID_FLIP_KVM 0x3201
@@ -650,6 +653,9 @@#define USB_DEVICE_ID_SAMSUNG_IR_REMOTE 0x0001#define USB_DEVICE_ID_SAMSUNG_WIRELESS_KBD_MOUSE 0x0600 +#define USB_VENDOR_ID_SENNHEISER 0x1395 +#define USB_DEVICE_ID_SENNHEISER_BTD500USB 0x002c +#define USB_VENDOR_ID_SIGMA_MICRO 0x1c4f#define USB_DEVICE_ID_SIGMA_MICRO_KEYBOARD 0x0002
drivers/hid/hid-input.c +3 -0
@@ -290,6 +290,9 @@ static const struct hid_device_id hid_battery_quirks[] = { {HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_ANSI ), HID_BATTERY_QUIRK_PERCENT | HID_BATTERY_QUIRK_FEATURE }, + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, +USB_DEVICE_ID_APPLE_ALU_WIRELESS_ANSI ), + HID_BATTERY_QUIRK_PERCENT | HID_BATTERY_QUIRK_FEATURE }, {} };
drivers/hid/hid-multitouch.c +4 -0
@@ -783,6 +783,10 @@ static const struct hid_device_id mt_devices[] = { HID_USB_DEVICE(USB_VENDOR_ID_ATMEL, USB_DEVICE_ID_ATMEL_MXT_DIGITIZER) }, +/* Baanto multitouch devices */ + { .driver_data = MT_CLS_DEFAULT, +HID_USB_DEVICE (USB_VENDOR_ID_BAANTO , + USB_DEVICE_ID_BAANTO_MT_190W2) }, /* Cando panels */ { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER, HID_USB_DEVICE(USB_VENDOR_ID_CANDO,
drivers/hid/usbhid/hid-quirks.c +1 -0
@@ -76,6 +76,7 @@ static const struct hid_blacklist { { USB_VENDOR_ID_PRODIGE, USB_DEVICE_ID_PRODIGE_CORDLESS, HID_QUIRK_NOGET }, { USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_PIXART_IMAGING_INC_OPTICAL_TOUCH_SCREEN, HID_QUIRK_NOGET }, { USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3008, HID_QUIRK_NOGET }, + { USB_VENDOR_ID_SENNHEISER, USB_DEVICE_ID_SENNHEISER_BTD500USB, HID_QUIRK_NOGET }, { USB_VENDOR_ID_SUN, USB_DEVICE_ID_RARITAN_KVM_DONGLE, HID_QUIRK_NOGET }, { USB_VENDOR_ID_SYMBOL, USB_DEVICE_ID_SYMBOL_SCANNER_1, HID_QUIRK_NOGET }, { USB_VENDOR_ID_SYMBOL, USB_DEVICE_ID_SYMBOL_SCANNER_2, HID_QUIRK_NOGET },
drivers/md/dm-raid1.c +2 -1
@@ -1084,6 +1084,7 @@ static int mirror_ctr(struct dm_target *ti, unsigned int argc, char **argv) ti->split_io =dm_rh_get_region_size (ms->rh); ti->num_flush_requests =1 ; ti->num_discard_requests =1 ; + ti->discard_zeroes_data_unsupported =1 ; ms->kmirrord_wq =alloc_workqueue ("kmirrord" ,WQ_NON_REENTRANT |WQ_MEM_RECLAIM ,0 );
@@ -1214,7 +1215,7 @@ static int mirror_end_io(struct dm_target *ti, struct bio *bio,* We need to dec pending if this was a write. */ if (rw ==WRITE ) { -if (!(bio->bi_rw &REQ_FLUSH )) +if (!(bio->bi_rw & (REQ_FLUSH |REQ_DISCARD )))dm_rh_dec (ms->rh, map_context->ll);return error; }
drivers/md/dm-region-hash.c +4 -1
@@ -404,6 +404,9 @@ void dm_rh_mark_nosync(struct dm_region_hash *rh, struct bio *bio)return ; } +if (bio->bi_rw &REQ_DISCARD ) +return ; +/* We must inform the log that the sync count has changed. */ log->type->set_region_sync (log, region,0 );
@@ -524,7 +527,7 @@ void dm_rh_inc_pending(struct dm_region_hash *rh, struct bio_list *bios)struct bio *bio;for (bio = bios->head; bio; bio = bio->bi_next) { -if (bio->bi_rw &REQ_FLUSH ) +if (bio->bi_rw & (REQ_FLUSH |REQ_DISCARD ))continue ;rh_inc (rh,dm_rh_bio_to_region (rh, bio)); }
drivers/md/dm-thin.c +5 -1
@@ -1240,7 +1240,10 @@ static void process_discard(struct thin_c *tc, struct bio *bio)cell_release_singleton (cell, bio);cell_release_singleton (cell2, bio); -remap_and_issue (tc, bio, lookup_result.block); +if ((!lookup_result.shared) && pool->pf.discard_passdown) +remap_and_issue (tc, bio, lookup_result.block); +else +bio_endio (bio,0 ); }break ;
@@ -2575,6 +2578,7 @@ static int thin_ctr(struct dm_target *ti, unsigned argc, char **argv)if (tc->pool->pf.discard_enabled) { ti->discards_supported =1 ; ti->num_discard_requests =1 ; + ti->discard_zeroes_data_unsupported =1 ; }dm_put (pool_md);
drivers/md/md.c +23 -13
@@ -3744,8 +3744,8 @@ array_state_show(struct mddev *mddev, char *page)return sprintf (page,"%s\n" , array_states[st]); } -static int do_md_stop (struct mddev * mddev,int ro,int is_open); -static int md_set_readonly (struct mddev * mddev,int is_open); +static int do_md_stop (struct mddev * mddev,int ro,struct block_device *bdev); +static int md_set_readonly (struct mddev * mddev,struct block_device *bdev);static int do_md_run (struct mddev * mddev);static int restart_array (struct mddev *mddev);
@@ -3761,14 +3761,14 @@ array_state_store(struct mddev *mddev, const char *buf, size_t len)/* stopping an active array */ if (atomic_read (&mddev->openers) >0 )return -EBUSY ; - err =do_md_stop (mddev,0 ,0 ); + err =do_md_stop (mddev,0 ,NULL );break ;case inactive:/* stopping an active array */ if (mddev->pers) {if (atomic_read (&mddev->openers) >0 )return -EBUSY ; - err =do_md_stop (mddev,2 ,0 ); + err =do_md_stop (mddev,2 ,NULL ); }else err =0 ;/* already inactive */ break ;
@@ -3776,7 +3776,7 @@ array_state_store(struct mddev *mddev, const char *buf, size_t len)break ;/* not supported yet */ case readonly:if (mddev->pers) - err =md_set_readonly (mddev,0 ); + err =md_set_readonly (mddev,NULL );else { mddev->ro =1 ;set_disk_ro (mddev->gendisk,1 );
@@ -3786,7 +3786,7 @@ array_state_store(struct mddev *mddev, const char *buf, size_t len)case read_auto:if (mddev->pers) {if (mddev->ro ==0 ) - err =md_set_readonly (mddev,0 ); + err =md_set_readonly (mddev,NULL );else if (mddev->ro ==1 ) err =restart_array (mddev);if (err ==0 ) {
@@ -5124,15 +5124,17 @@ void md_stop(struct mddev *mddev) }EXPORT_SYMBOL_GPL (md_stop); -static int md_set_readonly (struct mddev *mddev,int is_open) +static int md_set_readonly (struct mddev *mddev,struct block_device *bdev) {int err =0 ;mutex_lock (&mddev->open_mutex); -if (atomic_read (&mddev->openers) > is_open) { +if (atomic_read (&mddev->openers) > !!bdev) {printk ("md: %s still in use.\n" ,mdname (mddev)); err = -EBUSY ; goto out; } +if (bdev) +sync_blockdev (bdev);if (mddev->pers) {__md_stop_writes (mddev);
@@ -5154,18 +5156,26 @@ out:* 0 - completely stop and dis-assemble array * 2 - stop but do not disassemble array */ -static int do_md_stop (struct mddev * mddev,int mode,int is_open) +static int do_md_stop (struct mddev * mddev,int mode, +struct block_device *bdev) {struct gendisk *disk = mddev->gendisk;struct md_rdev *rdev;mutex_lock (&mddev->open_mutex); -if (atomic_read (&mddev->openers) > is_open || +if (atomic_read (&mddev->openers) > !!bdev || mddev->sysfs_active) {printk ("md: %s still in use.\n" ,mdname (mddev));mutex_unlock (&mddev->open_mutex);return -EBUSY ; } +if (bdev) +/* It is possible IO was issued on some other +* open file which was closed before we took ->open_mutex. +* As that was not the last close __blkdev_put will not +* have called sync_blockdev, so we must. +*/ +sync_blockdev (bdev);if (mddev->pers) {if (mddev->ro)
@@ -5239,7 +5249,7 @@ static void autorun_array(struct mddev *mddev) err =do_md_run (mddev);if (err) {printk (KERN_WARNING "md: do_md_run() returned %d\n" , err); -do_md_stop (mddev,0 ,0 ); +do_md_stop (mddev,0 ,NULL ); } }
@@ -6237,11 +6247,11 @@ static int md_ioctl(struct block_device *bdev, fmode_t mode, goto done_unlock;case STOP_ARRAY : - err =do_md_stop (mddev,0 ,1 ); + err =do_md_stop (mddev,0 , bdev); goto done_unlock;case STOP_ARRAY_RO : - err =md_set_readonly (mddev,1 ); + err =md_set_readonly (mddev, bdev); goto done_unlock;case BLKROSET :
drivers/md/raid1.c +8 -2
@@ -1821,8 +1821,14 @@ static void sync_request_write(struct mddev *mddev, struct r1bio *r1_bio)if (atomic_dec_and_test (&r1_bio->remaining)) {/* if we're here, all write(s) have completed, so clean up */ -md_done_sync (mddev, r1_bio->sectors,1 ); -put_buf (r1_bio); +int s = r1_bio->sectors; +if (test_bit (R1BIO_MadeGood, &r1_bio->state) || +test_bit (R1BIO_WriteError, &r1_bio->state)) +reschedule_retry (r1_bio); +else { +put_buf (r1_bio); +md_done_sync (mddev, s,1 ); + } } }
drivers/target/target_core_cdb.c +1 -1
@@ -1107,7 +1107,7 @@ int target_emulate_write_same(struct se_task *task)if (num_blocks !=0 ) range = num_blocks;else - range = (dev->transport->get_blocks (dev) - lba); + range = (dev->transport->get_blocks (dev) - lba) +1 ;pr_debug ("WRITE_SAME UNMAP: LBA: %llu Range: %llu\n" , (unsigned long long )lba, (unsigned long long )range);
drivers/target/target_core_pr.c +4 -3
@@ -2038,7 +2038,7 @@ static int __core_scsi3_write_aptpl_to_file(if (IS_ERR (file) || !file || !file->f_dentry) {pr_err ("filp_open(%s) for APTPL metadata" " failed\n" , path); -return (PTR_ERR (file) <0 ?PTR_ERR (file) : -ENOENT ); +return IS_ERR (file) ?PTR_ERR (file) : -ENOENT ; } iov[0 ].iov_base = &buf[0 ];
@@ -3826,7 +3826,7 @@ int target_scsi3_emulate_pr_out(struct se_task *task)" SPC-2 reservation is held, returning" " RESERVATION_CONFLICT\n"); cmd->scsi_sense_reason =TCM_RESERVATION_CONFLICT ; - ret =EINVAL ; + ret = -EINVAL ; goto out; }
@@ -3836,7 +3836,8 @@ int target_scsi3_emulate_pr_out(struct se_task *task)*/ if (!cmd->se_sess) { cmd->scsi_sense_reason =TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE ; -return -EINVAL ; + ret = -EINVAL ; + goto out; }if (cmd->data_length <24 ) {
drivers/target/tcm_fc/tfc_cmd.c +2 -0
@@ -240,6 +240,8 @@ u32 ft_get_task_tag(struct se_cmd *se_cmd) { struct ft_cmd *cmd = container_of(se_cmd, struct ft_cmd, se_cmd); +if (cmd->aborted) +return ~0 ;return fc_seq_exch (cmd->seq)->rxid; }
fs/cifs/cifssmb.c +30 -0
@@ -89,6 +89,32 @@ static struct {/* Forward declarations */ static void cifs_readv_complete (struct work_struct *work); +#ifdef CONFIG_HIGHMEM +/* +* On arches that have high memory, kmap address space is limited. By +* serializing the kmap operations on those arches, we ensure that we don't +* end up with a bunch of threads in writeback with partially mapped page +* arrays, stuck waiting for kmap to come back. That situation prevents +* progress and can deadlock. +*/ +static DEFINE_MUTEX (cifs_kmap_mutex); + +static inline void +cifs_kmap_lock (void ) +{ +mutex_lock (&cifs_kmap_mutex); +} + +static inline void +cifs_kmap_unlock (void ) +{ +mutex_unlock (&cifs_kmap_mutex); +} +#else /* !CONFIG_HIGHMEM */ +#define cifs_kmap_lock () do { ; } while(0) +#define cifs_kmap_unlock () do { ; } while(0) +#endif /* CONFIG_HIGHMEM */ +/* Mark as invalid, all open files on tree connections since they were closed when session to server was lost */ static void mark_open_files_invalid (struct cifs_tcon *pTcon)
@@ -1557,6 +1583,7 @@ cifs_readv_receive(struct TCP_Server_Info *server, struct mid_q_entry *mid) eof_index = eof ? (eof -1 ) >>PAGE_CACHE_SHIFT :0 ;cFYI (1 ,"eof=%llu eof_index=%lu" , eof, eof_index); +cifs_kmap_lock ();list_for_each_entry_safe (page, tpage, &rdata->pages, lru) {if (remaining >=PAGE_CACHE_SIZE ) {/* enough data to fill the page */
@@ -1606,6 +1633,7 @@ cifs_readv_receive(struct TCP_Server_Info *server, struct mid_q_entry *mid)page_cache_release (page); } } +cifs_kmap_unlock ();/* issue the read if we have any iovecs left to fill */ if (rdata->nr_iov >1 ) {
@@ -2194,7 +2222,9 @@ cifs_async_writev(struct cifs_writedata *wdata)* and set the iov_len properly for each one. It may also set * wdata->bytes too. */ +cifs_kmap_lock (); wdata->marshal_iov (iov, wdata); +cifs_kmap_unlock ();cFYI (1 ,"async write at %llu %u bytes" , wdata->offset, wdata->bytes);
fs/cifs/connect.c +18 -0
@@ -3348,6 +3348,18 @@ void cifs_setup_cifs_sb(struct smb_vol *pvolume_info,#define CIFS_DEFAULT_NON_POSIX_RSIZE (60 * 1024)#define CIFS_DEFAULT_NON_POSIX_WSIZE (65536) +/* +* On hosts with high memory, we can't currently support wsize/rsize that are +* larger than we can kmap at once. Cap the rsize/wsize at +* LAST_PKMAP * PAGE_SIZE. We'll never be able to fill a read or write request +* larger than that anyway. +*/ +#ifdef CONFIG_HIGHMEM +#define CIFS_KMAP_SIZE_LIMIT (LAST_PKMAP * PAGE_CACHE_SIZE) +#else /* CONFIG_HIGHMEM */ +#define CIFS_KMAP_SIZE_LIMIT (1<<24) +#endif /* CONFIG_HIGHMEM */ +static unsigned int cifs_negotiate_wsize (struct cifs_tcon *tcon,struct smb_vol *pvolume_info) {
@@ -3378,6 +3390,9 @@ cifs_negotiate_wsize(struct cifs_tcon *tcon, struct smb_vol *pvolume_info) wsize = min_t(unsigned int, wsize, server->maxBuf -sizeof (WRITE_REQ ) +4 ); +/* limit to the amount that we can kmap at once */ + wsize = min_t(unsigned int, wsize, CIFS_KMAP_SIZE_LIMIT); +/* hard limit of CIFS_MAX_WSIZE */ wsize = min_t(unsigned int, wsize, CIFS_MAX_WSIZE);
@@ -3419,6 +3434,9 @@ cifs_negotiate_rsize(struct cifs_tcon *tcon, struct smb_vol *pvolume_info)if (!(server->capabilities &CAP_LARGE_READ_X )) rsize = min_t(unsigned int, CIFSMaxBufSize, rsize); +/* limit to the amount that we can kmap at once */ + rsize = min_t(unsigned int, rsize, CIFS_KMAP_SIZE_LIMIT); +/* hard limit of CIFS_MAX_RSIZE */ rsize = min_t(unsigned int, rsize, CIFS_MAX_RSIZE);
fs/cifs/readdir.c +5 -2
@@ -86,9 +86,12 @@ cifs_readdir_lookup(struct dentry *parent, struct qstr *name, dentry =d_lookup (parent, name);if (dentry) { -/* FIXME: check for inode number changes? */ -if (dentry->d_inode !=NULL ) + inode = dentry->d_inode; +/* update inode in place if i_ino didn't change */ +if (inode &&CIFS_I (inode)->uniqueid == fattr->cf_uniqueid) { +cifs_fattr_to_inode (inode, fattr);return dentry; + }d_drop (dentry);dput (dentry); }
fs/exofs/ore.c +1 -7
@@ -735,13 +735,7 @@ static int _prepare_for_striping(struct ore_io_state *ios) out: ios->numdevs = devs_in_group; ios->pages_consumed = cur_pg; -if (unlikely (ret)) { -if (length == ios->length) -return ret; -else - ios->length -= length; - } -return 0 ; +return ret; }int ore_create (struct ore_io_state *ios)
fs/exofs/ore_raid.c +36 -31
133 lines not on this page · raw message
fs/ext4/ioctl.c +0 -1
@@ -261,7 +261,6 @@ group_extend_out: err =ext4_move_extents (filp, donor_filp, me.orig_start, me.donor_start, me.len, &me.moved_len);mnt_drop_write_file (filp); -mnt_drop_write (filp->f_path.mnt);if (copy_to_user ((struct move_extent __user *)arg, &me,sizeof (me)))
fs/nfs/objlayout/objio_osd.c +7 -2
@@ -453,7 +453,10 @@ int objio_read_pagelist(struct nfs_read_data *rdata) objios->ios->done = _read_done;dprintk ("%s: offset=0x%llx length=0x%x\n" , __func__, rdata->args.offset, rdata->args.count); -return ore_read (objios->ios); + ret =ore_read (objios->ios); +if (unlikely (ret)) +objio_free_result (&objios->oir); +return ret; }/*
@@ -537,8 +540,10 @@ int objio_write_pagelist(struct nfs_write_data *wdata, int how)dprintk ("%s: offset=0x%llx length=0x%x\n" , __func__, wdata->args.offset, wdata->args.count); ret =ore_write (objios->ios); -if (unlikely (ret)) +if (unlikely (ret)) { +objio_free_result (&objios->oir);return ret; + }if (objios->sync)_write_done (objios->ios, objios);
fs/ubifs/sb.c +6 -2
@@ -724,8 +724,12 @@ static int fixup_free_space(struct ubifs_info *c) lnum =ubifs_next_log_lnum (c, lnum); } -/* Fixup the current log head */ - err =fixup_leb (c, c->lhead_lnum, c->lhead_offs); +/* +* Fixup the log head which contains the only a CS node at the +* beginning. +*/ + err =fixup_leb (c, c->lhead_lnum, +ALIGN (UBIFS_CS_NODE_SZ , c->min_io_size));if (err) goto out;
kernel/time/ntp.c +6 -2
@@ -409,7 +409,9 @@ int second_overflow(unsigned long secs) time_state =TIME_DEL ;break ;case TIME_INS : -if (secs %86400 ==0 ) { +if (!(time_status &STA_INS )) + time_state =TIME_OK ; +else if (secs %86400 ==0 ) { leap =-1 ; time_state =TIME_OOP ; time_tai++;
@@ -418,7 +420,9 @@ int second_overflow(unsigned long secs) }break ;case TIME_DEL : -if ((secs +1 ) %86400 ==0 ) { +if (!(time_status &STA_DEL )) + time_state =TIME_OK ; +else if ((secs +1 ) %86400 ==0 ) { leap =1 ; time_tai--; time_state =TIME_WAIT ;
mm/vmscan.c +4 -1
@@ -3013,7 +3013,10 @@ static void kswapd_try_to_sleep(pg_data_t *pgdat, int order, int classzone_idx)* them before going back to sleep. */ set_pgdat_percpu_threshold (pgdat, calculate_normal_threshold); -schedule (); + +if (!kthread_should_stop ()) +schedule (); +set_pgdat_percpu_threshold (pgdat, calculate_pressure_threshold); }else {if (remaining)