diff options
Diffstat (limited to 'fs')
| -rw-r--r-- | fs/btrfs/ioctl.c | 7 | ||||
| -rw-r--r-- | fs/cifs/cifsencrypt.c | 54 | ||||
| -rw-r--r-- | fs/cifs/cifsfs.c | 10 | ||||
| -rw-r--r-- | fs/cifs/cifssmb.c | 3 | ||||
| -rw-r--r-- | fs/cifs/connect.c | 4 | ||||
| -rw-r--r-- | fs/ext3/inode.c | 4 | ||||
| -rw-r--r-- | fs/ext3/namei.c | 3 | ||||
| -rw-r--r-- | fs/ext4/inode.c | 4 | ||||
| -rw-r--r-- | fs/ext4/namei.c | 3 | ||||
| -rw-r--r-- | fs/gfs2/log.c | 4 | ||||
| -rw-r--r-- | fs/gfs2/meta_io.c | 6 | ||||
| -rw-r--r-- | fs/gfs2/ops_fstype.c | 2 | ||||
| -rw-r--r-- | fs/gfs2/quota.c | 2 | ||||
| -rw-r--r-- | fs/namei.c | 8 | ||||
| -rw-r--r-- | fs/namespace.c | 2 | ||||
| -rw-r--r-- | fs/nfs/super.c | 2 | ||||
| -rw-r--r-- | fs/proc/task_mmu.c | 80 | ||||
| -rw-r--r-- | fs/quota/quota.c | 2 | ||||
| -rw-r--r-- | fs/stat.c | 2 |
19 files changed, 101 insertions, 101 deletions
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index d11fd28efa6a..538f65a79ec5 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c | |||
| @@ -2328,7 +2328,12 @@ static noinline long btrfs_ioctl_clone(struct file *file, unsigned long srcfd, | |||
| 2328 | else | 2328 | else |
| 2329 | new_key.offset = destoff; | 2329 | new_key.offset = destoff; |
| 2330 | 2330 | ||
| 2331 | trans = btrfs_start_transaction(root, 1); | 2331 | /* |
| 2332 | * 1 - adjusting old extent (we may have to split it) | ||
| 2333 | * 1 - add new extent | ||
| 2334 | * 1 - inode update | ||
| 2335 | */ | ||
| 2336 | trans = btrfs_start_transaction(root, 3); | ||
| 2332 | if (IS_ERR(trans)) { | 2337 | if (IS_ERR(trans)) { |
| 2333 | ret = PTR_ERR(trans); | 2338 | ret = PTR_ERR(trans); |
| 2334 | goto out; | 2339 | goto out; |
diff --git a/fs/cifs/cifsencrypt.c b/fs/cifs/cifsencrypt.c index e76bfeb68267..30acd22147e1 100644 --- a/fs/cifs/cifsencrypt.c +++ b/fs/cifs/cifsencrypt.c | |||
| @@ -351,9 +351,7 @@ static int | |||
| 351 | build_avpair_blob(struct cifs_ses *ses, const struct nls_table *nls_cp) | 351 | build_avpair_blob(struct cifs_ses *ses, const struct nls_table *nls_cp) |
| 352 | { | 352 | { |
| 353 | unsigned int dlen; | 353 | unsigned int dlen; |
| 354 | unsigned int wlen; | 354 | unsigned int size = 2 * sizeof(struct ntlmssp2_name); |
| 355 | unsigned int size = 6 * sizeof(struct ntlmssp2_name); | ||
| 356 | __le64 curtime; | ||
| 357 | char *defdmname = "WORKGROUP"; | 355 | char *defdmname = "WORKGROUP"; |
| 358 | unsigned char *blobptr; | 356 | unsigned char *blobptr; |
| 359 | struct ntlmssp2_name *attrptr; | 357 | struct ntlmssp2_name *attrptr; |
| @@ -365,15 +363,14 @@ build_avpair_blob(struct cifs_ses *ses, const struct nls_table *nls_cp) | |||
| 365 | } | 363 | } |
| 366 | 364 | ||
| 367 | dlen = strlen(ses->domainName); | 365 | dlen = strlen(ses->domainName); |
| 368 | wlen = strlen(ses->server->hostname); | ||
| 369 | 366 | ||
| 370 | /* The length of this blob is a size which is | 367 | /* |
| 371 | * six times the size of a structure which holds name/size + | 368 | * The length of this blob is two times the size of a |
| 372 | * two times the unicode length of a domain name + | 369 | * structure (av pair) which holds name/size |
| 373 | * two times the unicode length of a server name + | 370 | * ( for NTLMSSP_AV_NB_DOMAIN_NAME followed by NTLMSSP_AV_EOL ) + |
| 374 | * size of a timestamp (which is 8 bytes). | 371 | * unicode length of a netbios domain name |
| 375 | */ | 372 | */ |
| 376 | ses->auth_key.len = size + 2 * (2 * dlen) + 2 * (2 * wlen) + 8; | 373 | ses->auth_key.len = size + 2 * dlen; |
| 377 | ses->auth_key.response = kzalloc(ses->auth_key.len, GFP_KERNEL); | 374 | ses->auth_key.response = kzalloc(ses->auth_key.len, GFP_KERNEL); |
| 378 | if (!ses->auth_key.response) { | 375 | if (!ses->auth_key.response) { |
| 379 | ses->auth_key.len = 0; | 376 | ses->auth_key.len = 0; |
| @@ -384,44 +381,15 @@ build_avpair_blob(struct cifs_ses *ses, const struct nls_table *nls_cp) | |||
| 384 | blobptr = ses->auth_key.response; | 381 | blobptr = ses->auth_key.response; |
| 385 | attrptr = (struct ntlmssp2_name *) blobptr; | 382 | attrptr = (struct ntlmssp2_name *) blobptr; |
| 386 | 383 | ||
| 384 | /* | ||
| 385 | * As defined in MS-NTLM 3.3.2, just this av pair field | ||
| 386 | * is sufficient as part of the temp | ||
| 387 | */ | ||
| 387 | attrptr->type = cpu_to_le16(NTLMSSP_AV_NB_DOMAIN_NAME); | 388 | attrptr->type = cpu_to_le16(NTLMSSP_AV_NB_DOMAIN_NAME); |
| 388 | attrptr->length = cpu_to_le16(2 * dlen); | 389 | attrptr->length = cpu_to_le16(2 * dlen); |
| 389 | blobptr = (unsigned char *)attrptr + sizeof(struct ntlmssp2_name); | 390 | blobptr = (unsigned char *)attrptr + sizeof(struct ntlmssp2_name); |
| 390 | cifs_strtoUCS((__le16 *)blobptr, ses->domainName, dlen, nls_cp); | 391 | cifs_strtoUCS((__le16 *)blobptr, ses->domainName, dlen, nls_cp); |
| 391 | 392 | ||
| 392 | blobptr += 2 * dlen; | ||
| 393 | attrptr = (struct ntlmssp2_name *) blobptr; | ||
| 394 | |||
| 395 | attrptr->type = cpu_to_le16(NTLMSSP_AV_NB_COMPUTER_NAME); | ||
| 396 | attrptr->length = cpu_to_le16(2 * wlen); | ||
| 397 | blobptr = (unsigned char *)attrptr + sizeof(struct ntlmssp2_name); | ||
| 398 | cifs_strtoUCS((__le16 *)blobptr, ses->server->hostname, wlen, nls_cp); | ||
| 399 | |||
| 400 | blobptr += 2 * wlen; | ||
| 401 | attrptr = (struct ntlmssp2_name *) blobptr; | ||
| 402 | |||
| 403 | attrptr->type = cpu_to_le16(NTLMSSP_AV_DNS_DOMAIN_NAME); | ||
| 404 | attrptr->length = cpu_to_le16(2 * dlen); | ||
| 405 | blobptr = (unsigned char *)attrptr + sizeof(struct ntlmssp2_name); | ||
| 406 | cifs_strtoUCS((__le16 *)blobptr, ses->domainName, dlen, nls_cp); | ||
| 407 | |||
| 408 | blobptr += 2 * dlen; | ||
| 409 | attrptr = (struct ntlmssp2_name *) blobptr; | ||
| 410 | |||
| 411 | attrptr->type = cpu_to_le16(NTLMSSP_AV_DNS_COMPUTER_NAME); | ||
| 412 | attrptr->length = cpu_to_le16(2 * wlen); | ||
| 413 | blobptr = (unsigned char *)attrptr + sizeof(struct ntlmssp2_name); | ||
| 414 | cifs_strtoUCS((__le16 *)blobptr, ses->server->hostname, wlen, nls_cp); | ||
| 415 | |||
| 416 | blobptr += 2 * wlen; | ||
| 417 | attrptr = (struct ntlmssp2_name *) blobptr; | ||
| 418 | |||
| 419 | attrptr->type = cpu_to_le16(NTLMSSP_AV_TIMESTAMP); | ||
| 420 | attrptr->length = cpu_to_le16(sizeof(__le64)); | ||
| 421 | blobptr = (unsigned char *)attrptr + sizeof(struct ntlmssp2_name); | ||
| 422 | curtime = cpu_to_le64(cifs_UnixTimeToNT(CURRENT_TIME)); | ||
| 423 | memcpy(blobptr, &curtime, sizeof(__le64)); | ||
| 424 | |||
| 425 | return 0; | 393 | return 0; |
| 426 | } | 394 | } |
| 427 | 395 | ||
diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c index f93eb948d071..54b8f1e7da94 100644 --- a/fs/cifs/cifsfs.c +++ b/fs/cifs/cifsfs.c | |||
| @@ -548,6 +548,12 @@ cifs_get_root(struct smb_vol *vol, struct super_block *sb) | |||
| 548 | struct inode *dir = dentry->d_inode; | 548 | struct inode *dir = dentry->d_inode; |
| 549 | struct dentry *child; | 549 | struct dentry *child; |
| 550 | 550 | ||
| 551 | if (!dir) { | ||
| 552 | dput(dentry); | ||
| 553 | dentry = ERR_PTR(-ENOENT); | ||
| 554 | break; | ||
| 555 | } | ||
| 556 | |||
| 551 | /* skip separators */ | 557 | /* skip separators */ |
| 552 | while (*s == sep) | 558 | while (*s == sep) |
| 553 | s++; | 559 | s++; |
| @@ -563,10 +569,6 @@ cifs_get_root(struct smb_vol *vol, struct super_block *sb) | |||
| 563 | mutex_unlock(&dir->i_mutex); | 569 | mutex_unlock(&dir->i_mutex); |
| 564 | dput(dentry); | 570 | dput(dentry); |
| 565 | dentry = child; | 571 | dentry = child; |
| 566 | if (!dentry->d_inode) { | ||
| 567 | dput(dentry); | ||
| 568 | dentry = ERR_PTR(-ENOENT); | ||
| 569 | } | ||
| 570 | } while (!IS_ERR(dentry)); | 572 | } while (!IS_ERR(dentry)); |
| 571 | _FreeXid(xid); | 573 | _FreeXid(xid); |
| 572 | kfree(full_path); | 574 | kfree(full_path); |
diff --git a/fs/cifs/cifssmb.c b/fs/cifs/cifssmb.c index aac37d99a487..a80f7bd97b90 100644 --- a/fs/cifs/cifssmb.c +++ b/fs/cifs/cifssmb.c | |||
| @@ -4079,7 +4079,8 @@ int CIFSFindNext(const int xid, struct cifs_tcon *tcon, | |||
| 4079 | T2_FNEXT_RSP_PARMS *parms; | 4079 | T2_FNEXT_RSP_PARMS *parms; |
| 4080 | char *response_data; | 4080 | char *response_data; |
| 4081 | int rc = 0; | 4081 | int rc = 0; |
| 4082 | int bytes_returned, name_len; | 4082 | int bytes_returned; |
| 4083 | unsigned int name_len; | ||
| 4083 | __u16 params, byte_count; | 4084 | __u16 params, byte_count; |
| 4084 | 4085 | ||
| 4085 | cFYI(1, "In FindNext"); | 4086 | cFYI(1, "In FindNext"); |
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c index 633c246b6775..f4af4cc37500 100644 --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c | |||
| @@ -1298,7 +1298,7 @@ cifs_parse_mount_options(const char *mountdata, const char *devname, | |||
| 1298 | /* ignore */ | 1298 | /* ignore */ |
| 1299 | } else if (strnicmp(data, "guest", 5) == 0) { | 1299 | } else if (strnicmp(data, "guest", 5) == 0) { |
| 1300 | /* ignore */ | 1300 | /* ignore */ |
| 1301 | } else if (strnicmp(data, "rw", 2) == 0) { | 1301 | } else if (strnicmp(data, "rw", 2) == 0 && strlen(data) == 2) { |
| 1302 | /* ignore */ | 1302 | /* ignore */ |
| 1303 | } else if (strnicmp(data, "ro", 2) == 0) { | 1303 | } else if (strnicmp(data, "ro", 2) == 0) { |
| 1304 | /* ignore */ | 1304 | /* ignore */ |
| @@ -1401,7 +1401,7 @@ cifs_parse_mount_options(const char *mountdata, const char *devname, | |||
| 1401 | vol->server_ino = 1; | 1401 | vol->server_ino = 1; |
| 1402 | } else if (strnicmp(data, "noserverino", 9) == 0) { | 1402 | } else if (strnicmp(data, "noserverino", 9) == 0) { |
| 1403 | vol->server_ino = 0; | 1403 | vol->server_ino = 0; |
| 1404 | } else if (strnicmp(data, "rwpidforward", 4) == 0) { | 1404 | } else if (strnicmp(data, "rwpidforward", 12) == 0) { |
| 1405 | vol->rwpidforward = 1; | 1405 | vol->rwpidforward = 1; |
| 1406 | } else if (strnicmp(data, "cifsacl", 7) == 0) { | 1406 | } else if (strnicmp(data, "cifsacl", 7) == 0) { |
| 1407 | vol->cifs_acl = 1; | 1407 | vol->cifs_acl = 1; |
diff --git a/fs/ext3/inode.c b/fs/ext3/inode.c index 04da6acde85d..12661e1deedd 100644 --- a/fs/ext3/inode.c +++ b/fs/ext3/inode.c | |||
| @@ -1134,7 +1134,7 @@ struct buffer_head *ext3_bread(handle_t *handle, struct inode *inode, | |||
| 1134 | return bh; | 1134 | return bh; |
| 1135 | if (buffer_uptodate(bh)) | 1135 | if (buffer_uptodate(bh)) |
| 1136 | return bh; | 1136 | return bh; |
| 1137 | ll_rw_block(READ_META, 1, &bh); | 1137 | ll_rw_block(READ | REQ_META | REQ_PRIO, 1, &bh); |
| 1138 | wait_on_buffer(bh); | 1138 | wait_on_buffer(bh); |
| 1139 | if (buffer_uptodate(bh)) | 1139 | if (buffer_uptodate(bh)) |
| 1140 | return bh; | 1140 | return bh; |
| @@ -2807,7 +2807,7 @@ make_io: | |||
| 2807 | trace_ext3_load_inode(inode); | 2807 | trace_ext3_load_inode(inode); |
| 2808 | get_bh(bh); | 2808 | get_bh(bh); |
| 2809 | bh->b_end_io = end_buffer_read_sync; | 2809 | bh->b_end_io = end_buffer_read_sync; |
| 2810 | submit_bh(READ_META, bh); | 2810 | submit_bh(READ | REQ_META | REQ_PRIO, bh); |
| 2811 | wait_on_buffer(bh); | 2811 | wait_on_buffer(bh); |
| 2812 | if (!buffer_uptodate(bh)) { | 2812 | if (!buffer_uptodate(bh)) { |
| 2813 | ext3_error(inode->i_sb, "ext3_get_inode_loc", | 2813 | ext3_error(inode->i_sb, "ext3_get_inode_loc", |
diff --git a/fs/ext3/namei.c b/fs/ext3/namei.c index 5571708b6a58..0629e09f6511 100644 --- a/fs/ext3/namei.c +++ b/fs/ext3/namei.c | |||
| @@ -922,7 +922,8 @@ restart: | |||
| 922 | bh = ext3_getblk(NULL, dir, b++, 0, &err); | 922 | bh = ext3_getblk(NULL, dir, b++, 0, &err); |
| 923 | bh_use[ra_max] = bh; | 923 | bh_use[ra_max] = bh; |
| 924 | if (bh) | 924 | if (bh) |
| 925 | ll_rw_block(READ_META, 1, &bh); | 925 | ll_rw_block(READ | REQ_META | REQ_PRIO, |
| 926 | 1, &bh); | ||
| 926 | } | 927 | } |
| 927 | } | 928 | } |
| 928 | if ((bh = bh_use[ra_ptr++]) == NULL) | 929 | if ((bh = bh_use[ra_ptr++]) == NULL) |
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 18d2558b7624..986e2388f031 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c | |||
| @@ -647,7 +647,7 @@ struct buffer_head *ext4_bread(handle_t *handle, struct inode *inode, | |||
| 647 | return bh; | 647 | return bh; |
| 648 | if (buffer_uptodate(bh)) | 648 | if (buffer_uptodate(bh)) |
| 649 | return bh; | 649 | return bh; |
| 650 | ll_rw_block(READ_META, 1, &bh); | 650 | ll_rw_block(READ | REQ_META | REQ_PRIO, 1, &bh); |
| 651 | wait_on_buffer(bh); | 651 | wait_on_buffer(bh); |
| 652 | if (buffer_uptodate(bh)) | 652 | if (buffer_uptodate(bh)) |
| 653 | return bh; | 653 | return bh; |
| @@ -3298,7 +3298,7 @@ make_io: | |||
| 3298 | trace_ext4_load_inode(inode); | 3298 | trace_ext4_load_inode(inode); |
| 3299 | get_bh(bh); | 3299 | get_bh(bh); |
| 3300 | bh->b_end_io = end_buffer_read_sync; | 3300 | bh->b_end_io = end_buffer_read_sync; |
| 3301 | submit_bh(READ_META, bh); | 3301 | submit_bh(READ | REQ_META | REQ_PRIO, bh); |
| 3302 | wait_on_buffer(bh); | 3302 | wait_on_buffer(bh); |
| 3303 | if (!buffer_uptodate(bh)) { | 3303 | if (!buffer_uptodate(bh)) { |
| 3304 | EXT4_ERROR_INODE_BLOCK(inode, block, | 3304 | EXT4_ERROR_INODE_BLOCK(inode, block, |
diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c index f8068c7bae9f..1c924faeb6c8 100644 --- a/fs/ext4/namei.c +++ b/fs/ext4/namei.c | |||
| @@ -922,7 +922,8 @@ restart: | |||
| 922 | bh = ext4_getblk(NULL, dir, b++, 0, &err); | 922 | bh = ext4_getblk(NULL, dir, b++, 0, &err); |
| 923 | bh_use[ra_max] = bh; | 923 | bh_use[ra_max] = bh; |
| 924 | if (bh) | 924 | if (bh) |
| 925 | ll_rw_block(READ_META, 1, &bh); | 925 | ll_rw_block(READ | REQ_META | REQ_PRIO, |
| 926 | 1, &bh); | ||
| 926 | } | 927 | } |
| 927 | } | 928 | } |
| 928 | if ((bh = bh_use[ra_ptr++]) == NULL) | 929 | if ((bh = bh_use[ra_ptr++]) == NULL) |
diff --git a/fs/gfs2/log.c b/fs/gfs2/log.c index 85c62923ee29..598646434362 100644 --- a/fs/gfs2/log.c +++ b/fs/gfs2/log.c | |||
| @@ -624,9 +624,9 @@ static void log_write_header(struct gfs2_sbd *sdp, u32 flags, int pull) | |||
| 624 | bh->b_end_io = end_buffer_write_sync; | 624 | bh->b_end_io = end_buffer_write_sync; |
| 625 | get_bh(bh); | 625 | get_bh(bh); |
| 626 | if (test_bit(SDF_NOBARRIERS, &sdp->sd_flags)) | 626 | if (test_bit(SDF_NOBARRIERS, &sdp->sd_flags)) |
| 627 | submit_bh(WRITE_SYNC | REQ_META, bh); | 627 | submit_bh(WRITE_SYNC | REQ_META | REQ_PRIO, bh); |
| 628 | else | 628 | else |
| 629 | submit_bh(WRITE_FLUSH_FUA | REQ_META, bh); | 629 | submit_bh(WRITE_FLUSH_FUA | REQ_META | REQ_PRIO, bh); |
| 630 | wait_on_buffer(bh); | 630 | wait_on_buffer(bh); |
| 631 | 631 | ||
| 632 | if (!buffer_uptodate(bh)) | 632 | if (!buffer_uptodate(bh)) |
diff --git a/fs/gfs2/meta_io.c b/fs/gfs2/meta_io.c index 747238cd9f96..be29858900f6 100644 --- a/fs/gfs2/meta_io.c +++ b/fs/gfs2/meta_io.c | |||
| @@ -37,7 +37,7 @@ static int gfs2_aspace_writepage(struct page *page, struct writeback_control *wb | |||
| 37 | { | 37 | { |
| 38 | struct buffer_head *bh, *head; | 38 | struct buffer_head *bh, *head; |
| 39 | int nr_underway = 0; | 39 | int nr_underway = 0; |
| 40 | int write_op = REQ_META | | 40 | int write_op = REQ_META | REQ_PRIO | |
| 41 | (wbc->sync_mode == WB_SYNC_ALL ? WRITE_SYNC : WRITE); | 41 | (wbc->sync_mode == WB_SYNC_ALL ? WRITE_SYNC : WRITE); |
| 42 | 42 | ||
| 43 | BUG_ON(!PageLocked(page)); | 43 | BUG_ON(!PageLocked(page)); |
| @@ -225,7 +225,7 @@ int gfs2_meta_read(struct gfs2_glock *gl, u64 blkno, int flags, | |||
| 225 | } | 225 | } |
| 226 | bh->b_end_io = end_buffer_read_sync; | 226 | bh->b_end_io = end_buffer_read_sync; |
| 227 | get_bh(bh); | 227 | get_bh(bh); |
| 228 | submit_bh(READ_SYNC | REQ_META, bh); | 228 | submit_bh(READ_SYNC | REQ_META | REQ_PRIO, bh); |
| 229 | if (!(flags & DIO_WAIT)) | 229 | if (!(flags & DIO_WAIT)) |
| 230 | return 0; | 230 | return 0; |
| 231 | 231 | ||
| @@ -435,7 +435,7 @@ struct buffer_head *gfs2_meta_ra(struct gfs2_glock *gl, u64 dblock, u32 extlen) | |||
| 435 | if (buffer_uptodate(first_bh)) | 435 | if (buffer_uptodate(first_bh)) |
| 436 | goto out; | 436 | goto out; |
| 437 | if (!buffer_locked(first_bh)) | 437 | if (!buffer_locked(first_bh)) |
| 438 | ll_rw_block(READ_SYNC | REQ_META, 1, &first_bh); | 438 | ll_rw_block(READ_SYNC | REQ_META | REQ_PRIO, 1, &first_bh); |
| 439 | 439 | ||
| 440 | dblock++; | 440 | dblock++; |
| 441 | extlen--; | 441 | extlen--; |
diff --git a/fs/gfs2/ops_fstype.c b/fs/gfs2/ops_fstype.c index 3bc073a4cf82..079587e53849 100644 --- a/fs/gfs2/ops_fstype.c +++ b/fs/gfs2/ops_fstype.c | |||
| @@ -224,7 +224,7 @@ static int gfs2_read_super(struct gfs2_sbd *sdp, sector_t sector, int silent) | |||
| 224 | 224 | ||
| 225 | bio->bi_end_io = end_bio_io_page; | 225 | bio->bi_end_io = end_bio_io_page; |
| 226 | bio->bi_private = page; | 226 | bio->bi_private = page; |
| 227 | submit_bio(READ_SYNC | REQ_META, bio); | 227 | submit_bio(READ_SYNC | REQ_META | REQ_PRIO, bio); |
| 228 | wait_on_page_locked(page); | 228 | wait_on_page_locked(page); |
| 229 | bio_put(bio); | 229 | bio_put(bio); |
| 230 | if (!PageUptodate(page)) { | 230 | if (!PageUptodate(page)) { |
diff --git a/fs/gfs2/quota.c b/fs/gfs2/quota.c index 42e8d23bc047..0e8bb13381e4 100644 --- a/fs/gfs2/quota.c +++ b/fs/gfs2/quota.c | |||
| @@ -709,7 +709,7 @@ get_a_page: | |||
| 709 | set_buffer_uptodate(bh); | 709 | set_buffer_uptodate(bh); |
| 710 | 710 | ||
| 711 | if (!buffer_uptodate(bh)) { | 711 | if (!buffer_uptodate(bh)) { |
| 712 | ll_rw_block(READ_META, 1, &bh); | 712 | ll_rw_block(READ | REQ_META | REQ_PRIO, 1, &bh); |
| 713 | wait_on_buffer(bh); | 713 | wait_on_buffer(bh); |
| 714 | if (!buffer_uptodate(bh)) | 714 | if (!buffer_uptodate(bh)) |
| 715 | goto unlock_out; | 715 | goto unlock_out; |
diff --git a/fs/namei.c b/fs/namei.c index f4788365ea22..0b3138de2a3b 100644 --- a/fs/namei.c +++ b/fs/namei.c | |||
| @@ -721,12 +721,6 @@ static int follow_automount(struct path *path, unsigned flags, | |||
| 721 | if (!path->dentry->d_op || !path->dentry->d_op->d_automount) | 721 | if (!path->dentry->d_op || !path->dentry->d_op->d_automount) |
| 722 | return -EREMOTE; | 722 | return -EREMOTE; |
| 723 | 723 | ||
| 724 | /* We don't want to mount if someone supplied AT_NO_AUTOMOUNT | ||
| 725 | * and this is the terminal part of the path. | ||
| 726 | */ | ||
| 727 | if ((flags & LOOKUP_NO_AUTOMOUNT) && !(flags & LOOKUP_PARENT)) | ||
| 728 | return -EISDIR; /* we actually want to stop here */ | ||
| 729 | |||
| 730 | /* We don't want to mount if someone's just doing a stat - | 724 | /* We don't want to mount if someone's just doing a stat - |
| 731 | * unless they're stat'ing a directory and appended a '/' to | 725 | * unless they're stat'ing a directory and appended a '/' to |
| 732 | * the name. | 726 | * the name. |
| @@ -739,7 +733,7 @@ static int follow_automount(struct path *path, unsigned flags, | |||
| 739 | * of the daemon to instantiate them before they can be used. | 733 | * of the daemon to instantiate them before they can be used. |
| 740 | */ | 734 | */ |
| 741 | if (!(flags & (LOOKUP_PARENT | LOOKUP_DIRECTORY | | 735 | if (!(flags & (LOOKUP_PARENT | LOOKUP_DIRECTORY | |
| 742 | LOOKUP_OPEN | LOOKUP_CREATE)) && | 736 | LOOKUP_OPEN | LOOKUP_CREATE | LOOKUP_AUTOMOUNT)) && |
| 743 | path->dentry->d_inode) | 737 | path->dentry->d_inode) |
| 744 | return -EISDIR; | 738 | return -EISDIR; |
| 745 | 739 | ||
diff --git a/fs/namespace.c b/fs/namespace.c index 22bfe8273c68..b4febb29d3bb 100644 --- a/fs/namespace.c +++ b/fs/namespace.c | |||
| @@ -1757,7 +1757,7 @@ static int do_loopback(struct path *path, char *old_name, | |||
| 1757 | return err; | 1757 | return err; |
| 1758 | if (!old_name || !*old_name) | 1758 | if (!old_name || !*old_name) |
| 1759 | return -EINVAL; | 1759 | return -EINVAL; |
| 1760 | err = kern_path(old_name, LOOKUP_FOLLOW, &old_path); | 1760 | err = kern_path(old_name, LOOKUP_FOLLOW|LOOKUP_AUTOMOUNT, &old_path); |
| 1761 | if (err) | 1761 | if (err) |
| 1762 | return err; | 1762 | return err; |
| 1763 | 1763 | ||
diff --git a/fs/nfs/super.c b/fs/nfs/super.c index 9b7dd7013b15..5b19b6aabe18 100644 --- a/fs/nfs/super.c +++ b/fs/nfs/super.c | |||
| @@ -2798,7 +2798,7 @@ static struct dentry *nfs_follow_remote_path(struct vfsmount *root_mnt, | |||
| 2798 | goto out_put_mnt_ns; | 2798 | goto out_put_mnt_ns; |
| 2799 | 2799 | ||
| 2800 | ret = vfs_path_lookup(root_mnt->mnt_root, root_mnt, | 2800 | ret = vfs_path_lookup(root_mnt->mnt_root, root_mnt, |
| 2801 | export_path, LOOKUP_FOLLOW, &path); | 2801 | export_path, LOOKUP_FOLLOW|LOOKUP_AUTOMOUNT, &path); |
| 2802 | 2802 | ||
| 2803 | nfs_referral_loop_unprotect(); | 2803 | nfs_referral_loop_unprotect(); |
| 2804 | put_mnt_ns(ns_private); | 2804 | put_mnt_ns(ns_private); |
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index 25b6a887adb9..5afaa58a8630 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c | |||
| @@ -877,30 +877,54 @@ struct numa_maps_private { | |||
| 877 | struct numa_maps md; | 877 | struct numa_maps md; |
| 878 | }; | 878 | }; |
| 879 | 879 | ||
| 880 | static void gather_stats(struct page *page, struct numa_maps *md, int pte_dirty) | 880 | static void gather_stats(struct page *page, struct numa_maps *md, int pte_dirty, |
| 881 | unsigned long nr_pages) | ||
| 881 | { | 882 | { |
| 882 | int count = page_mapcount(page); | 883 | int count = page_mapcount(page); |
| 883 | 884 | ||
| 884 | md->pages++; | 885 | md->pages += nr_pages; |
| 885 | if (pte_dirty || PageDirty(page)) | 886 | if (pte_dirty || PageDirty(page)) |
| 886 | md->dirty++; | 887 | md->dirty += nr_pages; |
| 887 | 888 | ||
| 888 | if (PageSwapCache(page)) | 889 | if (PageSwapCache(page)) |
| 889 | md->swapcache++; | 890 | md->swapcache += nr_pages; |
| 890 | 891 | ||
| 891 | if (PageActive(page) || PageUnevictable(page)) | 892 | if (PageActive(page) || PageUnevictable(page)) |
| 892 | md->active++; | 893 | md->active += nr_pages; |
| 893 | 894 | ||
| 894 | if (PageWriteback(page)) | 895 | if (PageWriteback(page)) |
| 895 | md->writeback++; | 896 | md->writeback += nr_pages; |
| 896 | 897 | ||
| 897 | if (PageAnon(page)) | 898 | if (PageAnon(page)) |
| 898 | md->anon++; | 899 | md->anon += nr_pages; |
| 899 | 900 | ||
| 900 | if (count > md->mapcount_max) | 901 | if (count > md->mapcount_max) |
| 901 | md->mapcount_max = count; | 902 | md->mapcount_max = count; |
| 902 | 903 | ||
| 903 | md->node[page_to_nid(page)]++; | 904 | md->node[page_to_nid(page)] += nr_pages; |
| 905 | } | ||
| 906 | |||
| 907 | static struct page *can_gather_numa_stats(pte_t pte, struct vm_area_struct *vma, | ||
| 908 | unsigned long addr) | ||
| 909 | { | ||
| 910 | struct page *page; | ||
| 911 | int nid; | ||
| 912 | |||
| 913 | if (!pte_present(pte)) | ||
| 914 | return NULL; | ||
| 915 | |||
| 916 | page = vm_normal_page(vma, addr, pte); | ||
| 917 | if (!page) | ||
| 918 | return NULL; | ||
| 919 | |||
| 920 | if (PageReserved(page)) | ||
| 921 | return NULL; | ||
| 922 | |||
| 923 | nid = page_to_nid(page); | ||
| 924 | if (!node_isset(nid, node_states[N_HIGH_MEMORY])) | ||
| 925 | return NULL; | ||
| 926 | |||
| 927 | return page; | ||
| 904 | } | 928 | } |
| 905 | 929 | ||
| 906 | static int gather_pte_stats(pmd_t *pmd, unsigned long addr, | 930 | static int gather_pte_stats(pmd_t *pmd, unsigned long addr, |
| @@ -912,26 +936,32 @@ static int gather_pte_stats(pmd_t *pmd, unsigned long addr, | |||
| 912 | pte_t *pte; | 936 | pte_t *pte; |
| 913 | 937 | ||
| 914 | md = walk->private; | 938 | md = walk->private; |
| 915 | orig_pte = pte = pte_offset_map_lock(walk->mm, pmd, addr, &ptl); | 939 | spin_lock(&walk->mm->page_table_lock); |
| 916 | do { | 940 | if (pmd_trans_huge(*pmd)) { |
| 917 | struct page *page; | 941 | if (pmd_trans_splitting(*pmd)) { |
| 918 | int nid; | 942 | spin_unlock(&walk->mm->page_table_lock); |
| 943 | wait_split_huge_page(md->vma->anon_vma, pmd); | ||
| 944 | } else { | ||
| 945 | pte_t huge_pte = *(pte_t *)pmd; | ||
| 946 | struct page *page; | ||
| 919 | 947 | ||
| 920 | if (!pte_present(*pte)) | 948 | page = can_gather_numa_stats(huge_pte, md->vma, addr); |
| 921 | continue; | 949 | if (page) |
| 950 | gather_stats(page, md, pte_dirty(huge_pte), | ||
| 951 | HPAGE_PMD_SIZE/PAGE_SIZE); | ||
| 952 | spin_unlock(&walk->mm->page_table_lock); | ||
| 953 | return 0; | ||
| 954 | } | ||
| 955 | } else { | ||
| 956 | spin_unlock(&walk->mm->page_table_lock); | ||
| 957 | } | ||
| 922 | 958 | ||
| 923 | page = vm_normal_page(md->vma, addr, *pte); | 959 | orig_pte = pte = pte_offset_map_lock(walk->mm, pmd, addr, &ptl); |
| 960 | do { | ||
| 961 | struct page *page = can_gather_numa_stats(*pte, md->vma, addr); | ||
| 924 | if (!page) | 962 | if (!page) |
| 925 | continue; | 963 | continue; |
| 926 | 964 | gather_stats(page, md, pte_dirty(*pte), 1); | |
| 927 | if (PageReserved(page)) | ||
| 928 | continue; | ||
| 929 | |||
| 930 | nid = page_to_nid(page); | ||
| 931 | if (!node_isset(nid, node_states[N_HIGH_MEMORY])) | ||
| 932 | continue; | ||
| 933 | |||
| 934 | gather_stats(page, md, pte_dirty(*pte)); | ||
| 935 | 965 | ||
| 936 | } while (pte++, addr += PAGE_SIZE, addr != end); | 966 | } while (pte++, addr += PAGE_SIZE, addr != end); |
| 937 | pte_unmap_unlock(orig_pte, ptl); | 967 | pte_unmap_unlock(orig_pte, ptl); |
| @@ -952,7 +982,7 @@ static int gather_hugetbl_stats(pte_t *pte, unsigned long hmask, | |||
| 952 | return 0; | 982 | return 0; |
| 953 | 983 | ||
| 954 | md = walk->private; | 984 | md = walk->private; |
| 955 | gather_stats(page, md, pte_dirty(*pte)); | 985 | gather_stats(page, md, pte_dirty(*pte), 1); |
| 956 | return 0; | 986 | return 0; |
| 957 | } | 987 | } |
| 958 | 988 | ||
diff --git a/fs/quota/quota.c b/fs/quota/quota.c index b34bdb25490c..10b6be3ca280 100644 --- a/fs/quota/quota.c +++ b/fs/quota/quota.c | |||
| @@ -355,7 +355,7 @@ SYSCALL_DEFINE4(quotactl, unsigned int, cmd, const char __user *, special, | |||
| 355 | * resolution (think about autofs) and thus deadlocks could arise. | 355 | * resolution (think about autofs) and thus deadlocks could arise. |
| 356 | */ | 356 | */ |
| 357 | if (cmds == Q_QUOTAON) { | 357 | if (cmds == Q_QUOTAON) { |
| 358 | ret = user_path_at(AT_FDCWD, addr, LOOKUP_FOLLOW, &path); | 358 | ret = user_path_at(AT_FDCWD, addr, LOOKUP_FOLLOW|LOOKUP_AUTOMOUNT, &path); |
| 359 | if (ret) | 359 | if (ret) |
| 360 | pathp = ERR_PTR(ret); | 360 | pathp = ERR_PTR(ret); |
| 361 | else | 361 | else |
| @@ -81,8 +81,6 @@ int vfs_fstatat(int dfd, const char __user *filename, struct kstat *stat, | |||
| 81 | 81 | ||
| 82 | if (!(flag & AT_SYMLINK_NOFOLLOW)) | 82 | if (!(flag & AT_SYMLINK_NOFOLLOW)) |
| 83 | lookup_flags |= LOOKUP_FOLLOW; | 83 | lookup_flags |= LOOKUP_FOLLOW; |
| 84 | if (flag & AT_NO_AUTOMOUNT) | ||
| 85 | lookup_flags |= LOOKUP_NO_AUTOMOUNT; | ||
| 86 | if (flag & AT_EMPTY_PATH) | 84 | if (flag & AT_EMPTY_PATH) |
| 87 | lookup_flags |= LOOKUP_EMPTY; | 85 | lookup_flags |= LOOKUP_EMPTY; |
| 88 | 86 | ||
