diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/nfs/dir.c | 35 | ||||
-rw-r--r-- | fs/nfs/direct.c | 4 | ||||
-rw-r--r-- | fs/nfs/inode.c | 19 | ||||
-rw-r--r-- | fs/nfs/nfs3acl.c | 2 | ||||
-rw-r--r-- | fs/nfs/unlink.c | 3 | ||||
-rw-r--r-- | fs/nfs/write.c | 2 |
6 files changed, 1 insertions, 64 deletions
diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c index a03ed2f85047..34da48586829 100644 --- a/fs/nfs/dir.c +++ b/fs/nfs/dir.c | |||
@@ -1001,12 +1001,7 @@ static struct dentry *nfs_atomic_lookup(struct inode *dir, struct dentry *dentry | |||
1001 | goto out; | 1001 | goto out; |
1002 | } | 1002 | } |
1003 | 1003 | ||
1004 | if (nd->intent.open.flags & O_CREAT) { | 1004 | res = nfs4_atomic_open(dir, dentry, nd); |
1005 | nfs_begin_data_update(dir); | ||
1006 | res = nfs4_atomic_open(dir, dentry, nd); | ||
1007 | nfs_end_data_update(dir); | ||
1008 | } else | ||
1009 | res = nfs4_atomic_open(dir, dentry, nd); | ||
1010 | unlock_kernel(); | 1005 | unlock_kernel(); |
1011 | if (IS_ERR(res)) { | 1006 | if (IS_ERR(res)) { |
1012 | error = PTR_ERR(res); | 1007 | error = PTR_ERR(res); |
@@ -1224,9 +1219,7 @@ static int nfs_create(struct inode *dir, struct dentry *dentry, int mode, | |||
1224 | open_flags = nd->intent.open.flags; | 1219 | open_flags = nd->intent.open.flags; |
1225 | 1220 | ||
1226 | lock_kernel(); | 1221 | lock_kernel(); |
1227 | nfs_begin_data_update(dir); | ||
1228 | error = NFS_PROTO(dir)->create(dir, dentry, &attr, open_flags, nd); | 1222 | error = NFS_PROTO(dir)->create(dir, dentry, &attr, open_flags, nd); |
1229 | nfs_end_data_update(dir); | ||
1230 | if (error != 0) | 1223 | if (error != 0) |
1231 | goto out_err; | 1224 | goto out_err; |
1232 | unlock_kernel(); | 1225 | unlock_kernel(); |
@@ -1256,9 +1249,7 @@ nfs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t rdev) | |||
1256 | attr.ia_valid = ATTR_MODE; | 1249 | attr.ia_valid = ATTR_MODE; |
1257 | 1250 | ||
1258 | lock_kernel(); | 1251 | lock_kernel(); |
1259 | nfs_begin_data_update(dir); | ||
1260 | status = NFS_PROTO(dir)->mknod(dir, dentry, &attr, rdev); | 1252 | status = NFS_PROTO(dir)->mknod(dir, dentry, &attr, rdev); |
1261 | nfs_end_data_update(dir); | ||
1262 | if (status != 0) | 1253 | if (status != 0) |
1263 | goto out_err; | 1254 | goto out_err; |
1264 | unlock_kernel(); | 1255 | unlock_kernel(); |
@@ -1284,9 +1275,7 @@ static int nfs_mkdir(struct inode *dir, struct dentry *dentry, int mode) | |||
1284 | attr.ia_mode = mode | S_IFDIR; | 1275 | attr.ia_mode = mode | S_IFDIR; |
1285 | 1276 | ||
1286 | lock_kernel(); | 1277 | lock_kernel(); |
1287 | nfs_begin_data_update(dir); | ||
1288 | error = NFS_PROTO(dir)->mkdir(dir, dentry, &attr); | 1278 | error = NFS_PROTO(dir)->mkdir(dir, dentry, &attr); |
1289 | nfs_end_data_update(dir); | ||
1290 | if (error != 0) | 1279 | if (error != 0) |
1291 | goto out_err; | 1280 | goto out_err; |
1292 | unlock_kernel(); | 1281 | unlock_kernel(); |
@@ -1305,12 +1294,10 @@ static int nfs_rmdir(struct inode *dir, struct dentry *dentry) | |||
1305 | dir->i_sb->s_id, dir->i_ino, dentry->d_name.name); | 1294 | dir->i_sb->s_id, dir->i_ino, dentry->d_name.name); |
1306 | 1295 | ||
1307 | lock_kernel(); | 1296 | lock_kernel(); |
1308 | nfs_begin_data_update(dir); | ||
1309 | error = NFS_PROTO(dir)->rmdir(dir, &dentry->d_name); | 1297 | error = NFS_PROTO(dir)->rmdir(dir, &dentry->d_name); |
1310 | /* Ensure the VFS deletes this inode */ | 1298 | /* Ensure the VFS deletes this inode */ |
1311 | if (error == 0 && dentry->d_inode != NULL) | 1299 | if (error == 0 && dentry->d_inode != NULL) |
1312 | clear_nlink(dentry->d_inode); | 1300 | clear_nlink(dentry->d_inode); |
1313 | nfs_end_data_update(dir); | ||
1314 | unlock_kernel(); | 1301 | unlock_kernel(); |
1315 | 1302 | ||
1316 | return error; | 1303 | return error; |
@@ -1368,17 +1355,13 @@ static int nfs_sillyrename(struct inode *dir, struct dentry *dentry) | |||
1368 | 1355 | ||
1369 | qsilly.name = silly; | 1356 | qsilly.name = silly; |
1370 | qsilly.len = strlen(silly); | 1357 | qsilly.len = strlen(silly); |
1371 | nfs_begin_data_update(dir); | ||
1372 | if (dentry->d_inode) { | 1358 | if (dentry->d_inode) { |
1373 | nfs_begin_data_update(dentry->d_inode); | ||
1374 | error = NFS_PROTO(dir)->rename(dir, &dentry->d_name, | 1359 | error = NFS_PROTO(dir)->rename(dir, &dentry->d_name, |
1375 | dir, &qsilly); | 1360 | dir, &qsilly); |
1376 | nfs_mark_for_revalidate(dentry->d_inode); | 1361 | nfs_mark_for_revalidate(dentry->d_inode); |
1377 | nfs_end_data_update(dentry->d_inode); | ||
1378 | } else | 1362 | } else |
1379 | error = NFS_PROTO(dir)->rename(dir, &dentry->d_name, | 1363 | error = NFS_PROTO(dir)->rename(dir, &dentry->d_name, |
1380 | dir, &qsilly); | 1364 | dir, &qsilly); |
1381 | nfs_end_data_update(dir); | ||
1382 | if (!error) { | 1365 | if (!error) { |
1383 | nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); | 1366 | nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); |
1384 | d_move(dentry, sdentry); | 1367 | d_move(dentry, sdentry); |
@@ -1412,19 +1395,15 @@ static int nfs_safe_remove(struct dentry *dentry) | |||
1412 | goto out; | 1395 | goto out; |
1413 | } | 1396 | } |
1414 | 1397 | ||
1415 | nfs_begin_data_update(dir); | ||
1416 | if (inode != NULL) { | 1398 | if (inode != NULL) { |
1417 | nfs_inode_return_delegation(inode); | 1399 | nfs_inode_return_delegation(inode); |
1418 | nfs_begin_data_update(inode); | ||
1419 | error = NFS_PROTO(dir)->remove(dir, &dentry->d_name); | 1400 | error = NFS_PROTO(dir)->remove(dir, &dentry->d_name); |
1420 | /* The VFS may want to delete this inode */ | 1401 | /* The VFS may want to delete this inode */ |
1421 | if (error == 0) | 1402 | if (error == 0) |
1422 | drop_nlink(inode); | 1403 | drop_nlink(inode); |
1423 | nfs_mark_for_revalidate(inode); | 1404 | nfs_mark_for_revalidate(inode); |
1424 | nfs_end_data_update(inode); | ||
1425 | } else | 1405 | } else |
1426 | error = NFS_PROTO(dir)->remove(dir, &dentry->d_name); | 1406 | error = NFS_PROTO(dir)->remove(dir, &dentry->d_name); |
1427 | nfs_end_data_update(dir); | ||
1428 | out: | 1407 | out: |
1429 | return error; | 1408 | return error; |
1430 | } | 1409 | } |
@@ -1516,9 +1495,7 @@ static int nfs_symlink(struct inode *dir, struct dentry *dentry, const char *sym | |||
1516 | memset(kaddr + pathlen, 0, PAGE_SIZE - pathlen); | 1495 | memset(kaddr + pathlen, 0, PAGE_SIZE - pathlen); |
1517 | kunmap_atomic(kaddr, KM_USER0); | 1496 | kunmap_atomic(kaddr, KM_USER0); |
1518 | 1497 | ||
1519 | nfs_begin_data_update(dir); | ||
1520 | error = NFS_PROTO(dir)->symlink(dir, dentry, page, pathlen, &attr); | 1498 | error = NFS_PROTO(dir)->symlink(dir, dentry, page, pathlen, &attr); |
1521 | nfs_end_data_update(dir); | ||
1522 | if (error != 0) { | 1499 | if (error != 0) { |
1523 | dfprintk(VFS, "NFS: symlink(%s/%ld, %s, %s) error %d\n", | 1500 | dfprintk(VFS, "NFS: symlink(%s/%ld, %s, %s) error %d\n", |
1524 | dir->i_sb->s_id, dir->i_ino, | 1501 | dir->i_sb->s_id, dir->i_ino, |
@@ -1558,15 +1535,11 @@ nfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry) | |||
1558 | dentry->d_parent->d_name.name, dentry->d_name.name); | 1535 | dentry->d_parent->d_name.name, dentry->d_name.name); |
1559 | 1536 | ||
1560 | lock_kernel(); | 1537 | lock_kernel(); |
1561 | nfs_begin_data_update(dir); | ||
1562 | nfs_begin_data_update(inode); | ||
1563 | error = NFS_PROTO(dir)->link(inode, dir, &dentry->d_name); | 1538 | error = NFS_PROTO(dir)->link(inode, dir, &dentry->d_name); |
1564 | if (error == 0) { | 1539 | if (error == 0) { |
1565 | atomic_inc(&inode->i_count); | 1540 | atomic_inc(&inode->i_count); |
1566 | d_instantiate(dentry, inode); | 1541 | d_instantiate(dentry, inode); |
1567 | } | 1542 | } |
1568 | nfs_end_data_update(inode); | ||
1569 | nfs_end_data_update(dir); | ||
1570 | unlock_kernel(); | 1543 | unlock_kernel(); |
1571 | return error; | 1544 | return error; |
1572 | } | 1545 | } |
@@ -1669,15 +1642,9 @@ go_ahead: | |||
1669 | d_delete(new_dentry); | 1642 | d_delete(new_dentry); |
1670 | } | 1643 | } |
1671 | 1644 | ||
1672 | nfs_begin_data_update(old_dir); | ||
1673 | nfs_begin_data_update(new_dir); | ||
1674 | nfs_begin_data_update(old_inode); | ||
1675 | error = NFS_PROTO(old_dir)->rename(old_dir, &old_dentry->d_name, | 1645 | error = NFS_PROTO(old_dir)->rename(old_dir, &old_dentry->d_name, |
1676 | new_dir, &new_dentry->d_name); | 1646 | new_dir, &new_dentry->d_name); |
1677 | nfs_mark_for_revalidate(old_inode); | 1647 | nfs_mark_for_revalidate(old_inode); |
1678 | nfs_end_data_update(old_inode); | ||
1679 | nfs_end_data_update(new_dir); | ||
1680 | nfs_end_data_update(old_dir); | ||
1681 | out: | 1648 | out: |
1682 | if (rehash) | 1649 | if (rehash) |
1683 | d_rehash(rehash); | 1650 | d_rehash(rehash); |
diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c index 28c8e1b65db0..32fe97211eea 100644 --- a/fs/nfs/direct.c +++ b/fs/nfs/direct.c | |||
@@ -510,7 +510,6 @@ static void nfs_direct_write_complete(struct nfs_direct_req *dreq, struct inode | |||
510 | nfs_direct_write_reschedule(dreq); | 510 | nfs_direct_write_reschedule(dreq); |
511 | break; | 511 | break; |
512 | default: | 512 | default: |
513 | nfs_end_data_update(inode); | ||
514 | if (dreq->commit_data != NULL) | 513 | if (dreq->commit_data != NULL) |
515 | nfs_commit_free(dreq->commit_data); | 514 | nfs_commit_free(dreq->commit_data); |
516 | nfs_direct_free_writedata(dreq); | 515 | nfs_direct_free_writedata(dreq); |
@@ -533,7 +532,6 @@ static inline void nfs_alloc_commit_data(struct nfs_direct_req *dreq) | |||
533 | 532 | ||
534 | static void nfs_direct_write_complete(struct nfs_direct_req *dreq, struct inode *inode) | 533 | static void nfs_direct_write_complete(struct nfs_direct_req *dreq, struct inode *inode) |
535 | { | 534 | { |
536 | nfs_end_data_update(inode); | ||
537 | nfs_direct_free_writedata(dreq); | 535 | nfs_direct_free_writedata(dreq); |
538 | nfs_zap_mapping(inode, inode->i_mapping); | 536 | nfs_zap_mapping(inode, inode->i_mapping); |
539 | nfs_direct_complete(dreq); | 537 | nfs_direct_complete(dreq); |
@@ -724,8 +722,6 @@ static ssize_t nfs_direct_write(struct kiocb *iocb, unsigned long user_addr, siz | |||
724 | 722 | ||
725 | nfs_add_stats(inode, NFSIOS_DIRECTWRITTENBYTES, count); | 723 | nfs_add_stats(inode, NFSIOS_DIRECTWRITTENBYTES, count); |
726 | 724 | ||
727 | nfs_begin_data_update(inode); | ||
728 | |||
729 | rpc_clnt_sigmask(clnt, &oldset); | 725 | rpc_clnt_sigmask(clnt, &oldset); |
730 | result = nfs_direct_write_schedule(dreq, user_addr, count, pos, sync); | 726 | result = nfs_direct_write_schedule(dreq, user_addr, count, pos, sync); |
731 | if (!result) | 727 | if (!result) |
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c index 1d507a2a96d6..1c23d3a67c85 100644 --- a/fs/nfs/inode.c +++ b/fs/nfs/inode.c | |||
@@ -344,7 +344,6 @@ nfs_setattr(struct dentry *dentry, struct iattr *attr) | |||
344 | return 0; | 344 | return 0; |
345 | 345 | ||
346 | lock_kernel(); | 346 | lock_kernel(); |
347 | nfs_begin_data_update(inode); | ||
348 | /* Write all dirty data */ | 347 | /* Write all dirty data */ |
349 | if (S_ISREG(inode->i_mode)) { | 348 | if (S_ISREG(inode->i_mode)) { |
350 | filemap_write_and_wait(inode->i_mapping); | 349 | filemap_write_and_wait(inode->i_mapping); |
@@ -358,7 +357,6 @@ nfs_setattr(struct dentry *dentry, struct iattr *attr) | |||
358 | error = NFS_PROTO(inode)->setattr(dentry, &fattr, attr); | 357 | error = NFS_PROTO(inode)->setattr(dentry, &fattr, attr); |
359 | if (error == 0) | 358 | if (error == 0) |
360 | nfs_refresh_inode(inode, &fattr); | 359 | nfs_refresh_inode(inode, &fattr); |
361 | nfs_end_data_update(inode); | ||
362 | unlock_kernel(); | 360 | unlock_kernel(); |
363 | return error; | 361 | return error; |
364 | } | 362 | } |
@@ -755,23 +753,6 @@ out: | |||
755 | return ret; | 753 | return ret; |
756 | } | 754 | } |
757 | 755 | ||
758 | /** | ||
759 | * nfs_end_data_update | ||
760 | * @inode - pointer to inode | ||
761 | * Declare end of the operations that will update file data | ||
762 | * This will mark the inode as immediately needing revalidation | ||
763 | * of its attribute cache. | ||
764 | */ | ||
765 | void nfs_end_data_update(struct inode *inode) | ||
766 | { | ||
767 | /* Directories: invalidate page cache */ | ||
768 | if (S_ISDIR(inode->i_mode)) { | ||
769 | spin_lock(&inode->i_lock); | ||
770 | NFS_I(inode)->cache_validity |= NFS_INO_INVALID_DATA; | ||
771 | spin_unlock(&inode->i_lock); | ||
772 | } | ||
773 | } | ||
774 | |||
775 | static void nfs_wcc_update_inode(struct inode *inode, struct nfs_fattr *fattr) | 756 | static void nfs_wcc_update_inode(struct inode *inode, struct nfs_fattr *fattr) |
776 | { | 757 | { |
777 | struct nfs_inode *nfsi = NFS_I(inode); | 758 | struct nfs_inode *nfsi = NFS_I(inode); |
diff --git a/fs/nfs/nfs3acl.c b/fs/nfs/nfs3acl.c index 7322da4d2055..9b7362565c0c 100644 --- a/fs/nfs/nfs3acl.c +++ b/fs/nfs/nfs3acl.c | |||
@@ -317,13 +317,11 @@ static int nfs3_proc_setacls(struct inode *inode, struct posix_acl *acl, | |||
317 | } | 317 | } |
318 | 318 | ||
319 | dprintk("NFS call setacl\n"); | 319 | dprintk("NFS call setacl\n"); |
320 | nfs_begin_data_update(inode); | ||
321 | msg.rpc_proc = &server->client_acl->cl_procinfo[ACLPROC3_SETACL]; | 320 | msg.rpc_proc = &server->client_acl->cl_procinfo[ACLPROC3_SETACL]; |
322 | status = rpc_call_sync(server->client_acl, &msg, 0); | 321 | status = rpc_call_sync(server->client_acl, &msg, 0); |
323 | spin_lock(&inode->i_lock); | 322 | spin_lock(&inode->i_lock); |
324 | NFS_I(inode)->cache_validity |= NFS_INO_INVALID_ACCESS; | 323 | NFS_I(inode)->cache_validity |= NFS_INO_INVALID_ACCESS; |
325 | spin_unlock(&inode->i_lock); | 324 | spin_unlock(&inode->i_lock); |
326 | nfs_end_data_update(inode); | ||
327 | dprintk("NFS reply setacl: %d\n", status); | 325 | dprintk("NFS reply setacl: %d\n", status); |
328 | 326 | ||
329 | /* pages may have been allocated at the xdr layer. */ | 327 | /* pages may have been allocated at the xdr layer. */ |
diff --git a/fs/nfs/unlink.c b/fs/nfs/unlink.c index 045ab805c17f..1aed850d18f2 100644 --- a/fs/nfs/unlink.c +++ b/fs/nfs/unlink.c | |||
@@ -66,7 +66,6 @@ static void nfs_async_unlink_init(struct rpc_task *task, void *calldata) | |||
66 | .rpc_cred = data->cred, | 66 | .rpc_cred = data->cred, |
67 | }; | 67 | }; |
68 | 68 | ||
69 | nfs_begin_data_update(dir); | ||
70 | NFS_PROTO(dir)->unlink_setup(&msg, dir); | 69 | NFS_PROTO(dir)->unlink_setup(&msg, dir); |
71 | rpc_call_setup(task, &msg, 0); | 70 | rpc_call_setup(task, &msg, 0); |
72 | } | 71 | } |
@@ -84,8 +83,6 @@ static void nfs_async_unlink_done(struct rpc_task *task, void *calldata) | |||
84 | 83 | ||
85 | if (!NFS_PROTO(dir)->unlink_done(task, dir)) | 84 | if (!NFS_PROTO(dir)->unlink_done(task, dir)) |
86 | rpc_restart_call(task); | 85 | rpc_restart_call(task); |
87 | else | ||
88 | nfs_end_data_update(dir); | ||
89 | } | 86 | } |
90 | 87 | ||
91 | /** | 88 | /** |
diff --git a/fs/nfs/write.c b/fs/nfs/write.c index 3e9e268b887e..e2bb66c34406 100644 --- a/fs/nfs/write.c +++ b/fs/nfs/write.c | |||
@@ -378,7 +378,6 @@ static int nfs_inode_add_request(struct inode *inode, struct nfs_page *req) | |||
378 | return error; | 378 | return error; |
379 | if (!nfsi->npages) { | 379 | if (!nfsi->npages) { |
380 | igrab(inode); | 380 | igrab(inode); |
381 | nfs_begin_data_update(inode); | ||
382 | if (nfs_have_delegation(inode, FMODE_WRITE)) | 381 | if (nfs_have_delegation(inode, FMODE_WRITE)) |
383 | nfsi->change_attr++; | 382 | nfsi->change_attr++; |
384 | } | 383 | } |
@@ -406,7 +405,6 @@ static void nfs_inode_remove_request(struct nfs_page *req) | |||
406 | nfsi->npages--; | 405 | nfsi->npages--; |
407 | if (!nfsi->npages) { | 406 | if (!nfsi->npages) { |
408 | spin_unlock(&inode->i_lock); | 407 | spin_unlock(&inode->i_lock); |
409 | nfs_end_data_update(inode); | ||
410 | iput(inode); | 408 | iput(inode); |
411 | } else | 409 | } else |
412 | spin_unlock(&inode->i_lock); | 410 | spin_unlock(&inode->i_lock); |